13

Re: Линус Торвальдс и Дэвид Дэймонд - Ради удовольствия

Ранним вечером он везет меня на своем «Вольво-У40» на экскурсию по заснеженным «линусовским» местам, показывая внушительное здание начальной школы, где учились и отец, и сын, проезжая мимо квартиры бабушки с дедушкой, где Линус провел первые три месяца своей жизни, и мимо дома с видом на парк, где семья жила следующие семь лет. Один год из этих семи – Линусу тогда было пять – Нике провел в Москве: учился коммунизму. Потом он показывает мне бледно-желтое здание, где расположена квартира, в которую Линус с сестрой переехали после развода родителей – на первом этаже там теперь видеомагазин для взрослых вместо магазина электроники, который был во времена детства Линуса. И наконец, мы проезжаем мимо самого внушительного из зданий – пятиэтажного дома, в котором жили бабушка с дедушкой Линуса по материнской линии и где родилась Linux. Мать Линуса Анна по-прежнему живет там. Район напоминает верхнюю часть манхэттенского Ист-Сайда в декабре.
Нике весел, умен и полон самоиронии. У него много общих жестов с сыном – например, они одинаково обхватывают подбородок ладонью во время разговора. И улыбки у них похожие. В отличие от сына, он всю жизнь занимается спортом – социалистическая закалка. Он играет в баскетбол, бегает по восемь километров в день и полюбил по утрам плавать в ледяной озерной воде. В пятьдесят пять у него спортивная походка тридцатипятилетнего. Еще одно отличие от Линуса: у Нике, похоже, бурная личная жизнь.
Мы ужинаем в шумном ресторане в центре Хельсинки, и Нике рассказывает о трудностях, которые Линусу пришлось пережить как сыну суперактивного коммуниста, постоянно выступавшего с речами, а одно время даже занимавшего небольшой общественный пост. Он объясняет, что Линуса часто дразнили из-за радикализма его отца, а некоторым детям даже запрещали с ним играть. Поэтому, говорит Нике, его сын всегда стремился держаться подальше от левого движения, которое было фоном его детства. «Он не давал мне говорить на эти темы. Он выходил из комнаты, – рассказывает Нике. – Или же старался подчеркнуть, что придерживается противоположного мнения. Я знаю, Линуса дразнили в школе из-за меня. Он старался дать мне понять, что я не должен ставить его в такое сложное положение».
Нике привозит меня к себе домой, чтобы угостить пивом. Он живет к северу от делового центра в одном из домов, построенных в 20-е годы для рабочих. Мы поднимаемся по ступенькам в квартиру и снимаем обувь при входе. Жилище выдержано в стиле контркультуры конца 60-х с плетеными абажурами, настенными украшениями и третьего мира, домашними растениями. Мы сидим за кухонным столом, Нике разливает пиво, мы разговариваем о детях. «Не нужно думать, что именно мы делаем детей тем, что они есть», – говорит он, доставая мобильный, чтобы позвонить женщине, с которой живет. Нике замечает, что Линус только сейчас начинает читать исторические книги, которые он подсовывал сыну годами, а прочитать стихи собственного дедушки, вероятно, так и не удосужился. Я спрашиваю Нике, выражал ли он когда-нибудь интерес к программированию, просил ли Линуса объяснить азы. Он отвечает, что никогда этого не делал. Отцы и дети – разные личности, поясняет он. Лезть в увлечение Линуса так же недопустимо, как «посягать на его душу». Похоже, ему нравится быть отцом известного человека. В очерке, напечатанном о Нике после получения премии, приводится его рассказ о том, как – еще когда он забирал Линуса с детской площадки – дети, показывая на него пальцами, кричали: «Смотрите, вон отец Линуса!»
Сара Торвальдс приехала на поезде из маленького городка, расположенного к западу от Хельсинки, где названия улиц пишут сначала на шведском, а потом уже на финском, где у нее хватает денег на квартиру с ванной и сауной и где – к ее радости – на улицах звучит шведская, а не финская речь. Как она объясняет, она относится к меньшинству среди меньшинства: в юности она перешла в католицизм, в результате чего оказалась среди 10 процентов нелютеранского населения Финляндии и вынудила своего агностика отца на несколько недель отречься от нее.
Она сегодня приехала в Хельсинки учить детей катехизису в рамках финансируемой правительством программы. Мила, жизнерадостна и в свои двадцать девять искренностью и серьезностью напоминает деловую старшеклассницу. Светлая кожа – и круглое лицо делают ее смутно похожей на старшего брата, но очевидно, что она гораздо общительнее его: во время нашего разговора она все время перекидывается текстовыми сообщениями с друзьями, с которыми наметила встретиться в тот же день. Она с успехом руководит собственным бюро переводов.
Полдень, и Сара везет меня пообедать с матерью, останавливаясь по дороге в разных памятных ей с детства местах: Кошачий парк, начальная школа. «Мои родители были членами коммунистической партии, поэтому в детстве нам внушали, что Советский Союз – хорошая страна. Мы ездили в Москву, – рассказывает она. – Мне больше всего запомнился огромный магазин игрушек – в Хельсинки таких больших нет». Когда родители развелись, ей было шесть лет. «Помню, как нам сказали, что папа теперь всегда будет жить отдельно. Я тогда подумала – вот хорошо, ссоры кончатся. Вообще-то он подолгу жил в Москве, поэтому мы привыкли, что он уезжает», – говорит Сара. В десять она решила переехать к отцу, в город Эспоо, расположенный неподалеку от Хельсинки, а не жить с матерью и Линусом. «Не то чтобы я не хотела жить с мамой. Я просто не хотела жить с Линусом. После этого мы с ним ссорились только по выходным. А обычно мы ссорились все время. И только когда мы стали старше, мы постепенно стали меньше ссориться».
Мы заезжаем к Анне Торвальдс в ее квартиру на первом этаже, и она радостно встречает нас. Все зовут ее Микке. Она не дает мне снять обувь по финскому обычаю: «Что за глупости! Здесь все равно грязно. Хуже уже не будет». Она невысокая, темноволосая, схватывает все на лету. Через несколько секунд после нашего приезда звонит телефон. Агент по недвижимости хочет показать мне свободную квартиру неподалеку от Микке, чтобы я мог описать ее Линусу и передать ему материалы о ней на случай, если тот захочет купить эту квартиру, чтобы иметь собственное пристанище в Хельсинки. Мы входим в просторную квартиру, где агент – вылитая Аннет Бенине в «Красоте по-американски» – велит нам перед осмотром надеть на обувь синие тряпичные тапочки. Вскоре она нарочито бодрым тоном заявляет: «А вот эта комната – идеальное место для хранения старинных произведений искусства, которым опасен солнечный свет». Микке смотрит на меня заговорщически и ехидно говорит: «Какой изящный способ сообщить, что это темная комната!»
Вернувшись к себе на кухню, Микке садится около прямоугольного стола, накрытого цветастой скатертью, и наливает кофе в огромную кружку. Ее квартира, как и квартира ее бывшего мужа, полна книг и произведений народного творчества. Там есть черно-белые занавески Маримекко. Раньше здесь было три комнаты и кухня. Когда дети уехали, Микке переехала в бывшую комнату Сары, а стены двух других снесла – получилась огромная гостиная-кухня. Она показывает на пустое место и говорит: «Вот здесь стоял его компьютер. Может, мне тут повесить какую-нибудь табличку? Как вы думаете?» Она курит сигарету за сигаретой. С ней легко говорить, и она настолько свободно владеет английским, что без запинки выпаливает фразы типа: «Он не какая-нибудь шваль подзаборная!» На стене ее спальни висит большой советский флаг. Его подарил Линусу Йоуко Виерумаки, который купил его на международных соревнованиях по прыжкам с трамплина на лыжах. У Линуса флаг годами валялся в шкафу, а Микке повесила его над своей постелью.
Микке достает альбом с немногочисленными семейными фотографиями. Там есть Линус голышом на пляже в возрасте 2–3 лет. Линус в том же возрасте, сверкает голой задницей возле старинного замка под Хельсинки. Вот тощий и нескладный Линус-подросток. Вот Микке на шестидесятилетии своего отца, профессора статистики. Микке показывает на свою старшую сестру и брата. «Она психиатр в Нью-Йорке. Он – ядерный физик. А я – паршивая овца. Верно? Но зато у меня у первой родилась внучка», – говорит она и зажигает очередную сигарету.
Мы обедаем в ресторане, носящем имя Уилта Чемберлена1. Пока Сара читает сообщения на мобильнике, Микке выпивает несколько чашек кофе. Микке вспоминает, как они с Нике спорили о том, нужно ли отнимать у Линуса пустышку: они писали друг другу записки и оставляли на столе. Потом мы говорим о плохой памяти Линуса, его неспособности запоминать лица. «Если герой фильма сменил красную рубашку на желтую, Линус обязательно спросит: „Кто этот тип?“», – говорит Сара. Они рассказывают о велосипедной поездке по Швеции. Ночевках на ночном пароме. О том, как у Сары в первый же день украли велосипед и пришлось потратить кучу денег на новый. Как поставили палатку на скале. И Линус целый день лежал в ней, читая книжки, пока мать с дочерью плавали и ловили рыбу. А потом, когда налетел мощный шквал, они поняли, что палатку не унесло в Балтийское море только потому, что в ней спал Линус, не обративший внимания на резкую перемену погоды.
Микке смеется, вспоминая о тех годах, когда Линус сидел в своей комнате, поглощенный компьютером. «Нике все говорил мне: „Выпихни его наружу, заставь найти себе работу“, но мне Линус не мешал. Ему было немного нужно. А со своим компьютером он мог делать что угодно – это его право. Я понятия не имела, что там происходит».
Сейчас она – как и все – в курсе дел Линуса. Микке и другие родственники получают груду запросов от журналистов. Эти запросы направляются Линусу, а он обычно просит мать, отца или сестру ответить по собственному усмотрению. Однако, прежде чем отправлять свой ответ репортеру, они обычно посылают его на утверждение Линусу.
За несколько месяцев до этого, когда я послал Микке запрос по электронной почте о детстве Линуса, она ответила длинным, мастерски написанным посланием под названием «Как из маленького ботаника вырос Линус». Она писала, как заметила в едва научившемся ходить малыше научные наклонности, которые наблюдала у своего отца и старшего брата.
«Если у человека загораются глаза при появлении проблемы и он перестает слышать то, что ты говоришь, не может ответить на простейшие вопросы, полностью поглощен тем, чем занят в настоящий момент, во время решения задачи готов обходиться без сна и еды и никогда не сдается (его, конечно, можно прервать, и в обыденной жизни так часто и случается, но потом он снова продолжает свою работу, не думая ни о чем другом) – это верный признак». Она писала о бесконечной войне между Линусом и Сарой, об их непримиримых противоречиях. (Сара: «Я НЕ ЛЮБЛЮ грибы/печенку/еще что-то». Линус: «НЕТ, ЛЮБИШЬ!») И сдержанное уважение. «Однажды – еще в раннем детстве – Линус четко выразил свое восхищение сестрой. Ему было лет шесть-семь, когда он очень серьезно сказал мне: „Знаешь, я никогда не думаю новые мысли. Я думаю те мысли, которые люди уже думали до меня. Я их просто переставляю. А Сара думает такие мысли, которых раньше не было“».
Из этих воспоминаний следует, что я по-прежнему не думаю, что у Линуса есть какой-то специальный дар – и уж точно не к компьютерам. Если бы не компьютеры, он бы увлекся чем-то еще. В другой день и в другом возрасте он бы увлекся решением какой-то другой задачи. Думаю, это еще впереди. (Я имею в виду, что он, надеюсь, не застрянет на всю жизнь на обслуживании Linux.) Потому что, как мне кажется, им движет не любовь к компьютерам и, уж конечно, не стремление прославиться или разбогатеть, а искреннее любопытство и желание победить возникающие трудности. Причем сделать это так, как надо, потому что иначе нельзя и он не сдастся.
Я уже, по-моему, ответила на вопрос, каким сыном был Линус – его было легко растить. Стоило ему поставить себе задачу – и он забывал обо всем. Когда еще ребенком он увлекся компьютерами, все стало совсем просто. Как мы с Сарой говорили: дайте Линусу чулан с хорошим компьютером, кормите его сухими макаронами, и он будет совершенно доволен.
Одно только меня тревожило: как же при таком образе жизни он встретит хорошую девушку? Я могла лишь еще раз прибегнуть к испытанному родительскому средству: держать пальцы скрещенными. И, к счастью, это сработало! Он встретил Туве на занятиях в университете, и когда из-за нее он на несколько дней забыл и кота, и компьютер, стало ясно, что Природа – как и положено – взяла свое.
Я только надеюсь, что фимиамы славы не слишком отвлекут его. (Похоже, слава не изменила Линуса, но он действительно смягчился и теперь вступает в беседу с людьми, которые к нему обращаются. Кажется, что ему стало трудно говорить «нет». Но я подозреваю, что это больше связано с тем, что Линус стал мужем и отцом, чем со всей этой шумихой, поднятой прессой.)
Очевидно, что и мать и дочь полностью в курсе всей этой шумихи. Мы встречались в конце января 2000 года, на следующий день после того, как Transmeta публично объявила о своих планах и в начале обеда Микке спросила Сару: «В сегодняшней газете было что-нибудь, сама знаешь о ком и сама знаешь о чем?»
Вечером по дороге на работу Микке заезжает на такси ко мне в отель, чтобы завезти сосновый стульчик, который хочет передать Патриции. Вместе с планом квартиры для Линуса.

14

Re: Линус Торвальдс и Дэвид Дэймонд - Ради удовольствия

Вот, кажется, мое первое воспоминание о том, что Линус сделал что-то примечательное.
Дело было, думаю, в начале 1992 года. Я приехал к Линусу на велосипеде без особой цели. Мы сидели в его всегдашнем бардаке, смотрели MTV, и я спросил, как идет разработка Linux. Обычно он отделывался пустыми фразами. В этот раз он повел меня к компьютеру (из замусоренной кухни в совершенно захламленную комнату).
Линус ввел имя пользователя и пароль и попал в режим командной строки. Он показал мне некоторые базовые функции интерпретатора команд, ничего особенного. Потом повернулся ко мне со своей характерной улыбкой: «Похоже на DOS, правда?»
Я удивился и кивнул. Я не был потрясен, потому что это уж слишком походило на DOS, при этом ничего особенно нового. Мне нужно было догадаться, что Линус не станет так улыбаться без особой причины. Линус снова повернулся к компьютеру и нажал какую-то комбинацию клавиш – появилось новое приглашение для ввода пароля. Новый пароль – и снова режим командной строки. Линус показал мне четыре разных командных строки и объяснил, что в будущем они будут доступны четырем различным пользователям.
В этот момент я понял, что Линус создал нечто чудесное. Меня это никак не задело – в снукер-то я у него по-прежнему выигрываю.

Для меня это в первую очередь значило, что телефон все время занят и к нам никто не может дозвониться… Потом стали приходить открытки со всех концов света. Наверное, тогда я начала понимать, что его творением действительно пользуются реальные люди в реальном мире.
V
Красота программирования
Не знаю, как описать мою любовь к программированию, но я попробую. Если этим занимаешься, кажется, что в мире нет ничего интереснее. Эта игра гораздо увлекательнее шахмат, игра, в которой можно устанавливать собственные правила и где конечный результат можно понимать по-своему.
А со стороны кажется – нет на свете ничего скучнее.
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что-то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
Это само по себе интересно.
Но такое слепое послушание хотя и увлекает сначала, вряд ли может привязать надолго. На самом деле оно как раз быстро наскучит. Интереснее всего другое: чтобы заставить компьютер делать то, что хочешь, сперва нужно придумать как.
Для меня программирование во многом похоже на физику. Обе науки имеют дело с устройством мира на базовом уровне. Разница, конечно, в том, что физик исследует, как сделан мир, а программист его создает. В пределах компьютера ты творец. Ты можешь безраздельно управлять всем, что происходит. Если хватает умения, то ты – бог. Местного значения.
Возможно, я оскорбил этими словами около половины населения Земли.
Но это правда. Ты создаешь свой собственный мир, и тебя ограничивают только возможности твоей машины или – в наше время все чаще – твои собственные способности.
Возьмем, к примеру, шалаш на дереве. Можно построить прочный шалаш со всеми необходимыми вещами, включая люк. Но всем известно, что красивый шалаш отличается от просто прочного тем, что при его создании учли особенности самого дерева. То есть нужно сочетание искусства и техники. Это одна из причин, почему программирование обладает такой притягательной силой и является таким благодарным занятием. Функциональность часто отступает на второй план перед увлекательностью, красотой или неординарностью. Это очень творческое занятие.
Сначала я просто хотел узнать, как работает компьютер. И меня страшно обрадовало, что тут – как и в математике – можно построить собственный мир со своими законами. В физике тебя ограничивают уже существующие законы. А в математике, как и в программировании, годится все, что непротиворечиво. Внешняя логика не накладывает на математику никаких ограничений – все должно быть логично само по себе. Как знает всякий математик, можно установить набор правил, по которым три плюс три равняется двум. По существу можно делать все, что хочешь, важно только по мере усложнения системы тщательно следить, чтобы не создавать ничего, противоречащего уже построенному миру. Чтобы твой мир был прекрасен, он не должен содержать изъянов. Точно так же и в программировании.
Одна из его привлекательных сторон заключается в том, что можно экспериментировать с созданными тобой мирами и выяснять их возможности. В математике можно заниматься умственной гимнастикой, проверяя, что может быть. Например, большинство людей под геометрией подразумевают Евклидову геометрию. Однако компьютеры позволяют увидеть и другие – совсем не евклидовы – геометрии. С помощью компьютеров можно посмотреть, как выглядят эти придуманные миры. Помните множество Мандельброта – фрактальные изображения, в основе которых лежат уравнения Бенуа Мандельброта? Это наглядные представления чисто математических понятий, которые стали возможны только благодаря компьютерам. Мандельброт просто придумал произвольные правила для несуществующего мира, который не имеет никакого отношения к реальности, но оказалось, что они порождают замечательные узоры. С помощью компьютеров и программирования можно создавать все новые миры, и некоторые возникающие при этом узоры по-настоящему прекрасны.
Но основное время уходит совсем не на это. Нужно просто писать программы для выполнения определенных заданий. При этом не создается новый мир, а просто решается проблема в мире компьютера. Ты думаешь над задачей – и она решается. Но далеко не каждый способен сидеть, уставившись в экран, и обдумывать задачу. Только чокнутые хакеры вроде меня.
Операционная система – это основа всего, что происходит в машине. Ее создание – самая сложная задача. Создавая операционную систему, ты строишь мир, в котором будут жить все остальные программы, работающие на компьютере. По сути ты задаешь правила: что допустимо и может быть сделано, а что – нет. Так можно сказать про любую программу, но к операционке это относится в первую очередь. Она подобна конституции созданной тобой страны, а все остальные программы – лишь обычные законы.
Некоторые законы оказываются бессмысленными. Такие тебе не нужны. Важно, чтобы, посмотрев на решение, можно было понять, что ты получил правильный ответ правильным способом.
Помните того своего одноклассника, у которого всегда получался правильный ответ? Он решал задачу быстрее всех, и у него это получалось именно потому, что он к этому не стремился. Он не выяснял, как следует решать эту задачу. Он просто находил правильный подход. И, услышав ответ, вы сразу понимали, что это так.
То же самое и с компьютерами. Можно добиться чего-то с помощью грубой силы, по-дурацки перемалывая проблему, пока от нее ничего не останется. А можно найти верный подход, и проблема сама внезапно исчезнет. Вдруг удается взглянуть на нее под новым углом, и наступает прозрение: проблема существовала только потому, что ты на нее неправильно смотрел.
Вот очень наглядный пример не из компьютерной области, а из математики. Легенда гласит, что, когда великий немецкий математик Карл Фридрих Гаусс еще учился в школе, его учитель, чтобы занять учеников, велел им сложить все целые числа от 1 до 100. Учитель рассчитывал, что ребята провозятся с этим целый день. Но будущий математик уже через пять минут получил верный ответ: 5050. Настоящее решение не в том, чтобы тупо складывать все эти числа – это глупо и скучно. Гаусс просто заметил, что 1 и 100 в сумме дают 101, а 2 и 99 снова дают 101. Как и 3 плюс 98. И так до 50 плюс 51. За считанные секунды он понял, что таких пар 50, каждая в сумме дает 101, поэтому ответ – 5050.
Может быть, эта история и недостоверна, но идея ясна: великий математик не станет решать задачу долгим и нудным способом, потому что увидит лежащую в основе схему и с ее помощью решит задачу быстро и эффектно. То же самое, безусловно, применимо и к компьютерной науке. Конечно, можно просто написать программу, которая вычисляет сумму. Для современных компьютеров это элементарная задача. Но великий программист узнает ответ просто потому, что у него голова на плечах. Он придумает красивую программу, которая будет решать задачу по-другому – правильно.
Очень трудно объяснить, что интересного в том, чтобы биться головой об стену три дня подряд, не зная, как лучше, красивее решить задачу. Но когда ты нашел решение – это чувство нельзя сравнить ни с чем в мире.
VI
Мой эмулятор терминала обрастал наворотами. Я регулярно использовал его, чтобы подключиться к университетскому компьютеру и получить почту или поучаствовать в конференции по Minix. Беда была в том, что я хотел скачивать и закачивать файлы. То есть мне нужно было уметь писать на диск. Для этого моей программе эмуляции нужен был драйвер дисковода. А еще ей был нужен драйвер файловой системы, чтобы она могла вникать в организацию диска и записывать скачиваемые файлы.
Тут я чуть было не сдался: мне показалось, что возни будет слишком много и дело того не стоит. Но заняться все равно было особенно нечем. В университете той весной не было ничего сложного. Развлекался я только раз в неделю – по средам ходил на собрания «Спектрума». Я был настолько антиобщественным животным, что это была для меня единственная возможность отвлечься от учебы и программирования. Без этих вечеринок я был бы в ту весну полным отшельником, а так – был почти отшельником. «Спектрум» открывал мне путь к общению, поэтому я вряд ли пропустил хоть одну встречу. Эти собрания были для меня настолько важны, что иногда я терял сон в ожидании очередного вечера, надеясь, что не буду там постоянно думать о том, какой я неконтактный, какой у меня нос и что у меня нет девушки. Это все стандартные для хакеров заморочки.
Одним словом, жизнь моя не блистала разнообразием. А разработка драйверов для дисковода и файловой системы казалась интересным делом. И я решил им заняться. Написал драйвер дисковода. А поскольку я хотел записывать файлы в файловую систему Minix, да к тому же эта система была хорошо документирована, я сделал свою файловую систему совместимой с системой Minix. Таким образом я мог читать файлы, созданные в Minix, и писать файлы на тот же диск, так что Minix могла читать файлы, созданные моей программой эмуляции терминала.
Я крутился как белка в колесе: программирование – сон – программирование – еда (соленые сухарики) – программирование – сон – программирование – душ (на скорую руку) – программирование. К концу работы стало ясно, что моя программа превращается в операционную систему. И я стал думать о ней не как о программе эмуляции терминала, а как об операционной системе. Этот сдвиг произошел, вероятно, в дурмане одного из затянувшихся сеансов программирования. Было это днем или ночью? Не знаю. Сижу я в своем старом халате и работаю с программой эмуляции, снабженной дополнительными функциями. А потом вдруг понимаю, что этих функций стало так много, что программа превратилась в рабочую версию операционной системы.
Я называл ее «программой эмуляции терминала типа gnu-emacs». Gnu-emacs начинался как редактор, но его создатели встроили в него кучу разных функций. Они хотели, чтоб это был редактор, который можно программировать, но потом программистская часть выросла до невообразимых размеров и редактор стал настоящим кошмаром. В него входит все, кроме разве что кухонной раковины, именно поэтому кухонная раковина часто служит его значком. Программа известна как чудовищный монстр, который включает больше функций, чем в принципе может понадобиться редактору. То же самое происходило с моим эмулятором терминала. Он превращался в нечто гораздо большее.

15

Re: Линус Торвальдс и Дэвид Дэймонд - Ради удовольствия

To: Newsgroup: comp.os.minix
Subject: Gcc-1.40 и вопрос о posix
Message-ID: <1991 Ju 13,100050. 9886@klaava.Helsinki.Fi>
Date: 3 Jul 91 10:00:50 GMT
Привет, сетяне!
Я сейчас делаю один проект (под minix), и мне нужно определение стандартов posix. Кто-нибудь знает, где можно взять их последнюю версию, желательно в электронном виде? Ftp-сайты годятся.

Это самое раннее публичное свидетельство того, что некий хакер из Финляндии хочет проверить границы своих возможностей. Стандарты POSIX – это подробнейшие правила для каждого из сотен системных вызовов в Unix – что нужно для того, чтобы заставить компьютер выполнить эту операцию, начиная с Read, Write, Open и Close. Они вырабатываются специальной организацией, состоящей из представителей компаний, которые хотят договориться об общих стандартах для Unix. Стандарты нужны для того, чтобы программисты могли писать приложения, которые будут работать под разными версиями Unix. Из списка системных вызовов, особенно наиболее важных, я хотел узнать, какие функции нужны операционной системе. После этого я смог бы написать свои собственные коды для выполнения всех этих функций. А соответствие стандартам POSIX позволило бы другим, людям пользоваться моими программами.
В то время я не знал, что печатную версию этих стандартов можно было купить непосредственно у разработчиков POSIX, но это в любом случае не имело значения. Даже если бы покупка была мне по карману, пересылка книги в Финляндию заняла бы слишком много времени. Поэтому я и просил указать версию, которую можно бесплатно скачать с FTP-сайта.
На мой вопрос о стандартах POSIX никто не ответил, поэтому я перешел к запасному плану. Я стал исследовать документацию Unix версии Sun Microsystems – эта система стояла на университетском сервере. Там нашлась базовая версия системных вызовов – для начала мне этого было достаточно. Можно было посмотреть, что должны делать системные вызовы, а потом заняться их реализацией. В документации не говорилось, как получить результат, просто показывалось, каким он должен быть. Часть системных вызовов мне удалось откопать в книге Эндрю Таненбаума и в некоторых других. В конце концов кто-то прислал мне толстые тома со стандартами POSIX.
Однако мое сообщение не прошло незамеченным. Каждый знающий человек (а кто еще станет читать сайт Minix?) понял, что я пишу операционную систему. Иначе зачем бы мне понадобились правила POSIX? Мое сообщение вызвало любопытство Ари Лемке, преподавателя из Технического университета Хельсинки (где бы я непременно стал учиться, если бы меня не так привлекали теоретические занятия). Ари по-дружески обратился ко мне, предложив выделить на университетском FTP-сервере каталог, в который я смогу поместить свою операционную систему, когда она будет готова, чтобы каждый при желании мог ее оттуда скачать.
VII
Похоже, Ари Лемке страдал излишним оптимизмом. Он создал каталог задолго до того, как у меня появилось что туда положить. У меня был пароль, и все было готово для того, чтобы я мог просто войти в систему и закачать свою программу. Но прошло долгих четыре месяца, прежде чем мне захотелось чем-нибудь поделиться с миром или хотя бы с Ари и несколькими другими фанатами операционных систем, с которыми я переписывался.
Исходно я хотел написать такую операционку, которую мог бы использовать вместо Minix. Мне не нужно было, чтобы она могла делать больше, чем Minix, но она должна была выполнять те функции Minix, которыми я пользовался, а также кое-что еще. Например, в Minix не только была плохая эмуляция терминала, но и не было возможности перевести в фоновый режим программу, которой временно не пользуешься. И управление памятью было очень упрощенным – в Mac OS оно и сейчас такое, кстати.
Как создать операционку? Надо выяснить, что должны делать системные вызовы, и написать программы, которые будут это делать. Вообще говоря, системных вызовов около двух сотен. Некоторые из них могут соответствовать целому набору функций. Другие – совсем просты. Наиболее фундаментальные системные вызовы могут быть весьма сложными и в значительной мере зависят от имеющейся инфраструктуры. Возьмем системные вызовы Write (запись) и Read (чтение). Для записи на диск и чтения с диска нужно создать драйвер дисковода. Возьмем вызов Open (открыть). Нужно создать весь уровень файловой системы, который будет анализировать имена и определять, где что лежит на диске. На один этот системный вызов ушло несколько месяцев. Но когда он был уже готов, тот же самый программный код можно было использовать и для других функций.
Так шла разработка на ранних этапах. Я читал стандарты в руководствах к Sun OS и других книжках, брал системные вызовы один за другим и старался написать что-нибудь работающее. Это было довольно изнурительно.
А все потому, что, когда ничего не происходит, трудно оценить объем сделанного. Можно писать маленькие тестики, которые будут проверять то, что ты только что добавил. Но при этом реально ничего не выполняется. Через некоторое время я бросил перебирать системные вызовы по списку и перешел к другому методу. Получилась довольно полная система, и мне захотелось выполнить настоящую программу. Первым делом нужно запустить оболочку, потому что без нее довольно трудно запустить что-нибудь еще. А кроме того, оболочка сама по себе содержит множество системных вызовов, которые все равно понадобятся. Стоит ее запустить, и можно получить текущий список системных вызовов, которые еще не реализованы.
В Unix оболочка – это своего рода мать всех программ. Она всегда наготове, чтобы запустить любой другой бинарник. (Бинарник – это программа, составленная из нулей и единиц – на языке, который понимает машина. Если вы написали программу на каком-то языке программирования, нужно откомпилировать исходный код, чтобы получить бинарник.) Прежде всего оболочка позволяет вам войти в систему. Ну хорошо, в реальной Unix-системе по традиции первая программа, которую вы запускаете, это init, но для работы init необходима большая инфраструктура. Это своего рода контроллер происходящего. Но если у вас нет ничего работающего, то вам и init не нужна.
Поэтому мое ядро запускало не init, а оболочку. К тому времени я реализовал около двадцати пяти системных вызовов и, как я уже писал, это была первая настоящая программа, которую я хотел запустить. Оболочку я сам не писал. Я загрузил к себе на диск клон Bourne Shell, одной из исходных оболочек Unix. Он бесплатно распространялся по Интернету, и его название представляло собой плохой каламбур. Исходную оболочку написал чувак по имени Bourne, поэтому клон назывался Bourne-Again Shell1. Обычно его сокращали до bash.
Стоит начать загружать с диска настоящую программу, как обнаруживается прокол в драйвере дисковода или в загрузчике, так что тот не понимает, что считывает. Поэтому он выдает комментарии по ходу своих действий. Это очень важно, потому что только так можно узнать, в чем беда.
Я дошел до той стадии, когда моя программа загружала оболочку и выдавала на печать сообщение о каждом системном вызове, который содержался в оболочке, но который я еще не реализовал. Я загружался, запускал оболочку, а она выплевывала что-нибудь типа: «Системный вызов 512 не выполнен». День и ночь я вчитывался в распечатки системных вызовов, пытаясь понять, какие я написал неправильно. Но это было намного увлекательнее, чем идти по списку системных вызовов и реализовывать их один за другим. Теперь продвижение было более наглядным.
Наконец, в конце августа или начале сентября, оболочка заработала. После этого все стало намного проще.
Это был важный момент.
Как только оболочка заработала, я почти сразу же смог откомпилировать еще несколько программ. Оболочка была сложнее, чем, к примеру, программа копирования cp или команда выдачи листинга каталогов ls. Все нужное уже было сделано для оболочки, поэтому, когда она заработала, произошел резкий скачок от практически нулевой отметки до ста, ведь все составные части уже были на месте. В какой-то момент готовых компонент оказалось столько, что настал миг типа «Да будет свет!», потому что до этого ничего по-настоящему не работало.
Я был страшно доволен. Особенно потому, наверное, что в то лето ничем, кроме программирования, не занимался. И это не преувеличение. С апреля по август в Финляндии лучше всего. Все плавают на лодках между островами, загорают на пляжах, сидят в дачных саунах. Я же редко вообще знал, день сейчас или ночь, рабочий день или выходной. Плотные черные занавески отгораживали меня от почти круглосуточного солнечного света и вообще от внешнего мира. В иные дни (или ночи?) я выпрыгивал прямо из постели на стул перед компьютером, до которого было примерно полметра. Мой отец, по-видимому, уговаривал маму заставить меня наняться на лето на работу. Но ей было все равно: я ей не мешал. Вот Сара немного сердилась, что занят телефон, когда я выходил в онлайн. (Она бы, вероятно, выразила эту мысль несколько менее дипломатично.) Без всякого преувеличения можно сказать, что у меня практически не было контактов с миром вне моего компьютера. Ну хорошо, может, раз в неделю в окно стучал приятель, и если я не просматривал в это время на экране какую-нибудь важную программу, то впускал его в дом. (Это всегда был «он» – вы помните, это было еще до того, как хакеры стали популярны среди девушек.) Мы садились на часок попить чаю и посмотреть MTV в нашей кухоньке. Теперь, когда я задумался, то начинаю припоминать, что иногда выходил выпить пива или сыграть в снукер, если в окно стучался кто-нибудь вроде Иоуко (я обычно зову его «Авутоном»). Но больше, честное слово, в моей жизни ничего в то время не происходило.
И я ни в малейшей степени не чувствовал себя жалким бледным яйцеголовым неудачником. Оболочка работала, а это значило, что я фактически построил основу работоспособной операционной системы. И я получал удовольствие.
Когда оболочка заработала, я стал тестировать встроенные в нее программы. Потом я накомпилировал достаточно новых программ, чтобы начать делать что-то настоящее. Я компилировал все в Minix, но перенес оболочку в специальный раздел, который создал для новой операционной системы. Про себя я называл ее Linux.
Честное слово, я никогда не собирался выпускать ее под именем Linux, потому что это казалось мне слишком нескромным. Какое имя я приготовил для окончательной версии? Freax. (Поняли? Freaks – фанаты – и на конце x от Unix.) На самом деле некоторые ранние файлы проекта – файлы, где описывается, как компилировать исходники – около полугода содержали название Freax. Но это не имело особого значения. В то время мне не нужно было название, потому что я не собирался ее никому показывать.
VIII

From: torvaldsSklaava.Helsinki.Fi (Linus Benedict Torvalds)
To: Newsgroups: comp.os.inix
Subject: Чего вам больше всего не хватает в minix?
Summary: небольшой опрос для моей операционной системы Message-ID: <1991Aug25.205708.9541@klaava.Helsinki.Fi>
Привет всем пользователям minix! Я тут пишу (бесплатную) операционную систему (любительскую версию – она не будет такой большой и профессиональной, как gnu) для 386-х и 486-х AT. Я вожусь с этим с апреля, и она, похоже, скоро будет готова. Напишите мне, кому что нравится/не нравится в minix, поскольку моя ОС на нее похожа (кроме всего прочего, у нее – по практическим соображениям – то же физическое размещение файловой системы).
Пока что я перенес в нее bash (1.08) и gcc (1.40), и все вроде работает. Значит, в ближайшие месяцы у меня получится уже что-то работающее, и мне бы хотелось знать, какие функции нужны большинству. Все заявки принимаются, но выполнение не гарантируется: –)
Линус (Torvalds@klaava.Helsinki.fi)
PS. Она свободна от кода minix и включает мультизадачную файловую систему. Она НЕ переносима (используется переключение задач 386 и пр.) и, возможно, никогда не будет поддерживать ничего, кроме АТ-винчестеров – потому что у меня больше ничего нет: – (.

Наиболее рьяные энтузиасты Minix встрепенулись. Мне прислали не так много заявок по поводу ее функций, но зато были другие сообщения.

>Расскажи поподробней! Ей нужен MMU?
Ответ: да
>Какая часть написана на Си? Какие будут трудности
>при переносе? Кто тебе поверит про машинную
>зависимость;-), я вот хочу ее перенести к себе на
>Amiga.
Ответ: она в основном написана на Си, но многие скажут, что это не настоящий Си. В ней использованы все особенности 386-го, которые я смог обнаружить, потому что хотел попутно разобраться в его работе. Некоторые из моих файлов на Си сильно смахивают на ассемблер.
Как я уже писал, она использует MMU как для страничной подкачки (пока не на диск), так и для сегментации. Именно из-за сегментации она ПО-НАСТОЯЩЕМУ зависит от 386-го (у каждой задачи есть 64-мегабайтный сегмент для кода и данных – максимум 64 задачи на 4 Гб. Если нужно больше 64 Мб на задачу – будут проблемы).

Несколько человек даже предложили стать бета-тестерами.
В итоге разместить ее в Интернете было просто естественно. Я привык обмениваться программами именно так. Поэтому вопрос был только один – на каком этапе я решусь показать ее людям? Или точнее: когда она будет достаточно готова, чтобы мне нечего было стыдиться?
Вообще-то мне хотелось иметь компилятор и настоящую среду, чтобы можно было писать программы прямо в Linux, без помощи Minix. Но я был так горд, когда у меня заработала оболочка gnu, что был готов всем это показать. И еще мне хотелось получить отклики.
К тому моменту, как заработала оболочка, у меня было несколько элементарных бинарников, которые я скомпилировал для операционки. Делать с ними пока было особенно нечего, но уже было видно, что система похожа на Unix. На самом деле она работала, как увечная Unix.
И вот я решился ее выложить. Я не делал публичных объявлений, а просто написал пятерым-десятерым хакерам на личные адреса, что она лежит на FTP-сайте. В числе прочих я написал знаменитому среди фанатов Minix Брюсу Эвансу и Ари Лемке. Я выложил исходники самой Linux и еще несколько бинарников, чтобы можно было хоть что-то делать. Я сказал, что нужно, чтобы запустить все это хозяйство. На машине должна была стоять Minix (версия 386) и нужен был компилятор GCC. Причем на самом деле нужна была моя версия GCC, поэтому ее я тоже выложил.
Существуют правила нумерации версий. Это вопрос психологический. Когда вы считаете, что программа по-настоящему готова – это версия 1.0. А до этого вы нумеруете версии так, чтобы было видно, сколько еще предстоит потрудиться до выпуска 1.0. Из этих соображений я положил на FTP-сайт версию 0.01. Чтобы все знали, что она мало на что пока годится.
Эту дату я хорошо помню: 17 сентября 1991 года.
Не думаю, чтобы ту версию проверяло больше одного-двух человек. Для этого нужно было возиться с установкой специального компилятора, выделить пустой раздел, чтобы использовать его для загрузки, откомпилировать мое ядро и запустить оболочку. А кроме запуска оболочки, делать было особенно нечего. Можно было распечатать исходники – всего 10 000 строк, т. е. меньше ста страниц, если печатать мелким шрифтом. (Сейчас там уже порядка 10 миллионов строк.)
Я стал распространять свою операционку прежде всего, чтобы доказать, что все это не пустая болтовня – я действительно что-то сделал. В Интернете много болтают. О чем бы ни шла речь – об операционке или о сексе – многие в киберпространстве просто вешают лапшу на уши. Поэтому важно после того как ты растрезвонил, что пишешь операционку, иметь возможность сказать: «Вот – я ее и правда сделал. Я не трепло – можете сами посмотреть».
Ари Лемке, который организовал для нее FTP-сайт, невзлюбил название Freax. Ему больше нравилось другое рабочее название, которое я использовал – Linux. Поэтому он назвал мой каталог pub/OS/Linux. Признаюсь – я не особенно сопротивлялся. Но инициатива была его. Поэтому я могу честно – или почти честно – сказать, что не был нескромным. Я тогда подумал, а что – хорошее название, и всегда можно будет на кого-нибудь свалить. Что я и делаю.
Как я уже говорил, моя операционка была не очень полезной. Она легко рушилась, если переполнить память или еще что-то не так сделать. Даже если вы ничего плохого не делали, система рушилась после более-менее продолжительного периода работы. Она тогда и не предназначалась для работы. На нее можно было только любоваться. И восхищаться ею.
То есть просто экспонат для группы людей, которые интересуются разработкой операционных систем. Для горстки технарей с узкой специализацией.
Реакция была неизменно положительная, но при этом так же неизменно звучало: «А вот хорошо бы она еще это делала» или «Смотрится классно, но на моем компьютере не работает».
Помню одно сообщение, где говорилось, что автору очень понравилась моя операционка, он не меньше абзаца описывал, какая она классная. Потом объяснял, что она только что уничтожила его жесткий диск и что мой драйвер дисковода с придурью. Даже потеряв все свои файлы, он все равно был настроен очень положительно. Такие сообщения было читать очень приятно. Это был отчет об ошибках в программе, которая все у него вверх дном перевернула.
Именно таких сообщений я и ждал. Я исправил кое-какие глюки (например, система перестала зависать, когда кончалась память). И еще я сделал большой шаг вперед – перенес в нее компилятор GCC, так что можно было компилировать небольшие программы. Теперь пользователям не нужно было перед запуском операционки загружать мой компилятор GCC.