Just for fun. Рассказ нечаянного революционера

Торвальдс Линус

Даймонд Дэвид

Рождение ОПЕРАЦИОННОЙ СИСТЕМЫ

 

 

I

Некоторые люди запоминают события по машинам, которые тогда водили, должностям, на которых работали, местам, в которых жили, или по девушкам, с которыми встречались. У меня все связано с компьютерами.

Пока я рос, у меня сменилось три компьютера. Вначале – тот самый Commodore VIC-20 – дедушкино наследство. Это один из первых домашних компьютеров, предшественник сегодняшних PC. После VIC-20 шел Commodore 64, а потом – Amiga, у которой было особенно много поклонников в Европе. Все эти компьютеры никогда не были по-настоящему популярны, как PC или даже Apple II, который уже был широко распространен, когда я играл с VIC.

В те времена, до появления PC, домашние пользователи программировали в основном на ассемблере. (Просто не верится, что я дожил до рассказов про «те времена»!) У компьютеров были собственные операционные системы, типа DOS, стоявшей на PC. В зависимости от компьютера эти операционки были либо совсем элементарными, либо чуть более продвинутыми. У них, как и у DOS, имелся загрузчик программ и базовый язык. Никаких стандартов тогда еще не существовало, и за рынок боролось несколько компаний. Commodore входила в число известных.

Когда я выжал из VIC-20 все, что смог, я стал копить на модель следующего поколения. И это играло в моей жизни важнейшую роль. Как я уже говорил, я не помню, где кто из моих родственников жил в тот или иной момент, и множество других вещей, но путь к моему второму компьютеру мне не забыть.

Сначала я отложил деньги, полученные в подарок на Рождество и на день рождения (поскольку я родился 28 декабря, эти два праздника для меня сливались). Летом я заработал еще немного на уборке хельсинкских парков. Многие парки Хельсинки – это просто зоны отдыха или слегка окультуренные леса, а не те аккуратно подстриженные посадки, которые обычно ассоциируются с городскими парками. Нам поручалось спиливать чересчур разросшиеся кусты и подбирать засохшие ветки – было даже интересно. Мне всегда нравилось на природе. А одно время я работал почтальоном – разносил рекламные проспекты. Вообще-то я не особенно увлекался летними работами, но в тот период я ими занялся. Хотя, наверное, основную сумму я накопил за счет школьных стипендий.

В Финляндии довольно распространены пожертвования школам, даже государственным начальным. Поэтому, начиная с четвертого класса, деньги распределяются среди школьников в соответствии с замыслом учредителя фонда. Помню, в моей школе одно из пожертвований предназначалось самому популярному ученику класса. Это было в шестом классе, и мы решали, кому дать деньги, простым голосованием. Могу добавить, что мне они не достались. Сокровище равнялось двумстам финским маркам, или по тем временам примерно сорока долларам, но шестиклассникам цена популярности представлялась весьма высокой.

Очень часто деньги давали самому лучшему ученику по определенному предмету или виду спорта. Много наград выделяла сама школа или государство. Иногда призы с течением времени обесценивались. Помню, один равнялся примерно центу. В такой ситуации школа входила в долю, чтобы сделать награду более весомой, но она все равно оставалась небольшой. Тут уже соль была просто в сохранении традиции ежегодного присуждения награды. В Финляндии к научным традициям относятся серьезно, и это хорошо.

Я ежегодно получал стипендии как лучший математик.

К старшим классам суммы увеличивались. Самые крупные доходили до 500 долларов. Это и был основной источник денег при покупке моего второго компьютера. Моих карманных денег на него не хватило бы. Еще немного я занял у папы.

Шел 1986 или 1987 год. Мне было лет шестнадцать-семнадцать. С баскетболом было покончено. Я потратил кучу времени, исследуя рынок и выбирая, какой компьютер купить. PC тогда особого интереса не представляли, поэтому когда я мечтал о новой машине, я знал только, что это будет не PC.

В итоге я выбрал Sinclair QL, о котором многие из вас по молодости лет, возможно, и не слышали. Поэтому я кратко напомню его историю. Sinclair был одной из первых 32-разрядных машин на рынке домашних пользователей. Сэр Клайв Синклер, основатель компании, – это своего рода британский Стив Возняк. Он выпустил компьютерные комплекты, которые в Америке продавались под названием Timex. Компания-производитель часов Timex импортировала компьютерное оборудование Sinclair и продавала его в Америке под тем же именем, что и часы. До того как Синклер стал продавать готовые компьютеры, он поставлял эти комплекты.

На Sinclair стояла операционная система Q-DOS. Тогда я ее знал как свои пять пальцев. Она была написана под этот конкретный компьютер. По тем временам у нее был довольно продвинутый Бейсик и очень неплохая графика. Больше всего мне нравилась ее многозадачность: можно было запускать одновременно несколько программ. Правда, это не распространялось на Бейсик – запустить больше одной программы на Бейсике было нельзя. Но для программ на ассемблере можно было устроить так, чтобы операционная система составляла график и разбивала время на периоды – в итоге несколько программ работали одновременно.

В этом компьютере был установлен чип 68008 с частотой 8 мегагерц – вторая и более дешевая версия чипа 68000 компании Motorola. Первое поколение чипов 68000 работало внутри с 32 разрядами, но со всем, что было вне ЦП (центрального процессора) – например, с памятью или модулями расширения, общалось через 16-битный интерфейс. Поскольку за один раз из памяти загружалось все равно только 16 бит, 16-битные операции часто оказывались быстрее 32-битных. Эта архитектура имела бешеную популярность; она и сейчас используется во множестве встроенных устройств и в автомобилях. Это другие чипы, но архитектура у них та же. Чип 68008, который стоял в моем компьютере, для общения с внешним миром (вне ЦП) использовал 8-битный, а не 16-битный интерфейс. Но обмениваясь с внешним миром восьмибитными фрагментами, внутренне он оставался 32-разрядным. Поэтому программировать его было намного приятнее.

У него было 128 килобайт (не мегабайт) памяти, что по тем временам было очень много для домашнего компьютера. У VIC-20, на смену которому он пришел, было всего три с половиной килобайта. А поскольку он был 32-разрядным, то не возникало никаких проблем с доступом к памяти, что тогда было совершенно неслыханно. Именно поэтому я и хотел купить этот компьютер. У него была интересная технология, и мне нравился ЦП.

Вначале я хотел купить его со скидкой в магазине у знакомых моего приятеля. Но тогда пришлось бы очень долго ждать его доставки, поэтому я просто двинул в «Академиска Букханделн» – самый большой книжный в Хельсинки, где был и компьютерный отдел. Там я и купил свой компьютер – получил прямо в руки.

Он стоил около двух тысяч долларов. Раньше было такое правило, что все компьютеры начального уровня стоили две тысячи. Все изменилось только за последнюю пару лет. Теперь можно купить новый ПК за 500 долларов. Это как с автомобилями. Никто не выпускает автомобили дешевле десяти тысяч долларов. Начиная с некоторой суммы, снижать цену не имеет смысла. Конечно, можно сделать машину, которая будет продаваться за семь тысяч, но автомобилестроители считают, что тот, у кого есть семь тысяч на машину, с большим удовольствием заплатит десять за более навороченную модель: с кондиционером и прочим в комплекте. Модели начального уровня в этом году стоят примерно столько же, сколько стоили пятнадцать лет назад. А если учесть инфляцию – может, чуть меньше. Зато они намного лучше.

И с компьютерами было так же. Пока их не начали покупать все подряд, существовал пороговый уровень в две тысячи. Если бы самый дешевый компьютер стоил существенно больше, то компании не удалось бы продать много экземпляров. Но, поскольку их производство обходилось довольно дорого, то и продавать их намного дешевле особого смысла не имело. Люди всегда были готовы заплатить лишние двести долларов за улучшенную модель.

За последнюю пару лет компьютерное производство намного подешевело. И даже машины начального уровня стали крутыми. Желающих заплатить лишние двести долларов за немного улучшенную версию теперь гораздо меньше. А не имея возможности привлекать покупателей дополнительными возможностями, компании вынуждены снижать цены.

Скажу честно: в 1987 году QL привлек меня, в частности, тем, что очень круто выглядел.

Угловатый, матово-черный, с черной клавиатурой. Не закругленная хорошенькая машинка, а что-то суперэкстремальное. Клавиатура была толщиной примерно в два с половиной сантиметра, потому что составляла единое целое с компьютером. Это была стандартная для домашних компьютеров конструкция. В правой части клавиатуры, где обычно бывает цифровая панель, размещались два разъема для революционной новинки – микропривода Sinclair. Это устройство – больше нигде не применявшееся – использовало замкнутую петлю из пленки. По организации и функциям оно было подобно дисководу. Поскольку там была одна длинная петля, ее можно было крутить до тех пор, пока не найдешь то, что нужно. Однако устройство себя не оправдало, потому что сильно уступало флоппи-дисководам в надежности.

Итак, я потратил на Sinclair QL почти две тысячи долларов. И писал для него одну программу за другой. Я все время искал всякие интересные задачи. У меня был компилятор и интерпретатор языка Форт, с которыми я и возился. Форт – это очень странный язык; сейчас им уже никто не пользуется. Эта игрушка, рассчитанная на определенную рыночную нишу, в 80-е годы довольно широко использовалась для разных целей, но по-настоящему популярной так и не стала, потому что оказалась слишком сложной для непрофессионалов. Особой пользы от Форта не было.

Программный инструментарий я писал себе сам. Одной из моих первых покупок для Sinclair был модуль расширения с картой EEPROM (электрически стираемым программируемым постоянным запоминающим устройством). Туда можно было записывать информацию самостоятельно, пользуясь специальными модулями, и эта информация сохранялась при выключенном питании. Так я мог держать свои инструменты всегда под рукой, не тратя на их хранение драгоценное ОЗУ (оперативное запоминающее устройство), а ОЗУ целиком использовать под программы.

Операционками я заинтересовался так: купил флоппи-контроллер, чтобы не пользоваться микроприводами, но к нему прилагался такой поганый драйвер, что пришлось написать новый. Пока писал – обнаружил проколы в самой операционной системе или по крайней мере несоответствие между тем, что обещала документация, и тем, что реально происходило. Я с этим столкнулся, когда моя программа отказалась работать.

Поскольку мои-то программы – ясное дело – всегда идеальны, я понял, что тут дело в другом. Пришлось пойти дальше и дизассемблировать операционную систему.

Можно накупить книг с частичными листингами операционной системы. Большое подспорье. Еще нужен дизассемблер – программа перевода машинного кода на язык ассемблера. Это важно, потому что по машинному коду очень трудно отслеживать работу алгоритма. Вдруг натыкаешься на переход к числовому адресу – читать невозможно. Хороший дизассемблер заменяет номера именами и при этом позволяет выбирать эти имена. А еще он помогает найти определенную цепочку команд. У меня был собственный дизассемблер, который давал довольно симпатичные листинги. Когда что-то не работало, я мог потребовать листинг, начиная с определенного места, и увидеть все, что собиралась делать операционная система. Иногда я использовал дизассемблер не потому, что что-то сбоило, а просто чтобы узнать, как оно должно работать.

Меня бесило, что операционная система QL предназначалась только для чтения. Там ничего нельзя было изменить. Нет, там были выходы, где можно было передать управление какими-то функциями собственным программам, но только в определенных местах. Гораздо лучше, если в операционной системе можно заменять все. Дурацкая идея – записывать операционку в ПЗУ (постоянное запоминающее устройство).

Хоть я и сказал, что в Финляндии полно фанатов новых технологий, Sinclair QL не завоевал в этой седьмой по размерам стране Европы сколько-нибудь значительных позиций. И поскольку рынок был так мал, всякую обновку для этой революционной суперсовременной машины приходилось заказывать в Англии и получать по почте. Для этого надо было сначала прочесать каталоги в поисках продавца нужной штуки. Потом – добыть удостоверенный чек и неделями ждать доставки (это было до эры Amazon.com и кредитных карточек). Через все это мне пришлось пройти, когда я надумал увеличить ОЗУ со 128 до 640 килобайт. И мытарства повторились снова, когда я покупал новый ассемблер для перевода ассемблерных программ в машинный код (нули и единицы) и редактор связей, который по существу является текстовым процессором для программирования.

Новый ассемблер и редактор работали прекрасно, но они были на микроприводах и их нельзя было перенести на EEPROM. Поэтому я написал собственный редактор и ассемблер и дальше использовал только их. Обе программы были написаны на ассемблере, что кажется невероятно глупо по нынешним меркам. Это очень сложный и нудный процесс: решение задачи на ассемблере занимает раз в сто больше времени, чем, например, на Си (который тогда уже был).

Я добавил несколько команд к интерпретатору, который прилагался к машине. В результате, если я хотел что-то отредактировать, я автоматически запускал свой редактор – он всегда был под рукой. Мой редактор был быстрее входившего в комплект машины. Особенно я гордился скоростью вывода символов на экран. Обычно для машин такого класса экран заполняется символами так медленно, что видно, как прокручивается текст. А мой редактор выстреливал текст с такой скоростью, что при быстрой прокрутке экрана все сливалось. Для меня это было важно. Машина стала гораздо проворнее, и я знал, что вложил в это много труда.

В то время мало кто из моих знакомых так же увлекался компьютерами, как я. В школе был компьютерный клуб, но я там редко бывал. Туда ходили желающие познакомиться с компьютерами. Во всей моей гимназии было человек 250, не больше, и вряд ли кто-нибудь еще пользовался компьютером с десяти лет.

Мне очень нравилось программировать игры для Sinclair QL. Я переписывал для него свои любимые игры с VIC-20, иногда что-то добавляя. Но они редко становились лучше: машина была круче, идея же игры оставалась неизменной.

А вот свою, пожалуй, самую любимую игру – «Астероиды» – я так и не смог как следует скопировать. А все потому, что в то время во всех аркадных играх вроде «Астероидов» использовалась настоящая векторная графика. При этом вместо отдельных точек – пикселов – в основу графики клали принцип кинескопа, когда позади него помещают пушку, стреляющую электронами, которые отклоняются магнитами. При этом разрешение графики значительно повышается, но повторить ее очень трудно. Запрограммировать игру можно, но если делать это на компьютере, у которого нет специальных графических возможностей, то смотрится она убого.

Помню, как я программировал «Пакмана» на ассемблере. Прежде всего пришлось вспомнить, как именно выглядят персонажи. Потом постараться нарисовать их в цвете на листке с сеткой 16 на 16. Если есть талант художника, то может выйти неплохо. Но у такого маляра, как я, получились лишь жалкие карикатуры на персонажей «Пакмана».

Так что мой клон был не фонтан. Но я им все равно гордился. Играть в него было можно, и я послал клон в один из журналов, печатавших компьютерные программы. Я уже продал некоторые свои программы другим журналам и думал, что и эта пойдет.

Но ошибся.

Прежде всего программа была написана на ассемблере. А это значит, что, если при набивке напечатанного в журнале текста сделать хоть малюсенькую ошибку, она не заработает.

Писал я и собственные игры. Но тут нужен особый склад ума. Для игр настолько важна производительность, что приходится залезать очень глубоко в аппаратное нутро компьютера. Это я мог, но мозги у меня не игрового плана. Сама по себе большая скорость или крутая графика еще не делают игру классной. Тут важнее всего какая-то зацепка – то, что заставляет в нее играть. Это как с кино. Спецэффекты – это вещь, но нужен еще и сюжет. А у моих игр сюжет всегда хромал. В игре важно развитие событий, идея. Часто развитие заключается в простом ускорении действия. Как, например, в «Пакмане». Иногда сменяется лабиринт или чудовища начинают все искуснее тебя ловить.

При программировании «Пакмана» меня увлекла такая задача: как сделать, чтобы картинка не мерцала. В старых компьютерных играх это был типичный дефект, потому что без специального оборудования персонажи непременно мерцают. Для того чтобы переместить героя, нужно убрать его старое изображение и нарисовать новое. При плохой синхронизации момент, когда изображения нет, становится заметен и картинка мигает. От этого можно избавляться разными путями. Например, вначале нарисовать нового персонажа, а потом убрать старого. Тут нужна осторожность: важно не стереть ту часть старой картинки, которая перекрывается новой. При этом вместо неприятного мерцания иногда возникает эффект тени персонажа на экране. Это гораздо лучше для восприятия: вместо мерцания появляется легкая размытость, которая создает иллюзию движения. Однако такое решение требует множества ресурсов, и пишутся такие программы медленно.

Не случайно в играх всегда используются новейшие технологии и именно игры обычно привлекают начинающих программистов. Одна из причин в том, что среди самых головастых программистов немало пятнадцатилетних подростков, одиноко сражающихся с чудовищами. (Так я думал шестнадцать лет назад и по-прежнему подозреваю, что это так.) Но есть и другая причина: игры тянут за собой аппаратную часть.

У нынешних компьютеров скорости для всего хватает. Единственное, что напрягает оборудование до предела – это игры в реальном времени, например, популярные сегодня трехмерные приключения. По существу только в играх явно видно, когда что-то не происходит в реальном времени. При работе с текстом секунда там, секунда здесь – особого значения не имеют. Но в игре заметна даже задержка на одну десятую секунды. Раньше игры были довольно примитивными. Сегодня же само программирование составляет лишь незначительную часть игры. Есть музыка, есть сюжет. Если провести аналогию с кино, то программист сродни оператору.

На Sinclair QL я работал три года. За это время я кончил гимназию, поступил в Университет Хельсинки, прошел армию. Это был прекрасный компьютер, но наши пути начали расходиться. Примерно в последний год я начал замечать его ограниченность. Процессор 68008 был неплох, но я прочел о процессорах следующего поколения – 68020 – и узнал о таких достоинствах, как управление памятью и страничная подкачка. Новые компьютеры могли делать очень важные для программирования на низком уровне вещи.

В Sinclair QL меня особенно бесило, что, хотя операционная система поддерживала мультизадачность, все могло в любой момент рухнуть, потому что не было защиты памяти. Если какая-то задача замышляла недоброе, она могла угробить все сразу.

После выпуска Sinclair QL Клайв Синклер перестал заниматься разработкой и изготовлением компьютеров. Одна из причин: модель не имела коммерческого успеха. Это было интересное технологическое решение, но у компании возникли производственные проблемы, сбои в обеспечении качества, появились неизбежные нелестные отзывы в прессе. А кроме того, росла конкуренция на рынке.

В конце 80-х уже начало складываться представление, что со временем компьютер будет у каждого, хотя бы для работы с текстовым процессором. Причем на первый план стали выходить PC. Да, выпускавшиеся IBM компьютеры стали наводнять прилавки и приносить пользу, даже несмотря на свое техническое несовершенство. В конце концов эти вездесущие бежевые создания несли на себе печать качества IBM, а это многое значило. И еще один плюс: периферийные устройства были стандартными и продавались повсюду.

Я читал обо всех этих новых ЦП, которые могли делать то, что мне нужно. Становилось ясно, что казавшийся интересным 68020 – это путь в никуда. Я мог бы купить для QL новый процессор. Но в те времена это означало коренную переделку машины. Да и операционка не ведала об управлении памятью, так что пришлось бы писать собственную версию. Поэтому вопрос стоял так: это был бы большой шаг вперед, но новый компьютер стоит дорого.

А покупка дополнений к моему компьютеру доставляла все больше головной боли. Нельзя было просто взять каталог для Sinclair QL, поднять трубку и заказать модуль памяти. Вся эта возня с получением посылки из Англии пахла нафталином. (Отсутствие готового ПО меня не волновало – его я и сам мог написать.)

Однако не было бы счастья, да несчастье помогло. Когда я задумал избавиться от машины, то решил продать периферию: дополнительное ОЗУ и настоящий жесткий диск, который купил, потому что не мог больше ни секунды терпеть микропривод. Но за этим оборудованием не охотились толпы жаждущих, поэтому пришлось дать объявление в компьютерный журнал, ждать и молиться. Вот так я и познакомился с моим другом Йоуко Виерумаки. Похоже, он был единственным в Финляндии владельцем Sinclair QL, кроме меня. Он откликнулся на мое объявление, приехал из Лахти на поезде и купил часть периферии. А потом научил меня играть в снукер.

 

II

На первом году моей учебы в университете Sinclair QL стоял у меня на столе возле окна (мы жили тогда на первом этаже, на Петерсгатан), но программированием я особо не занимался. Отчасти потому, что был полностью поглощен учебой. А еще я просто не смог найти задачу, которую можно было бы делать на компьютере. Когда нет интересной задачи, и желание программировать пропадает. Всегда нужен какой-то стимул.

Казалось, пришла пора пойти в армию (раз от этого все равно не уйти): мне – девятнадцать, недостатки компьютера раздражают, да и стоящих идей нет. Я сел на поезд и отправился в Лапландию.

Как я уже говорил, я совершенно не представлял себе, какие требования – в частности, к физической подготовке – предъявляет армия. Поэтому после одиннадцати месяцев физических упражнений с оружием я почувствовал себя в полном праве провести остаток жизни в блаженном бездействии. Я готов выполнять только два упражнения: нажимать на клавиши и обхватывать стакан пльзенского. (И на самом деле я не занимался спортом почти десять лет после демобилизации, пока Дэвид не вынудил меня поплясать на доске в убийственных волнах залива Хаф-Мун. Я тогда чуть не утонул, и ноги потом неделю болели.)

Служба в армии кончилась седьмого мая 1990 года. При том что (Туве подтвердит!) я никак не могу запомнить дату нашей свадьбы, день демобилизации я запомнил на всю жизнь.

Первым делом я решил завести кота.

У моего друга как раз за несколько недель до этого окотилась кошка, и я купил у него последнего оставшегося котенка – прекрасного белоснежного котика. Поскольку первые недели своей жизни он провел на воле, то был готов к жизни как внутри, так и вне квартиры моей матери. Я назвал его Ранди, сокращенно от Митрандир (белый маг из «Властелина колец»). Сейчас ему одиннадцать лет, и он вместе со своим владельцем совершенно освоился с жизнью в Калифорнии.

Не думаю, чтоб в то лето я делал что-то толковое. Занятий в университете не было до осени. Мой компьютер себя исчерпал. Поэтому я просто слонялся по дому в замызганном халате, возился с Ранди, а иногда встречался с друзьями, чтобы повеселить их своими попытками играть в кегли или в снукер. Ну и мечтал о будущем компьютере, конечно.

Передо мной стояла типичная для хакера проблема. Как всякий правоверный компьютерщик, взращенный на чипе 68008, я презирал PC. Но когда в 1986 году выпустили 386-й процессор, PC начали казаться привлекательными. Они могли делать все, что мог 68020, а к 1990 году массовое производство и появление недорогих клонов значительно снизило их цену. О стоимости я очень даже беспокоился, потому что денег у меня вообще не было. Поэтому, похоже, нужно было покупать именно PC. Поскольку PC процветали, их было несложно обновлять и дополнять: в продаже было все, что угодно, уж оборудование-то я всегда хотел иметь стандартное.

В итоге я решился на переход в другой лагерь. К тому же мне было интересно сменить ЦП. Тогда я и начал продавать части своего Sinclair QL.

У каждого есть книга, которая перевернула его жизнь. Священная Библия. «Капитал». «Вторники с Мори». «Все, что мне нужно, я узнал в детском саду». У каждого своя. (Искренне надеюсь, что – благодаря моей теории о смысле жизни – вашу жизнь перевернет эта книга.) Меня лично вдохновила на подвиги «Проектирование и реализация операционных систем» Эндрю С. Таненбаума.

Я уже выбрал себе курсы на осень и с нетерпением ждал лекций по языку Си и системе Unix. В предвкушении этих лекций я летом купил вышеупомянутый учебник, чтобы начать готовиться заранее. В этой книге Эндрю Таненбаум, университетский профессор из Амстердама, описывает Minix – учебную программу, которую он написал для обучения Unix. Minix представляет из себя миниатюрную Unix-систему. Как только я прочел предисловие, познакомился с концепцией Unix и узнал, на что способна эта мощная, строгая и красивая операционная система, я захотел купить такой компьютер, на котором сможет работать Unix. Я решил, что поставлю себе Minix – единственную по-настоящему полезную из известных мне версий.

Когда я начал понимать Unix, я страшно загорелся. Честно говоря – горю до сих пор (Надеюсь, что и вы испытываете то же самое по отношению к чему-нибудь).

 

III

Осенью 1990 года начался первый учебный год, когда в Университете Хельсинки заработала Unix. Эта мощная операционная система родилась в исследовательском центре Bell Labs компании AT&T в конце 60-х годов, но выросла в других местах. Когда я был на первом курсе, у нас стоял VAX с операционной системой VMS. Она была ужасна, про нее никто не сказал бы: «Вот бы и мне домой такую». Она вызывала иную реакцию: «Как вы умудрились сделать такое!» Ею было трудно пользоваться. В ней было мало инструментария. С ее помощью было сложно выходить в Интернет, который работал под Unix. Даже узнать, насколько велик файл, – и то было непросто. Надо признать, что для некоторых приложений – например, для баз данных – VMS была очень хорошо приспособлена. Но она была не из тех операционок, которые вызывают восторг.

В университете наконец поняли, что с ней пора кончать. В научном мире многие тогда увлеклись Unix, поэтому университет приобрел MicroVAX, на котором работала Ultrix – вариант Unix, созданный корпорацией Digital Equipment. Они захотели примериться к Unix.

Мне не терпелось поработать с Unix, чтобы поэкспериментировать с тем, что я узнал из книги Таненбаума. Сколько всего я мог бы сделать, если бы у меня была 386-я машина! Однако взять 18 тысяч финских марок на ее покупку мне было негде. Я знал, что с началом учебного семестра я смогу использовать свой Sinclair QL для выхода на новый университетский Unix-компьютер до тех пор, пока не куплю себе PC – машину, на которой можно будет установить Unix.

Поэтому тем летом я делал две вещи: бездельничал и читал «Проектирование и реализацию операционных систем». Эти 719 страниц в мягком красном переплете, можно сказать, поселились у меня в постели.

Университет Хельсинки размахнулся на 16-пользовательскую лицензию для MicroVAX. Это значило, что прием на курс «Си и Unix» ограничивался 32 студентами – видимо, предполагалось, что 16 человек будут использовать ее днем и 16 – вечером. Преподавателю, как и всем нам, Unix была в новинку. Он сразу же об этом сказал, так что проблем не было. Но он обычно знал материал своего курса на одну главу вперед, а студенты иногда уходили вперед главы на три. Это стало своего рода игрой: студенты пытались подловить преподавателя, задавая ему вопросы по будущему материалу, чтобы выяснить, читал он его или нет.

Все мы были младенцами в дебрях Unix; курс создавался по ходу нашего обучения. Однако из него было ясно, что за Unix стоит своя особая философия. Это становилось понятно после первого же часа занятий. В остальное время объяснялись подробности.

Unix характерна тем, что она утверждает некоторые базовые ценности. Это цельная и красивая операционная система. Она избегает особых случаев. В Unix есть понятие процесса: процесс – это все, что что-нибудь делает. Простой пример. В Unix команда оболочки, которую вводят, чтобы войти в систему, не встроена в операционку, как в DOS. Это просто задание. Ничем не отличающееся от остальных. Просто это задание читает с клавиатуры и пишет на монитор. В Unix все, что что-то делает, – процесс. А еще там есть файлы.

Простота структуры Unix всегда поражала меня, как и большинство людей (ну по крайней мере – нас, хакеров). Почти все, что делается в Unix, выполняется с помощью шести базовых операций (называемых «системными вызовами», потому что они представляют из себя вызовы системы для выполнения тех или иных действий), А уж из этих шести базовых вызовов можно построить почти все на свете.

Одной из фундаментальных операций Unix является «операция порождения (fork)». Выполняя «fork», процесс создает свою точную копию. Таким образом вы получаете две идентичные копии. Порожденная копия чаще всего выполняет другой процесс – заменяет себя новой программой. Это вторая базовая операция. Оставшиеся четыре вызова – open (открыть), close (закрыть), read (читать) и write (писать) – предназначены для доступа к файлам. Эти шесть системных вызовов представляют собой простые операции, из которых и состоит Unix.

Конечно, есть еще куча других системных вызовов, которые осуществляют детализацию. Но если вы поняли шесть базовых – вы поняли Unix. Потому что одна из прелестей Unix в том, что для создания сложных вещей не нужны сложные интерфейсы. Любого уровня сложности можно достичь за счет сочетания простых вещей. Для решения сложной проблемы нужно лишь создать связи («каналы» в терминологии Unix) между простыми процессами.

Уродство, когда для любого действия у системы есть специальный интерфейс. В Unix – все наоборот. Она предоставляет строительные блоки, из которых можно создать что угодно. Вот что такое стройная архитектура.

То же самое с языками. В английском 26 букв, и с их помощью можно написать все. А в китайском для каждой мыслимой вещи – своя буква. В китайском вы сразу же получаете в свое распоряжение сложные вещи, которые можно комбинировать ограниченным образом. Это больше напоминает подход VMS: есть множество сложных вещей с интересным смыслом, которые можно использовать только одним способом. И в Windows то же самое.

В Unix, напротив, основная идея: «Чем меньше, тем красивее». Здесь есть небольшой набор простых базовых строительных блоков, из которых можно строить бесконечно сложные конструкции.

Именно так, кстати, обстоит дело и в физике. Эксперименты позволяют открыть фундаментальные законы, которые, как предполагается, крайне просты. Сложность мира возникает за счет множества удивительных взаимосвязей, которые можно вывести из этих простых законов, а не из внутренней сложности самих законов.

Простота Unix не возникла сама по себе. Unix со своей концепцией простых строительных блоков была кропотливо разработана Деннисом Ричи и Кеном Томпсоном в Bell Labs компании AT&T. Простоту вовсе не следует отождествлять с легкостью. Простота требует проектирования и хорошего вкуса.

Если вернуться к примеру с языками, то пиктографическое письмо – например, египетские или китайские иероглифы – обычно древнее и кажется «примитивнее», а подход, использующий строительные блоки, требует гораздо более абстрактного мышления. Точно так же и простоту Unix не следует путать с отсутствием изощренности – совсем наоборот.

Из этого вовсе не следует, что создание Unix было вызвано какими-то сложными причинами. Как часто бывает в компьютерной области, все началось с игр. Нужно было, чтобы кто-то захотел играть в компьютерные игры на PDP-11. Именно из этого выросла Unix – из персонального проекта Денниса и Кена, пожелавших играть в «Звездные войны». А поскольку этот проект никто не воспринимал всерьез, AT&T не занималась коммерческим применением Unix. AT&T была регулируемой монополией и все равно не могла, например, продавать компьютеры. Поэтому создатели Unix стали бесплатно предоставлять ее вместе с лицензиями на исходные тексты всем желающим, в особенности университетам. Они относились к этому просто.

В результате Unix получила широкое распространение в университетских кругах. К моменту произошедшего в 1984 году разделения, когда AT&T получила наконец право заняться компьютерным бизнесом, университетские специалисты (в частности, сотрудники Калифорнийского университета в Беркли) уже в течение нескольких лет работали над усовершенствованием Unix под руководством таких корифеев, как Билл Джой и Маршал Кирк Маккусик. При этом многие не утруждались документированием своей деятельности.

Однако к началу 90-х Unix стала операционной системой номер один для всех суперкомпьютеров и серверов. Бизнес приобрел огромные масштабы. При этом, к несчастью, существовало великое множество конкурирующих версий этой системы. В основе одних лежала базовая разработка AT&T (так называемые варианты «System V»), которая была относительно контролируемой. Другие создавались на основе кода BSD (Berkeley Software Distribution), созданного в Калифорнийском университете в Беркли. А некоторые представляли из себя смесь обеих систем.

Одна из разработок на базе BSD заслуживает особого упоминания. Это проект 386BSD, выполненный Биллом Джолицем на основе кода BSD и распространявшийся через Интернет. Позднее он разделился и породил бесплатные BSD-версии: NetBSD, FreeBSD и OpenBSD. Он вызывал большой интерес в Unix-сообществе.

Поэтому AT&T внезапно спохватилась и подала в суд на Калифорнийский университет в Беркли. Исходный код принадлежал AT&T, но в дальнейшем большая часть работы была выполнена в Беркли. Руководители Калифорнийского университета утверждали, что университет имел право распространять или продавать за символическую плату свою версию Unix. Они продемонстрировали, что сотрудники университета проделали очень большую работу и фактически переписали все, что было предоставлено корпорацией AT&T. Судебный процесс закончился соглашением после того, как корпорация Novell купила Unix у AT&T. В основном из системы должны были быть исключены части, выпущенные AT&T.

Вся эта юридическая возня пошла на пользу новому отпрыску Unix, дав ему время возмужать и распространиться по миру. По существу она позволила Linux завоевать рынок. Но я забегаю вперед.

Раз уж я все равно отклонился, то хочу кое-что объяснить.

У Unix сложилась репутация магнита, притягивающего сдвинутых маргиналов компьютерного мира. Оспаривать эту репутацию не имеет смысла. Она справедлива.

Честно говоря, вокруг Unix действительно собралось много чокнутых. Я не имею в виду тех, кто рассылает угрожающие письма. Или тех, кто травит соседских собак. Просто люди с очень альтернативным образом жизни.

Вспомните: ведь Unix зародилась в конце 60-х – начале 70-х, когда я спал в бельевой корзинке в квартире бабушки с дедушкой. Ее создавали технари из поколения «дети – цветы». Идея свободы Unix в большей степени связана с духом той эпохи, чем с самой операционной системой. Это было время безудержного идеализма. Революция. Свобода от власти. Свободная любовь (с этим я пролетел – да и что бы я с ней делал?). И относительная открытость Unix, пусть и объяснявшаяся отсутствием на тот момент коммерческих интересов, привлекала к системе людей такого типа.

Впервые я столкнулся с этой стороной Unix году в 1991-м, когда Ларс Вирцениус затащил меня на собрание в Техническом университете Хельсинки (который, как всем известно, расположен не в самом Хельсинки, а по другую сторону границы – в Эспоо. Они просто хотят ассоциироваться со знаменитым Хельсинки, хотя бы только по названию). Выступал Ричард Столман.

Ричард Столман – это бог свободного ПО. Он начал работать над альтернативой Unix в 1984 году, назвав ее системой GNU. GNU – это аббревиатура для «GNU is Not Unix», один из многих рекурсивных акронимов, в которых одна из букв обозначает сам акроним – типичная компьютерная шуточка, недоступная посторонним. С нами – хакерами – не соскучишься.

Еще важнее, что РМС (как он сам себя называет) написал Манифест свободного программного обеспечения и лицензию на бесплатное распространение ПО – Универсальную общественную лицензию (GPL). По существу именно он ввел понятие намеренного бесплатного распространения исходников в противовес их случайному распространению, которое первоначально имело место при разработке Unix.

Честно говоря, я не вникал во все эти социально-политические вопросы, которые были – и есть – так милы сердцу РМС. Я даже не очень-то знал о созданном им Фонде свободного ПО и его целях. Раз я почти ничего не помню из его выступления в 1991 году, похоже, оно не повлияло на мою жизнь. Я интересовался программированием, а не политикой – политики мне и дома хватало. Но Ларс был идеологом, а я потащился за ним.

Ричард был первым в моей жизни классическим длинноволосым бородатым хакером. У нас в Хельсинки таких мало.

Может, я и не проникся полностью, но что-то из его речи, видимо, запало мне в душу. В конце концов, я ведь использовал GPL для Linux. Ну вот – я снова забегаю вперед.

 

IV

2 января 1991 года. В этот день магазины впервые открылись после Рождества и моего двадцать первого дня рождения – двух главных дней моего финансового года.

Получив свои рождественские и «деньрожденные» деньги, я принял грандиозное экономическое решение купить компьютер за 18 тысяч марок, что составляло примерно три с половиной тысячи долларов. Такой суммы у меня и в помине не было, поэтому я хотел купить компьютер в кредит, заплатив исходно треть стоимости. Реально компьютер стоил 15 тысяч марок. Остальное набегало за три года в качестве процентов на кредит.

Я пришел в один из маленьких компьютерных магазинчиков семейного типа – папин-мамин, хотя в моем случае он был просто папин. Производитель меня особо не волновал, поэтому я выбрал безымянный серый блок. Мне показали прайс-лист и список типа «шведского стола»: какие имеются ЦП, жесткие диски, память. Мне нужна была мощность. Я хотел 4 мегабайта ОЗУ вместо двух и 33 мегагерца. Конечно, я мог бы обойтись 16, но нет, мне был нужен самый крутой вариант.

Ты говорил, что тебе нужно, и они все это собирали. Звучит дико в эру Интернета и курьерской доставки. Мне сказали прийти за ним через три дня, но эти три дня тянулись, как целая неделя. 5 января я попросил папу помочь привезти мою покупку домой.

У компьютера не было не только имени, но и каких-либо примечательных черт. Простой серый системный блок. Этот компьютер я выбрал не за внешний вид. Это была тоскливая на вид машина с четырнадцатидюймовым экраном, самая дешевая крутая модель, которую я смог найти. Говоря «крутая», я имею в виду, что такой мощный компьютер мало у кого был. Не то чтобы это была чисто функциональная страхолюдина, типа микроавтобуса «Вольво». Но суть в том, что мне нужна была надежная машина и чтобы дополнения к ней – которые мне неизбежно понадобятся – было легко купить.

На компьютере была установлена урезанная версия DOS. Я же хотел работать с Minix, разновидностью Unix, поэтому я сделал заказ и ждал почти месяц, пока моя покупка доберется до Финляндии. Учебник по Minix продавался в книжном магазине, но поскольку на саму операционку спрос был маленький, то ее надо было заказывать через тот же книжный. Она стоила 169 долларов, плюс налоги, плюс затраты на конвертацию, плюс всякое-разное. В то время я считал это грабежом. Честно говоря, и сейчас так считаю. Месяц ожидания прошел для меня, как шесть лет. Я мучился еще больше, чем когда месяцами копил деньги на компьютер.

Дело было в самый разгар зимы. Выбираясь из своей берлоги во внешний мир, я каждый раз рисковал, что меня столкнет в снег какая-нибудь старушка, которой бы лучше сидеть дома и варить щи или смотреть по телику хоккей и вязать, а не слоняться по Маннерхейминти. Весь тот месяц я играл в «Принца Персии» на новом компьютере. Или читал книжки, чтобы понять, как он работает.

Наконец, в пятницу днем Minix прибыла, и в тот же вечер я ее установил. Для этого пришлось вставить в компьютер поочередно шестнадцать дискет. Все выходные ушли на освоение новой системы. Я разобрался в ее достоинствах и – что важнее – в недостатках. Их я старался компенсировать, перенося домой те программы, к которым привык в университете. Примерно за месяц я обжился полностью.

Эндрю Таненбаум – тот амстердамский профессор, который написал Minix, – хотел, чтобы система оставалась учебным инструментом. Поэтому она была намеренно изуродована. Существовали заплатки – то есть усовершенствования к Minix, в том числе знаменитая заплатка австралийского хакера Брюса Эванса (это был царь и бог Minix 386). С его заплаткой Minix на 386-м становилась намного лучше. Я начал читать телеконференцию по Minix в онлайне еще до покупки нового компьютера, поэтому с самого начала знал, что хочу установить именно усовершенствованную версию Эванса. Но из-за лицензионных ограничений пришлось сначала купить исходную версию Minix, а потом изрядно повозиться, приделывая заплатки Эванса. Это было целое дело.

У меня возникло множество претензий к Minix. Хуже всего была эмуляция терминала, очень важная для меня программа, потому что именно ее я использовал для подключения к университетскому компьютеру. Я зависел от этой эмуляции каждый раз, когда связывался с университетским компьютером, чтобы поработать с мощной Unix-системой или просто выйти в онлайн.

Пришлось писать собственную программу эмуляции. Я решил не подстраивать ее под Minix, а опираться прямо на аппаратный уровень. Разработка программы позволяла, кроме всего прочего, детально изучить работу 386-го. Как я уже сказал, в Хельсинки стояла зима. У меня был крутой компьютер. Важнее всего было разобраться, что эта машина может, и использовать эти возможности в свое удовольствие.

Поскольку я программировал на голом железе, мне пришлось начать с BIOS – самой первой программы из ПЗУ, с которой начинается загрузка. BIOS начинает считывать информацию либо с дискеты, либо с жесткого диска. Я поместил свою программу на дискету. BIOS считывает первый сектор дискеты и начинает его выполнять. Я впервые работал с PC, и мне надо было разобраться, как все это делается. Все происходит в так называемом «реальном режиме». Но для того чтобы воспользоваться всеми возможностями ЦП и его 32-разрядностью, нужно было войти в «защищенный режим». А для этого нужно задать кучу разных параметров.

Поэтому для построения программы эмуляции терминала таким путем нужно было знать, как работает ЦП. Отчасти именно поэтому я писал на ассемблере – хотел разобраться в ЦП. Еще нужно было знать, как писать на экран, как читать с клавиатуры, как читать с модема и писать на него. (Надеюсь, я еще не распугал тех своих читателей-неспециалистов, которые мужественно отказались перескочить на страницу 142.)

Я хотел иметь два независимых процесса. Один должен был читать информацию с модема и выдавать ее на экран. А другой – читать с клавиатуры и отправлять модему. Для этого я хотел использовать два двусторонних канала. Это называется переключением задач, и аппаратная часть 386-го его поддерживает. Я был в восторге от своего плана.

Моя первая тестовая программа использовала один процесс для выдачи на экран буквы A, а другой – для выдачи буквы B. (Звучит тоскливо – я знаю.) Я запрограммировал это так, чтобы каждую секунду писалось несколько букв. С помощью прерывания по таймеру я сделал так, что сначала экран заполнялся AAAAAAA. Потом неожиданно буквы сменялись на BBBBBBBBB. С практической точки зрения это было абсолютно бессмысленно, но зато становилось очевидно, что переключение работает. На это у меня ушел почти месяц, потому что во всем приходилось разбираться с нуля.

В конце концов я научился переключать процессы (AAAAAAAA и BBBBBBB) так, чтобы один читал с модема и писал на экран, а другой – читал с клавиатуры и писал на модем. У меня появилась собственная программа эмуляции терминала.

Когда я хотел почитать новости, я вставлял дискету и перезагружал машину, чтобы с помощью своей программы прочесть новости с университетского компьютера. Если же я хотел внести усовершенствования в пакет эмуляции терминала, я загружал Minix и использовал ее для программирования.

Я был очень горд.

Моя сестра Сара была в курсе моих достижений. Я позвал ее, и она секунд пять посмотрела на мои AAAAAA и BBBBBB, потом сказала: «Хорошо», и ушла, оставшись совершенно равнодушной. Я понял, что это не впечатляет. Никому не объяснишь, что под внешней незатейливостью могут скрываться сложные глубинные процессы. Примерно так же глупо, как демонстрировать кусок дороги, который только что покрыл гудроном. Кажется, я похвастался своими успехами еще только одному человеку – Ларсу. Это был второй шведскоговорящий студент, который специализировался по компьютерным наукам и поступил в один год со мной.

Мне не было дела, стоит на дворе март или апрель, тает снег на Петерсгатан или нет. Большую часть времени я сидел в халате, лихорадочно приникнув к своему новому страховидному компьютеру в комнате с плотными черными шторами на окне, отгороженный от солнечного света и вообще от внешнего мира. Я с трудом наскребал деньги на ежемесячные платежи за свой ПК, которые были рассчитаны на три года. Я еще не знал, что платить мне осталось всего год. А через год я уже буду автором Linux, которую увидят не только Сара и Ларс, а куча разных людей. И Петер Энвин, с которым мы теперь вместе работаем в Transmeta, объявит в Интернете подписку для оплаты моего компьютера.

Все знали, что на Linux я ничего не зарабатываю. Все просто сказали: «А давайте скинемся Линусу на компьютер».

Это было классно.

У меня совершенно не было денег. Мне всегда казалось очень важным не требовать и не просить денег, но когда мне их просто дали… ну слов нет.

Вот так начиналась Linux. С превращения тестовой программы в пакет эмуляции терминала.

* * *

Журнал «Red Herring» посылает меня в Финляндию, чтобы я написал об Оулу, новом центре высоких технологий, где, несмотря на отпугивающее местоположение (несколько часов езды от Полярного круга), разместилась 141 начинающая компания. Прекрасная возможность встретиться в Хельсинки с родителями Линуса и сестрой Сарой.

Его отец Нильс (которого все зовут Пике) встречает меня в холле гостиницы «Сокос Ваакуна», напротив вокзала. Он подтянут, носит очки с толстыми стеклами и ленинскую бородку. Недавно у него закончился четырехлетний контракт с финской телерадиовещательной корпорацией, по которому он работал в Москве, и теперь он пишет книгу о России и размышляет, стоит ли принять приглашение на работу в Вашингтоне, который кажется ему неинтересным местом. За несколько месяцев до этого он получил престижную государственную премию в области журналистики, и эта награда, по словам его бывшей жены Анны, «значительно смягчила его».

Ранним вечером он везет меня на своем «Вольво-У40» на экскурсию по заснеженным «линусовским» местам, показывая внушительное здание начальной школы, где учились и отец, и сын, проезжая мимо квартиры бабушки с дедушкой, где Линус провел первые три месяца своей жизни, и мимо дома с видом на парк, где семья жила следующие семь лет. Один год из этих семи – Линусу тогда было пять – Нике провел в Москве: учился коммунизму. Потом он показывает мне бледно-желтое здание, где расположена квартира, в которую Линус с сестрой переехали после развода родителей – на первом этаже там теперь видеомагазин для взрослых вместо магазина электроники, который был во времена детства Линуса. И наконец, мы проезжаем мимо самого внушительного из зданий – пятиэтажного дома, в котором жили бабушка с дедушкой Линуса по материнской линии и где родилась Linux. Мать Линуса Анна по-прежнему живет там. Район напоминает верхнюю часть манхэттенского Ист-Сайда в декабре.

Нике весел, умен и полон самоиронии. У него много общих жестов с сыном – например, они одинаково обхватывают подбородок ладонью во время разговора. И улыбки у них похожие. В отличие от сына, он всю жизнь занимается спортом – социалистическая закалка. Он играет в баскетбол, бегает по восемь километров в день и полюбил по утрам плавать в ледяной озерной воде. В пятьдесят пять у него спортивная походка тридцатипятилетнего. Еще одно отличие от Линуса: у Нике, похоже, бурная личная жизнь.

Мы ужинаем в шумном ресторане в центре Хельсинки, и Нике рассказывает о трудностях, которые Линусу пришлось пережить как сыну суперактивного коммуниста, постоянно выступавшего с речами, а одно время даже занимавшего небольшой общественный пост. Он объясняет, что Линуса часто дразнили из-за радикализма его отца, а некоторым детям даже запрещали с ним играть. Поэтому, говорит Нике, его сын всегда стремился держаться подальше от левого движения, которое было фоном его детства. «Он не давал мне говорить на эти темы. Он выходил из комнаты, – рассказывает Нике. – Или же старался подчеркнуть, что придерживается противоположного мнения. Я знаю, Линуса дразнили в школе из-за меня. Он старался дать мне понять, что я не должен ставить его в такое сложное положение».

Нике привозит меня к себе домой, чтобы угостить пивом. Он живет к северу от делового центра в одном из домов, построенных в 20-е годы для рабочих. Мы поднимаемся по ступенькам в квартиру и снимаем обувь при входе. Жилище выдержано в стиле контркультуры конца 60-х с плетеными абажурами, настенными украшениями и третьего мира, домашними растениями. Мы сидим за кухонным столом, Нике разливает пиво, мы разговариваем о детях. «Не нужно думать, что именно мы делаем детей тем, что они есть», – говорит он, доставая мобильный, чтобы позвонить женщине, с которой живет. Нике замечает, что Линус только сейчас начинает читать исторические книги, которые он подсовывал сыну годами, а прочитать стихи собственного дедушки, вероятно, так и не удосужился. Я спрашиваю Нике, выражал ли он когда-нибудь интерес к программированию, просил ли Линуса объяснить азы. Он отвечает, что никогда этого не делал. Отцы и дети – разные личности, поясняет он. Лезть в увлечение Линуса так же недопустимо, как «посягать на его душу». Похоже, ему нравится быть отцом известного человека. В очерке, напечатанном о Нике после получения премии, приводится его рассказ о том, как – еще когда он забирал Линуса с детской площадки – дети, показывая на него пальцами, кричали: «Смотрите, вон отец Линуса!»

Сара Торвальдс приехала на поезде из маленького городка, расположенного к западу от Хельсинки, где названия улиц пишут сначала на шведском, а потом уже на финском, где у нее хватает денег на квартиру с ванной и сауной и где – к ее радости – на улицах звучит шведская, а не финская речь. Как она объясняет, она относится к меньшинству среди меньшинства: в юности она перешла в католицизм, в результате чего оказалась среди 10 процентов нелютеранского населения Финляндии и вынудила своего агностика отца на несколько недель отречься от нее.

Она сегодня приехала в Хельсинки учить детей катехизису в рамках финансируемой правительством программы. Мила, жизнерадостна и в свои двадцать девять искренностью и серьезностью напоминает деловую старшеклассницу. Светлая кожа – и круглое лицо делают ее смутно похожей на старшего брата, но очевидно, что она гораздо общительнее его: во время нашего разговора она все время перекидывается текстовыми сообщениями с друзьями, с которыми наметила встретиться в тот же день. Она с успехом руководит собственным бюро переводов.

Полдень, и Сара везет меня пообедать с матерью, останавливаясь по дороге в разных памятных ей с детства местах: Кошачий парк, начальная школа. «Мои родители были членами коммунистической партии, поэтому в детстве нам внушали, что Советский Союз – хорошая страна. Мы ездили в Москву, – рассказывает она. – Мне больше всего запомнился огромный магазин игрушек – в Хельсинки таких больших нет». Когда родители развелись, ей было шесть лет. «Помню, как нам сказали, что папа теперь всегда будет жить отдельно. Я тогда подумала – вот хорошо, ссоры кончатся. Вообще-то он подолгу жил в Москве, поэтому мы привыкли, что он уезжает», – говорит Сара. В десять она решила переехать к отцу, в город Эспоо, расположенный неподалеку от Хельсинки, а не жить с матерью и Линусом. «Не то чтобы я не хотела жить с мамой. Я просто не хотела жить с Линусом. После этого мы с ним ссорились только по выходным. А обычно мы ссорились все время. И только когда мы стали старше, мы постепенно стали меньше ссориться».

Мы заезжаем к Анне Торвальдс в ее квартиру на первом этаже, и она радостно встречает нас. Все зовут ее Микке. Она не дает мне снять обувь по финскому обычаю: «Что за глупости! Здесь все равно грязно. Хуже уже не будет». Она невысокая, темноволосая, схватывает все на лету. Через несколько секунд после нашего приезда звонит телефон. Агент по недвижимости хочет показать мне свободную квартиру неподалеку от Микке, чтобы я мог описать ее Линусу и передать ему материалы о ней на случай, если тот захочет купить эту квартиру, чтобы иметь собственное пристанище в Хельсинки. Мы входим в просторную квартиру, где агент – вылитая Аннет Бенине в «Красоте по-американски» – велит нам перед осмотром надеть на обувь синие тряпичные тапочки. Вскоре она нарочито бодрым тоном заявляет: «А вот эта комната – идеальное место для хранения старинных произведений искусства, которым опасен солнечный свет». Микке смотрит на меня заговорщически и ехидно говорит: «Какой изящный способ сообщить, что это темная комната!»

Вернувшись к себе на кухню, Микке садится около прямоугольного стола, накрытого цветастой скатертью, и наливает кофе в огромную кружку. Ее квартира, как и квартира ее бывшего мужа, полна книг и произведений народного творчества. Там есть черно-белые занавески Маримекко. Раньше здесь было три комнаты и кухня. Когда дети уехали, Микке переехала в бывшую комнату Сары, а стены двух других снесла – получилась огромная гостиная-кухня. Она показывает на пустое место и говорит: «Вот здесь стоял его компьютер. Может, мне тут повесить какую-нибудь табличку? Как вы думаете?» Она курит сигарету за сигаретой. С ней легко говорить, и она настолько свободно владеет английским, что без запинки выпаливает фразы типа: «Он не какая-нибудь шваль подзаборная!» На стене ее спальни висит большой советский флаг. Его подарил Линусу Йоуко Виерумаки, который купил его на международных соревнованиях по прыжкам с трамплина на лыжах. У Линуса флаг годами валялся в шкафу, а Микке повесила его над своей постелью.

Микке достает альбом с немногочисленными семейными фотографиями. Там есть Линус голышом на пляже в возрасте 2–3 лет. Линус в том же возрасте, сверкает голой задницей возле старинного замка под Хельсинки. Вот тощий и нескладный Линус-подросток. Вот Микке на шестидесятилетии своего отца, профессора статистики. Микке показывает на свою старшую сестру и брата. «Она психиатр в Нью-Йорке. Он – ядерный физик. А я – паршивая овца. Верно? Но зато у меня у первой родилась внучка», – говорит она и зажигает очередную сигарету.

Мы обедаем в ресторане, носящем имя Уилта Чемберлена. Пока Сара читает сообщения на мобильнике, Микке выпивает несколько чашек кофе. Микке вспоминает, как они с Нике спорили о том, нужно ли отнимать у Линуса пустышку: они писали друг другу записки и оставляли на столе. Потом мы говорим о плохой памяти Линуса, его неспособности запоминать лица. «Если герой фильма сменил красную рубашку на желтую, Линус обязательно спросит: „Кто этот тип?“», – говорит Сара. Они рассказывают о велосипедной поездке по Швеции. Ночевках на ночном пароме. О том, как у Сары в первый же день украли велосипед и пришлось потратить кучу денег на новый. Как поставили палатку на скале. И Линус целый день лежал в ней, читая книжки, пока мать с дочерью плавали и ловили рыбу. А потом, когда налетел мощный шквал, они поняли, что палатку не унесло в Балтийское море только потому, что в ней спал Линус, не обративший внимания на резкую перемену погоды.

Микке смеется, вспоминая о тех годах, когда Линус сидел в своей комнате, поглощенный компьютером. «Нике все говорил мне: „Выпихни его наружу, заставь найти себе работу“, но мне Линус не мешал. Ему было немного нужно. А со своим компьютером он мог делать что угодно – это его право. Я понятия не имела, что там происходит».

Сейчас она – как и все – в курсе дел Линуса. Микке и другие родственники получают груду запросов от журналистов. Эти запросы направляются Линусу, а он обычно просит мать, отца или сестру ответить по собственному усмотрению. Однако, прежде чем отправлять свой ответ репортеру, они обычно посылают его на утверждение Линусу.

За несколько месяцев до этого, когда я послал Микке запрос по электронной почте о детстве Линуса, она ответила длинным, мастерски написанным посланием под названием «Как из маленького ботаника вырос Линус». Она писала, как заметила в едва научившемся ходить малыше научные наклонности, которые наблюдала у своего отца и старшего брата.

«Если у человека загораются глаза при появлении проблемы и он перестает слышать то, что ты говоришь, не может ответить на простейшие вопросы, полностью поглощен тем, чем занят в настоящий момент, во время решения задачи готов обходиться без сна и еды и никогда не сдается (его, конечно, можно прервать, и в обыденной жизни так часто и случается, но потом он снова продолжает свою работу, не думая ни о чем другом) – это верный признак». Она писала о бесконечной войне между Линусом и Сарой, об их непримиримых противоречиях. (Сара: «Я НЕ ЛЮБЛЮ грибы/печенку/еще что-то». Линус: «НЕТ, ЛЮБИШЬ!») И сдержанное уважение. «Однажды – еще в раннем детстве – Линус четко выразил свое восхищение сестрой. Ему было лет шесть-семь, когда он очень серьезно сказал мне: „Знаешь, я никогда не думаю новые мысли. Я думаю те мысли, которые люди уже думали до меня. Я их просто переставляю. А Сара думает такие мысли, которых раньше не было“».

Из этих воспоминаний следует, что я по-прежнему не думаю, что у Линуса есть какой-то специальный дар – и уж точно не к компьютерам. Если бы не компьютеры, он бы увлекся чем-то еще. В другой день и в другом возрасте он бы увлекся решением какой-то другой задачи. Думаю, это еще впереди. (Я имею в виду, что он, надеюсь, не застрянет на всю жизнь на обслуживании Linux.) Потому что, как мне кажется, им движет не любовь к компьютерам и, уж конечно, не стремление прославиться или разбогатеть, а искреннее любопытство и желание победить возникающие трудности. Причем сделать это так, как надо, потому что иначе нельзя и он не сдастся.

Я уже, по-моему, ответила на вопрос, каким сыном был Линус – его было легко растить. Стоило ему поставить себе задачу – и он забывал обо всем. Когда еще ребенком он увлекся компьютерами, все стало совсем просто. Как мы с Сарой говорили: дайте Линусу чулан с хорошим компьютером, кормите его сухими макаронами, и он будет совершенно доволен.

Одно только меня тревожило: как же при таком образе жизни он встретит хорошую девушку? Я могла лишь еще раз прибегнуть к испытанному родительскому средству: держать пальцы скрещенными. И, к счастью, это сработало! Он встретил Туве на занятиях в университете, и когда из-за нее он на несколько дней забыл и кота, и компьютер, стало ясно, что Природа – как и положено – взяла свое.

Я только надеюсь, что фимиамы славы не слишком отвлекут его. (Похоже, слава не изменила Линуса, но он действительно смягчился и теперь вступает в беседу с людьми, которые к нему обращаются. Кажется, что ему стало трудно говорить «нет». Но я подозреваю, что это больше связано с тем, что Линус стал мужем и отцом, чем со всей этой шумихой, поднятой прессой.)

Очевидно, что и мать и дочь полностью в курсе всей этой шумихи. Мы встречались в конце января 2000 года, на следующий день после того, как Transmeta публично объявила о своих планах и в начале обеда Микке спросила Сару: «В сегодняшней газете было что-нибудь, сама знаешь о ком и сама знаешь о чем?»

Вечером по дороге на работу Микке заезжает на такси ко мне в отель, чтобы завезти сосновый стульчик, который хочет передать Патриции. Вместе с планом квартиры для Линуса.

Вот, кажется, мое первое воспоминание о том, что Линус сделал что-то примечательное.
Йоуко Виерумаки (Авутон)

Дело было, думаю, в начале 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 начинался как редактор, но его создатели встроили в него кучу разных функций. Они хотели, чтоб это был редактор, который можно программировать, но потом программистская часть выросла до невообразимых размеров и редактор стал настоящим кошмаром. В него входит все, кроме разве что кухонной раковины, именно поэтому кухонная раковина часто служит его значком. Программа известна как чудовищный монстр, который включает больше функций, чем в принципе может понадобиться редактору. То же самое происходило с моим эмулятором терминала. Он превращался в нечто гораздо большее.

From: [email protected] (Linus Benedict Torvalds)

To: Newsgroup: comp.os.minix

Subject: Gcc-1.40 и вопрос о posix

Message-ID: <1991 Ju 13,100050. [email protected]>

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

Похоже, Ари Лемке страдал излишним оптимизмом. Он создал каталог (ftp.funet.fi) задолго до того, как у меня появилось что туда положить. У меня был пароль, и все было готово для того, чтобы я мог просто войти в систему и закачать свою программу. Но прошло долгих четыре месяца, прежде чем мне захотелось чем-нибудь поделиться с миром или хотя бы с Ари и несколькими другими фанатами операционных систем, с которыми я переписывался.

Исходно я хотел написать такую операционку, которую мог бы использовать вместо Minix. Мне не нужно было, чтобы она могла делать больше, чем Minix, но она должна была выполнять те функции Minix, которыми я пользовался, а также кое-что еще. Например, в Minix не только была плохая эмуляция терминала, но и не было возможности перевести в фоновый режим программу, которой временно не пользуешься. И управление памятью было очень упрощенным – в Mac OS оно и сейчас такое, кстати.

Как создать операционку? Надо выяснить, что должны делать системные вызовы, и написать программы, которые будут это делать. Вообще говоря, системных вызовов около двух сотен. Некоторые из них могут соответствовать целому набору функций. Другие – совсем просты. Наиболее фундаментальные системные вызовы могут быть весьма сложными и в значительной мере зависят от имеющейся инфраструктуры. Возьмем системные вызовы Write (запись) и Read (чтение). Для записи на диск и чтения с диска нужно создать драйвер дисковода. Возьмем вызов Open (открыть). Нужно создать весь уровень файловой системы, который будет анализировать имена и определять, где что лежит на диске. На один этот системный вызов ушло несколько месяцев. Но когда он был уже готов, тот же самый программный код можно было использовать и для других функций.

Так шла разработка на ранних этапах. Я читал стандарты в руководствах к Sun OS и других книжках, брал системные вызовы один за другим и старался написать что-нибудь работающее. Это было довольно изнурительно.

А все потому, что, когда ничего не происходит, трудно оценить объем сделанного. Можно писать маленькие тестики, которые будут проверять то, что ты только что добавил. Но при этом реально ничего не выполняется. Через некоторое время я бросил перебирать системные вызовы по списку и перешел к другому методу. Получилась довольно полная система, и мне захотелось выполнить настоящую программу. Первым делом нужно запустить оболочку, потому что без нее довольно трудно запустить что-нибудь еще. А кроме того, оболочка сама по себе содержит множество системных вызовов, которые все равно понадобятся. Стоит ее запустить, и можно получить текущий список системных вызовов, которые еще не реализованы.

В Unix оболочка – это своего рода мать всех программ. Она всегда наготове, чтобы запустить любой другой бинарник. (Бинарник – это программа, составленная из нулей и единиц – на языке, который понимает машина. Если вы написали программу на каком-то языке программирования, нужно откомпилировать исходный код, чтобы получить бинарник.) Прежде всего оболочка позволяет вам войти в систему. Ну хорошо, в реальной Unix-системе по традиции первая программа, которую вы запускаете, это init, но для работы init необходима большая инфраструктура. Это своего рода контроллер происходящего. Но если у вас нет ничего работающего, то вам и init не нужна.

Поэтому мое ядро запускало не init, а оболочку. К тому времени я реализовал около двадцати пяти системных вызовов и, как я уже писал, это была первая настоящая программа, которую я хотел запустить. Оболочку я сам не писал. Я загрузил к себе на диск клон Bourne Shell, одной из исходных оболочек Unix. Он бесплатно распространялся по Интернету, и его название представляло собой плохой каламбур. Исходную оболочку написал чувак по имени Bourne, поэтому клон назывался Bourne-Again Shell. Обычно его сокращали до 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: <[email protected]>

Привет всем пользователям minix! Я тут пишу (бесплатную) операционную систему (любительскую версию – она не будет такой большой и профессиональной, как gnu) для 386-х и 486-х AT. Я вожусь с этим с апреля, и она, похоже, скоро будет готова. Напишите мне, кому что нравится/не нравится в minix, поскольку моя ОС на нее похожа (кроме всего прочего, у нее – по практическим соображениям – то же физическое размещение файловой системы).

Пока что я перенес в нее bash (1.08) и gсс (1.40), и все вроде работает. Значит, в ближайшие месяцы у меня получится уже что-то работающее, и мне бы хотелось знать, какие функции нужны большинству. Все заявки принимаются, но выполнение не гарантируется: –)

Линус ([email protected])

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-сайт, невзлюбил название Frеax. Ему больше нравилось другое рабочее название, которое я использовал – Linux. Поэтому он назвал мой каталог pub/OS/Linux. Признаюсь – я не особенно сопротивлялся. Но инициатива была его. Поэтому я могу честно – или почти честно – сказать, что не был нескромным. Я тогда подумал, а что – хорошее название, и всегда можно будет на кого-нибудь свалить. Что я и делаю.

Как я уже говорил, моя операционка была не очень полезной. Она легко рушилась, если переполнить память или еще что-то не так сделать. Даже если вы ничего плохого не делали, система рушилась после более-менее продолжительного периода работы. Она тогда и не предназначалась для работы. На нее можно было только любоваться. И восхищаться ею.

То есть просто экспонат для группы людей, которые интересуются разработкой операционных систем. Для горстки технарей с узкой специализацией.

Реакция была неизменно положительная, но при этом так же неизменно звучало: «А вот хорошо бы она еще это делала» или «Смотрится классно, но на моем компьютере не работает».

Помню одно сообщение, где говорилось, что автору очень понравилась моя операционка, он не меньше абзаца описывал, какая она классная. Потом объяснял, что она только что уничтожила его жесткий диск и что мой драйвер дисковода с придурью. Даже потеряв все свои файлы, он все равно был настроен очень положительно. Такие сообщения было читать очень приятно. Это был отчет об ошибках в программе, которая все у него вверх дном перевернула.

Именно таких сообщений я и ждал. Я исправил кое-какие глюки (например, система перестала зависать, когда кончалась память). И еще я сделал большой шаг вперед – перенес в нее компилятор GCC, так что можно было компилировать небольшие программы. Теперь пользователям не нужно было перед запуском операционки загружать мой компилятор GCC.

 

IX

В начале октября была выпущена версия 0.02 с исправлением ошибок и добавлением некоторых программ. В ноябре я выпустил версию 0.03.

К концу 1991-го я был уже готов остановиться. Я сделал много интересных вещей. Не все работало идеально, но в программистском мире люди часто теряют интерес к проекту, когда решены основные задачи. Со мной примерно так и было. Кому интересно вылавливать блох? Удержали меня две вещи: во-первых, я нечаянно запортил раздел с Minix, а во-вторых, мне продолжали приходить отклики.

В те времена я загружался в Linux, но использовал Minix как основную среду разработки. Под Linux я в основном получал с университетского компьютера почту и новости с помощью своей программы эмуляции терминала. Поскольку университетская машина была постоянно занята, я написал программу автодозвона. Но в декабре я по ошибке позвонил вместо модема на винчестер. Вместо параметра auto-dial /dev/tty1 (последовательный интерфейс) я указал /dev/hda1 (винчестер). В итоге я нечаянно попортил некоторые важные части раздела, где у меня сидела Minix. Теперь я не мог ее загружать.

Это был решающий момент: можно было переустановить Minix или принять вызов и объявить, что Linux может полностью ее заменить. Я написал программы для компиляции Linux внутри нее самой и каждый раз, когда мне требовалась Minix, просто добавлял в Linux нужную функцию. Это большой шаг вперед, когда отказываешься от исходной базовой среды и переходишь на самообеспечение. Поэтому в конце ноября я выпустил версию 0.10. А еще через несколько недель – 0.11.

Вот тут системой стали по-настоящему пользоваться несколько человек. До этого мне приходили сообщения только о мелких ошибках – достаточно было исправить одну строку. Теперь же мне стали присылать заявки на новые функции. Помню, мне пришлось выйти из дома, чтобы увеличить ОЗУ с 4 до 8 мегабайт. Еще пришлось купить сопроцессор для операций с плавающей точкой, потому что некоторые спрашивали, поддерживает ли Linux сопроцессоры. Новое железо позволило проводить вычисления с плавающей точкой.

Помню, в декабре мне написал один немец. Он пытался скомпилировать ядро, но не мог запустить GCC, потому что у него было всего два мега, а компилятору тогда было нужно больше мега. Он спрашивал, нельзя ли компилировать Linux какой-то другой программой, которая не требует столько памяти. И хотя у меня таких проблем не было, я решил написать новую функцию специально для него. Это называется страничной подкачкой на диск и дает возможность в дополнение к имеющейся памяти использовать винчестер. Дело было в канун Рождества 1991 года. Помню, как 23 декабря старался реализовать подкачку. К 24-му она вроде заработала, но время от времени сыпалась. Наконец, 25-го все было готово. Это была первая возможность, которую я добавил по чужой заявке.

Я очень этим гордился.

Конечно, я ничего не сказал родным, когда мы собрались у папиной мамы (Фармор) на праздничный обед с окороком и селедкой. Каждый день полку линуксоидов прибывало, и я стал получать сообщения из таких стран, в которых мечтал побывать (вроде Австралии и США). Не знаю почему, но мне не хотелось обсуждать эти дела с родителями, сестрой или другими родственниками. Они же не разбирались в компьютерах. Наверное, я думал, что они ничего не поймут.

С их точки зрения, я просто занимал телефон своим модемом. Раньше в Хельсинки ночью был пониженный тариф, поэтому я старался большую часть делать дома по ночам. Но иногда я занимал телефон целый день. Я пытался раздобыть второй номер, но мы жили в старом доме, и запасных линий у них не было, а новые проводить они не собирались. В то время Сара только и делала, что разговаривала с друзьями по телефону. По крайней мере, мне так казалось. Поэтому у нас периодически возникали стычки. Виртуальные. Во время ее разговоров я принимался дозваниваться модемом, и у нее в трубке слышалось звяканье. Это ее раздражало, но так я давал ей понять, что мне очень-очень нужно считать почту. Я и не говорю, что был хорошим братом.

Подкачка на диск была довольно значительной вещью – в Minix ее не было. Я включил ее в версию 0.12, выпущенную в первую неделю января 1992-го. Linux тут же стали сравнивать не только с Minix, но и с Coherent, небольшой Unix-системой, выпущенной компанией Mark Williams. Добавление подкачки сразу вывело Linux вперед.

Тут-то и начался ее стремительный взлет. Люди стали переходить от Minix к Linux. В то время Linux еще многого не умела из того, что умела Minix, но самые ходовые вещи в ней были. Да еще эта новая возможность, которую все сразу оценили: подкачка позволяла запускать такие большие программы, для которых фактически не было памяти. Когда память кончалась, можно было взять использованный кусок, сохранить его на винт, запомнить, куда, и снова использовать кусок памяти. Это было важным событием в начале 1992 года.

Именно в январе пользоваться Linux стали не только те 5, 10, 20 человек, с кем я переписывался и кого знал по именам, но и сотни неизвестных мне людей. Среди пользователей Linux появились незнакомцы, и это было прикольно.

Примерно в это время по Интернету гуляла утка. Какой-то мальчик по имени Крейг якобы умирал от рака, и люди рассылали по цепочке письма, призывавшие поддержать его, послав ему открытку. Похоже, это был просто черный юмор: не думаю, что Крейг вообще существовал, а тем более болел раком. Но этот призыв породил миллионы открыток. Поэтому я – наполовину в шутку – попросил пользователей Linux присылать мне не деньги, а открытки. Это была своего рода пародия на цепочные рассылки («О боже, неужели еще один мейл с просьбой слать открытки?»). В мире PC тогда были очень популярны «шаровары» (условно-бесплатные программы): скачал программу – пошли автору долларов 10. Меня многие спрашивали, не послать ли мне долларов тридцать. Нужно было что-то ответить.

Оглядываясь назад, я понимаю, что деньги не помешали бы. На мне висело тысяч пять долларов в студенческих ссудах и примерно 50 долларов в месяц надо было выкладывать за компьютер. Остальные расходы шли в основном на пиццу и пиво. Но Linux отнимала у меня столько времени, что я очень редко куда-нибудь выходил – раз в неделю, не чаще. На девушек мне деньги не требовались, но на дополнительные железки пригодились бы. Хотя можно было обойтись и без них. Возможно, другой сын попросил бы за свою программу денег, чтобы помочь оплатить квартирные расходы своей одинокой работающей матери. Мне это и в голову не пришло. Можете меня судить.

Меня больше интересовало, где люди используют Linux. Я предпочел деньгам открытки. И они посыпались лавиной – из Новой Зеландии, Японии, Нидерландов, США. Почту обычно вынимала Сара, и она очень поразилась, что ее задиристый старший брат получает весточки от друзей из таких дальних краев. Это впервые навело ее на мысль, что в те долгие часы, когда я занимал телефон, я делал что-то потенциально полезное. Открыток накопилось много сотен, и я не знаю, куда они делись. Наверно, пропали во время одного из переездов. Авутон говорит, что я «самый несентиментальный человек на свете».

Я не хотел получать деньги по целому ряду причин. Когда я впервые выложил Linux в свободный доступ, я чувствовал, что иду по стопам всех тех ученых, которые столетиями строили свои теории на базе других – на плечах гигантов, говоря словами Исаака Ньютона. Я хотел не просто дать людям возможность воспользоваться плодами моих трудов, но и получить от них обратную связь (ну хорошо – и признание тоже). Мне казалось неправильным брать деньги с тех, кто мог бы помочь мне в улучшении программы. Возможно, я подошел бы к вопросу иначе, если бы не вырос в Финляндии, где на каждого, кто выказывает малейшие признаки жадности, глядят с подозрением, если не с завистью. (Все несколько изменилось с тех пор, как телефоны Nokia стали распространяться по всему свету, увеличивая банковские счета бесчисленных финнов.) И безусловно, я бы совсем по-другому смотрел на бесплатное распространение программы, если бы не вырос под влиянием упертого дедушки-профессора и упертого коммуниста отца.

В любом случае я не хотел продавать Linux. И не хотел терять своей власти над ней, то есть не хотел, чтобы ее продавал кто-то другой. Это я четко сформулировал в уведомлении об авторских правах, помещенном в файл COPYING первой версии, которую выложил еще в сентябре. Благодаря принятой в 1800-х годах Бернской конвенции тебе принадлежит авторское право на все созданное тобой до тех пор, пока ты это право не продал. Как владелец авторского права я должен был сформулировать правила: операционную систему можно использовать свободно, пока ты ее не продаешь, а если ты внес какие-то исправления или улучшения, то должен сделать их всеобщим достоянием в виде исходников (в отличие от бинарников, которые недоступны). Кто не согласен с этими условиями, тот не имеет права ни копировать, ни изменять программу.

Поставьте себя на мое место. Вы потратили полгода жизни на эту штуку и хотите, чтобы все могли ею пользоваться, чтобы вам что-то перепало и чтобы никто другой ею не завладел. Я хотел, чтобы люди могли ее видеть, изменять и улучшать в свое удовольствие. А для себя хотел иметь возможность знать, что они делают: иметь доступ ко всем исходникам, чтобы самому пользоваться их усовершенствованиями. Мне представлялось, что Linux может стать самой лучшей программой на свете, если только отсечь все коммерческие интересы. Деньги все испортили бы. А туда, где нет денег, не потянутся жадные люди.

При том, что сам я не стремился заработать на Linux, другие не стеснялись просить вознаграждение за копирование ее на дискеты. К февралю многие приносили на собрания юниксоидов дискеты с Linux. У меня стали просить разрешения брать за них долларов по пять, чтобы покрыть временные затраты и стоимость дискет. Трудность была в том, что это нарушало мои авторские права.

Пришла пора пересмотреть мой девиз: Linux не продается. К тому времени о Linux было столько разговоров в онлайне, что я уже не сомневался: никто не может просто забрать программу себе – чего я больше всего боялся вначале. По крайней мере, такой поступок вызвал бы бурю негодования. Если бы кто-то попытался присвоить Linux и превратить ее в коммерческий продукт, он столкнулся бы с сильным противодействием: куча фанатов Linux – а их становилось все больше – закричала бы: «Эй, это же Linux! Так нельзя!», только не так вежливо.

Мы уже набрали скорость. Каждый день хакеры со всего мира присылали свои изменения. Мы коллективно разрабатывали самую лучшую операционную систему, и с этим уже трудно было что-то сделать. Из-за этого, а также из-за того, что Linux стала всем известна, я мог позволить людям ее продавать.

Чтобы вы не думали, что я становлюсь в позу благодетеля человечества, хочу указать еще на один важный мотив моего решения. Дело в том, что при создании Linux я использовал множество свободно распространяемых по Интернету инструментов – пристроился на плечи гигантов. Самым важным из этих инструментов был компилятор GCC. Авторские права на него оговорены в Универсальной общественной лицензии (GPL), которую еще называют «левым правом» (copyleft) и которую изобрел Ричард Столман. В условиях этой лицензии речь не идет о деньгах. Можно получить хоть миллион баксов, если кто-то готов его заплатить, главное – открыть исходники. И тот, кому ты даешь или продаешь исходники, имеет те же права, что и ты сам. Это замечательная схема. Но в отличие от многих ярых фанатов GPL, которые требуют, чтобы всякая программная новинка становилась достоянием человечества на условиях этой лицензии, я считаю, что автор программы имеет право сам решить, что с ней делать.

Итак, я отказался от собственного описания авторских прав и перешел к GPL, которую Столман составил при участии юристов. (Из-за этого она и занимает несколько страниц.) Новое уведомление об авторских правах было включено в версию 0.12. Помню, как после этого лежал ночью без сна – все думал, как отразятся коммерческие интересы на Linux. Теперь мои тогдашние страхи кажутся смешными, поскольку коммерческий интерес был сравнительно невелик. Что-то заставляло меня быть очень осторожным. Я, в частности, боялся (да и сейчас боюсь), что кто-нибудь просто заграбастает Linux себе, наплевав на авторские права. В то время меня волновало, что будет невозможно засудить какого-нибудь американца за нарушение авторских прав. Меня это и сейчас волнует. Очень легко возбудить против кого-то иск за такие нарушения, но обидно, что кто-то будет продолжать делать это, пока его не вынудят остановиться.

Кроме того, я опасаюсь, что компании в таких странах, как Китай, проигнорируют GPL. Тамошнее законодательство по существу никак не защищает авторские права, и преследовать их нарушителей нет никакого смысла. Крупные производители программного обеспечения и музыкальной продукции пытались это делать, но особых успехов не достигли. Реальность опровергает мои страхи. Пусть отдельные нарушители и встречаются, но преобладают люди, уважающие авторские права; именно они присылают изменения в ядро и помогают его совершенствованию. Они полноправные участники его модернизации. А те, кто не считается с GPL, не смогут воспользоваться новыми версиями и потеряют клиентов. Я так надеюсь.

Вообще говоря, я смотрю на проблему авторских прав с двух сторон. Возьмем человека, который зарабатывает 50 долларов в месяц. Можно ли ожидать, что он заплатит за программу 250 долларов? Я не считаю, что он поступит аморально, если нелегально скопирует программу, а сэкономленную сумму, равную своей зарплате за пять месяцев, потратит на еду. С моральной точки зрения это вполне допустимо. И было бы аморально, да и просто глупо, преследовать такого «нарушителя». Что касается Linux, то кому какое дело, соблюдает ли человек GPL, если он использует программу для собственных нужд? Вот когда кто-то собирается на ней зарабатывать, игнорируя GPL, – это я считаю аморальным, будь то в США или в Африке. Но и тогда все зависит от масштабов. Жадность всегда отвратительна.

 

X

Minix и Linux

Не все отклики были положительными. Хоть по натуре я и не борец, но когда Эндрю Таненбаум начал нападать на мою операционную систему, которая вытесняла его собственную, пришлось защищать Linux и свою честь. Как и положено хакерам, мы грызлись по мейлу.

У него были все основания кипятиться. До появления телеконференций Linux я постоянно использовал конференцию Minix для объявлений о Linux и поиска тех, кого моя операционная система могла бы заинтересовать. Любого бы это зацепило.

Во-первых, Эндрю не понравилось мое вторжение в его конференцию. И естественно, ему не нравилось, что его операционная система начинала вытесняться этим новым созданием, явившимся со снежных просторов Финляндии, и что к проекту присоединялось столько новых разработчиков. Кроме того, у него были другие взгляды на построение операционных систем. В то время Эндрю входил в лагерь сторонников микроядерного подхода к операционным системам. Minix была сделана в виде микроядра, и Amoeba, над которой он в то время работал, тоже содержала микроядро.

В конце 80-х – начале 90-х это направление было очень популярным. А успех Linux угрожал ему. Поэтому Эндрю регулярно выступал с язвительными репликами.

Теоретически необходимость микроядра обосновывается следующим образом. Операционные системы сложны. Для их упрощения применяется модульный подход. Вся соль микроядра в том, чтобы оставить у ядра, которое является основой основ, как можно меньше функций. Его главная задача – обмен информацией. А все возможности компьютера реализуются в виде сервисов, которые обеспечивают коммуникационные каналы микроядра. Предполагается, что вы разбиваете проблемы на такие мелкие части, что вся сложность пропадает.

Мне это казалось глупым. Да, каждая отдельная часть получается простой. Но при этом их взаимодействие становится гораздо более сложным, чем при включении ряда сервисов в состав ядра, как это сделано в Linux. Представьте себе человеческий мозг. Каждая его составляющая проста, но их взаимодействие превращает мозг в очень сложную систему. В этом-то все и дело: целое больше частей. Если взять проблему, разделить ее пополам и сказать, что каждая половинка вполовину проще, то при этом вы игнорируете сложность интерфейса между половинками. Сторонники микроядра предлагали разбить ядро на пятьдесят независимых частей так, чтобы каждая часть была в пятьдесят раз проще. Они умалчивали о том, что взаимодействие между частями окажется сложнее исходной системы – при том, что и части сами по себе не будут элементарными.

Это самое главное возражение против микроядра. Простота, обеспечиваемая микроядром, является мнимой.

Исходно Linux была намного меньше и намного, намного проще. Она не навязывала модульность, поэтому многое делалось гораздо проще, чем в Minix. Вот, например, что мне не нравилось в Minix: если у тебя одновременно работает пять разных программ и они хотят прочесть пять различных файлов, эти задания будут выполняться последовательно. Другими словами, пять различных процессов пошлют файловой системе запросы: «Можно мне прочесть файл X?» Демон файловой системы, который занимается чтением, примет один из них и пошлет ответ, потом другой – и так далее.

В Linux, где ядро монолитно, каждый из пяти процессов пошлет системный вызов ядру. Ядро должно действовать очень осторожно, чтобы не перепутать вызовы, но при этом оно очень естественно готово к обслуживанию любого числа процессов, выполняя все, что им нужно. Поэтому Linux работает намного быстрее и эффективнее.

Плохо было и то, что с исходниками Minix – согласно лицензионному соглашению – почти ничего нельзя было делать. Вот, например, Брюс Эванс провел коренную переделку Minix, которая ее значительно улучшила. Однако нельзя было намертво встроить эти изменения в систему. Разрешалось только приделывать заплатки. Просто кошмар какой-то! По закону он не мог сделать загрузочный модуль, чтобы облегчить людям модернизацию. Поэтому для получения сколько-нибудь полезной системы модернизацию приходилось проводить в несколько этапов, что было крайне неудобно.

Единственный раз я принялся отвечать Эндрю Таненбауму в начале 1992 года. Представьте себе, что в одно вьюжное утро вы получаете такое нелицеприятное письмо:

From: [email protected] (Andy Tanenbaum)

То: Newsgroups: comp.os.minix

Subject: LINUX устарела

Date: 29 Jan 92 12:12:50 GMT

Я тут на пару недель уезжал в США, поэтому не писал особенно о LINUX (не то чтобы я стал писать, если бы и был здесь). Однако теперь хочу сделать несколько замечаний.

Как большинство из вас знает, для меня MINIX – хобби, которым я занимаюсь по вечерам, когда мне надоедает писать книжки, а по CNN не показывают никаких войн, революций или парламентских слушаний. Моя основная работа – преподавание и исследования в области операционных систем.

По роду своей деятельности, мне кажется, я знаю кое-что о будущем операционных систем в ближайшие лет десять. Здесь возникают две проблемы:

1. МИКРОЯДРО ИЛИ МОНОЛИТ

Раньше большинство операционных систем были монолитными, то есть вся операционная система представляла собой единый исполняемый файл «a.out», работающий в режиме ядра. В этот бинарник входит управление процессами, управление памятью, файловая система и все остальное. Примерами таких систем могут служить UNIX, MS-DOS, VMS, MVS, OS/360, MULTICS и многие другие. Альтернативой является система с микроядром, в которой большая часть операционной системы разбивается на отдельные процессы, находящиеся вне ядра. Они обмениваются между собой сообщениями. В задачи ядра входит управление передачей этих сообщений, обработка прерываний, управление процессами низкого уровня и, возможно, ввод-вывод. Примерами такой архитектуры служат RC4000, Amoeba, Chorus, Mach и еще не выпущенная Windows NT. Я мог бы многое рассказать о сравнительных преимуществах этих двух подходов, но достаточно сказать, что среди специалистов по разработке операционных систем споры уже закончились. Микроядро победило. Minix – система с микроядром. Файловая система и управление памятью – это отдельные процессы, которые работают вне ядра. Ввод-вывод тоже выполняется отдельно. LINUX – монолитная система. Это большой шаг назад, в 70-е годы.

2. ПЕРЕНОСИМОСТЬ

MINIX задумана как переносимая система и была перенесена с машин на базе Intel-процессоров на 680x0 (Atari, Amiga, Macintosh), SPARC и NS32016. LINUX тесно связана с 80x86. Тупиковый путь.

Поймите меня правильно. Я ничего не имею против LINUX. Она снимает с меня заботу о тех, кто хочет превратить MINIX в BSD UNIX. Но я с полной ответственностью заявляю, что те, кому нужна **СОВРЕМЕННАЯ** **бесплатная** ОС, должны искать переносимую ОС на базе микроядра, типа GNU или чего-то в этом роде.

Энди Таненбаум ([email protected])

Я знал, что должен защитить свою честь, поэтому написал ответ.

From: [email protected] (Linus Benedict Torvalds)

Subject: Re: LINUX устарела

Date: 29 Jan 92 23:14:26 GMT

Organization: University of Helsinki

На сообщение с таким заголовком нельзя не ответить. Прошу прощения у пользователей minix, которые уже досыта наслушались о linux. Я хотел бы просто *проигнорировать вызов*, но… Настало время серьезного спора!

В сообщении <[email protected]> [email protected] (Энди Таненбаум) пишет:

>Я тут на пару недель уезжал в США, поэтому не

>писал особенно о LINUX (не то чтобы я стал

>писать, если бы и был здесь). Однако теперь я

>хочу сделать несколько замечаний.

>Как большинство из вас знает, для меня MINIX –

>хобби, которым я занимаюсь по вечерам, когда мне

>надоедает писать книжки, а по CNN не показывают

>никаких войн, революций или парламентских

>слушаний. Моя основная работа – преподавание и

>исследования в области операционных систем.

Вы хотите этим оправдать ограниченность minix? Извините, но вы не правы. У меня оправданий гораздо больше, и все-таки linux побеждает minix почти по всем параметрам. Не говоря уж о том, что большая часть хороших кодов для minix, похоже, написана Брюсом Эвансом.

Re 1: Для вас minix хобби – но ведь minix приносит доход, a linux раздается бесплатно. Теперь по поводу хобби. Поместите minix в свободный доступ, и одна из моих главных претензий к ней отпадет. Linux для меня в большой степени хобби (серьезное хобби, самого высшего сорта). Я не беру за нее денег, и она даже не является частью моей учебной работы. Я сделал ее в свободное время на собственной машине.

Re 2: Вы работаете преподавателем и исследователем. Прекрасное объяснение для умственной неполноценности minix. Остается надеяться, что Amoeba не такая фигня, как minix.

>1. МИКРОЯДРО ИЛИ МОНОЛИТ

Да, linux – монолитная система, и я согласен, что микроядро лучше. Если бы у вашего сообщения не был такой спорный заголовок, я бы, вероятно, согласился с большинством ваших высказываний. С теоретической (и эстетической) точки зрения linux проигрывает. Если бы ядро GNU было готово прошлой весной, я бы и не взялся за свою разработку: беда в том, что оно не было готово тогда и не готово до сих пор. Linux выигрывает прежде всего потому, что она уже готова.

>MINIX – система с микроядром [пропущено, но без >потери смысла]. LINUX – монолитная система.

Если бы это было единственным критерием качества ядра, вы были бы правы. Однако вы не пишете о том, что микроядро в minix сделано плохо и возникают проблемы с многозадачностью (в ядре). Если бы я сделал ОС, у файловой системы которой были бы проблемы с многозадачностью, я бы не стал так поспешно осуждать других: наоборот, я бы из кожи вон лез, чтобы все забыли о моем провале. Да, я знаю, что для minix есть масса заплаток, обеспечивающих многопоточную работу, но это лишь заплатки, и Брюс Эванс говорит, что все равно остается множество проблем синхронизации.

>2. ПЕРЕНОСИМОСТЬ

«Переносимость нужна людям, которые не умеют писать новые программы» – это я только что придумал. В шутку.

На самом деле linux легче переносится, чем minix. Что? – слышу я ваш возглас. Это верно, но не в том смысле, какой имеет в виду ast: я сделал linux в максимальном соответствии со стандартами (хотя у меня перед глазами не было стандарта POSIX). Перенос программ в linux обычно гораздо проще, чем перенос их в minix. Я согласен, что переносимость – хорошее дело, но только если она имеет реальный смысл. Нет причин делать операционную систему полностью переносимой: достаточно, чтобы она была согласована с переносимым API. Основная идея операционной системы заключается в том, чтобы воспользоваться аппаратными возможностями, спрятав их под слоем обращений высокого уровня. Именно это и делает linux: она просто использует больше возможностей 386, чем другие ядра. В результате само ядро, конечно, становится не переносимым, но зато существенно упрощается архитектура. Вполне приемлемый компромисс, который и сделал возможным появление linux. Я согласен, что в linux машинная зависимость доведена до предела: я купил себе 386-й в январе прошлого года и занялся linux отчасти для того, чтобы его изучить. Многие вещи нужно было бы сделать более машинно-независимыми, если бы это был настоящий проект. Но я не особенно оправдываюсь: это было конструктивное решение, и когда в апреле прошлого года я начинал писать linux, то не думал, что программой захочет воспользоваться кто-то другой. К счастью, я ошибся, а поскольку мои исходники всем доступны, каждый может попробовать перенести ее, хотя это будет и непросто.

Линус

PS> Прошу прощения за слишком резкие высказывания: minix – неплохая система, если нет ничего другого. Amoeba, может быть, неплоха, если у вас валяется 5–10 лишних 386-х, но у меня их нет. Обычно я не вступаю в перепалки, но linux – мое больное место:)

В этой переписке (одной из немногих виртуальных ссор, в которых я участвовал) было еще несколько обменов репликами. Однако основную идею вы уже уловили: у системы с самого начала были противники. (А может быть, основная идея в другом: будьте осторожны, выступая на электронном форуме. Все ваши опечатки и ошибки останутся с вами навсегда.)

* * *

Оставив родных и друзей на стоянке, мы с Линусом отправляемся в поход вдоль ручья. Наш лагерь расположился в парке «Гровер-Хот-Спрингс» в восточной части Сьерра-Невады. Дело происходит в выходные по случаю Дня независимости (4 июля). Место настолько живописное, что кажется картинкой из географического журнала «National Geographic». «Это момент для „Кодака“», – провозглашает Линус, окидывая взглядом заросший полевыми цветами луг и суровые скалы на заднем плане. Мы усаживаемся возле ручья, и я прошу его рассказать о том времени, когда чары Linux стали распространяться далеко за пределы исходного сообщества участников телеконференции, с некоторыми из которых Линус даже встречался.

«Вот было классно, наверное, – говорю я. – Столько лет ты сидел без всякой связи с внешним миром, с головой погрузившись в процессор. И вдруг люди из разных уголков планеты признают, что ты занимаешься важным делом. Ты становишься центром растущего сообщества, которое смотрит на тебя, как на…»

«Не помню, чтоб это для меня много значило, – отвечает Линус. – Вряд ли. Я все время об этом думал, но в основном потому, что постоянно возникали проблемы, требовавшие разрешения. Думал-то я много, но без особых эмоций. Мне нравилось, что множество людей подталкивают меня к продолжению работы. Я думал, что конец уже виден – момент, когда практически все будет готово. Но этот момент все не наступал, потому что мне подкидывали все новые стимулы и новые проблемы.

Поэтому работать было интересно. Иначе я бы, наверное, занялся чем-то другим, потому что мне нравилось работать именно так. А эмоций у меня больше вызывал мой нос или еще что-нибудь в этом роде».

Через несколько недель мы бродим по Стенфордскому торговому центру, где Линус выбирает себе кроссовки, поражаясь их разнообразию. «Сколько миль в неделю вы обычно пробегаете?» – спрашивает его продавец. Линус улыбается – за последние десять лет он не пробежал и мили. Физкультура не входила в сферу его приоритетов. Но в минуты слабости Линус признается, что хотел бы избавиться от лишнего веса.

«Это, наверное, Туве попросила тебя помочь мне сбавить вес», – шутит он, поглаживая свой животик.

«Передай ей, что на этой неделе я еще не получил от нее чека», – откликаюсь я.

Вскоре мы начинаем кружить по Стенфордскому городку в поисках места для стоянки. Примерно через полчаса нам удается втиснуть свой автомобиль. После небольшой разминки мы принимаемся бежать по грязным тропинкам вдоль высохшего озера в глубь леса к нашей цели – огромной спутниковой тарелке на холме. Нам так и не удается ее достичь. Я беру слишком высокий темп и с удивлением отмечаю, что километра полтора Линус умудряется бежать прямо за мной. После этого он теряет дыхание. Через несколько минут мы растягиваемся на траве возле озера.

«А как реагировала твоя семья на происходящее с Linux? – спрашиваю я. – Они, наверное, пришли в восторг».

«Вряд ли они что-то заметили, – отвечает он. – Я не хочу сказать, что никому не было дела. Просто я почти всю свою жизнь программировал, для них-то ничего не изменилось».

«Разве ты им ничего не сказал? Например, отец тебя куда-то везет, а ты ему и говоришь, как бы между прочим: помнишь, я все возился с этой компьютерной штукой? Так ей теперь пользуются сотни людей…»

«Нет, – отвечает он. – У меня просто не было потребности обсуждать это с родными и друзьями. Мне никогда не приходило в голову навязываться с этим. Помню, примерно в то время, когда я писал Linux, Ларс Вирцениус собрался купить XENIX – версию Unix, разработанную SCO. Он тогда пытался извиняться: „Пойми меня правильно“, но меня это не трогало. Он потом перешел на Linux, но для меня это не имело особого значения. Мне нравилось, что люди ей пользуются и присылают мне свои отзывы, но в то же время это было не так уж важно. Я не стремился пропагандировать ее. Я гордился, что люди используют мою программу, но не помню, чтобы мне хотелось об этом рассказывать. Мне не казалось, что это самое важное дело на свете. То, что программой пользовались сотни людей, не придавало ей особого веса в моих глазах. Я просто развлекался. У меня и сейчас такой же настрой».

«И тебе не хотелось рассказать об этом родным и друзьям? Тебя не волновало то, что происходит?» – спросил я, не скрывая недоверия.

Прежде чем ответить, он несколько секунд молчит.

«Не помню, чтоб я вообще тогда что-то чувствовал».

Линус покупает новую машину – двухместный «BMW-Z3» с откидывающимся верхом, который, по его словам, просто олицетворяет «развлечение». Он выбрал голубой металлик – идеальный цвет для игрушечных машин – потому что эта модель не бывает его любимого – ярко-желтого – цвета. Желтые «BMW», объясняет он, имеют цвет мочи. Годами он парковал свой «Понтиак» как можно ближе ко входу в штаб-квартиру Transmeta в деловом центре Санта-Клары. Но «BMW» стоит под окном его кабинета якобы для того, чтобы он был в тени. Теперь, сидя за компьютером, Линус может любоваться своим новым автомобилем.

Чуть больше года назад мы впервые поехали вместе через горы в Санта-Круз в белом «Мустанге» с откидывающимся верхом, который я специально для этого взял напрокат. Во время той поездки Линус просил останавливаться, чтобы он мог рассмотреть спортивные машины, которые стояли возле сауны и пивоварни. Теперь мы едем через перевал в его собственной спортивной машине. Он блаженно улыбается на поворотах.

«Ты этого заслуживаешь», – говорю я.

Я вытаскиваю из бардачка стопку дисков.

«Пинк Флойд»? – спрашиваю я. – «Ху? Джанис Джоплин?»

«Это музыка, на которой я вырос. В детстве я сам не покупал записей, но все это было у нас в квартире. Наверное, мама их слушала. Хотя, помню, ей очень нравился Элвис Костелло».

Дело происходит в пятницу, во второй половине дня. Все вокруг насыщено калифорнийским великолепием, ласкающим все органы чувств: кобальтовые небеса радуют глаз, теплые солнечные лучи – кожу, благоухание горных эвкалиптов, сладкий вкус чистого воздуха, убаюкивающий мотив «Пинк Флойд» через навороченные динамики. Вероятно, для обгонявших нас автомобилистов мы – разбрызгивая солнечных зайчиков и оглашая окрестности классическим роком – олицетворяем своего рода молодежный стандарт счастья. Однако мало кто обгоняет новый «BMW-Z3» Линуса.

Мы ставим свой автомобиль среди менее дорогих машин, стоящих вдоль шоссе номер 1, чуть севернее Санта-Круз, и спускаемся вниз на полупустынный пляж. Несколько минут мы блаженствуем, лежа на полотенцах под теплым солнцем, а потом я достаю из рюкзака диктофон. И снова прошу рассказать о тех временах. Линус рисует на песке прямоугольник, изображая свою комнату, отмечает расположение постели и компьютера.

«Я скатывался с постели и немедленно проверял свою почту, – говорит он, водя пальцем по своему чертежу. – В некоторые дни я вообще не выходил из квартиры. Получая почту, я прежде всего интересовался не тем, кто мне пишет, а тем, решена ли та или иная проблема. Я гадал: какие увлекательные вопросы возникли сегодня, решил ли кто-нибудь вчерашнюю проблему?»

Линус говорит, что его социальная жизнь в то время была «ничтожной». Потом, понимая, что это звучит чересчур жалобно, поправляется: «Ну, скажем, почти ничтожной».

«Не то чтобы я жил полным затворником, – рассказывает он, – но даже когда я уже работал над Linux, я оставался таким же антисоциальным, как всегда. Ты заметил, что я никогда не звоню людям по телефону? И так было всегда. Я никогда не звонил. Большинство моих друзей общительны, а я – нет. Можешь себе представить, каково ухаживать за девушкой, если ты никогда не звонишь ей по телефону. В то время у меня было всего несколько друзей, которые стучали мне в окно, если хотели зайти на чашку чая. Не думаю, что кто-то тогда замечал во мне что-то особенное. Мол, он делает нечто грандиозное и когда-нибудь перевернет мир. Мне кажется, так никто не думал».

В то время единственным общественным мероприятием для Линуса были еженедельные собрания «Спектрума», где он общался с другими студентами. Эти встречи гораздо больше волновали Линуса, чем все, связанное с программированием.

«Что меня тогда заботило? Общение с людьми. Может быть, „заботило“ – не совсем верное слово: там упор был на эмоции. Я просто думал о девушках. Linux не имела такого большого значения. А в некоторой степени это и сейчас так. А в некоторой степени я по-прежнему могу ее игнорировать. В те первые годы учебы в университете для меня большое значение имела социальная жизнь. Не то чтобы я чувствовал себя горбуном, над которым все смеются. Просто мне хотелось иметь друзей и все такое. „Спектрум“ нравился мне, в частности, тем, что позволял вести светскую жизнь без особых усилий. Один вечер в неделю я вращался в обществе, а все остальные вечера сидел за компьютером. Это гораздо больше затрагивало мои чувства, чем Linux. Из-за Linux я никогда по-настоящему не расстраивался, не терял сна. Как тогда, так и теперь, меня в основном волнуют не сами технологии, а социальные отношения вокруг них. Послание Эндрю Таненбаума огорчило меня в первую очередь не поднятыми в нем техническими вопросами. Если бы это был кто-то другой, я бы его просто проигнорировал. Беда была в том, что он отправил его в список рассылки и выставил меня… Меня волновало мое социальное положение среди этих людей, а он его подрывал. Что меня особенно увлекало в Linux – это обратная связь.

Она показывала, что Linux что-то значит, что я вхожу в какую-то социальную группу. Причем в этой группе я был лидером. Вот что было для меня очень важно. Гораздо важнее, чем рассказывать маме с папой, чем я занят. Пользователи Linux меня волновали намного больше. Я создал социальную группу и заслужил уважение ее членов. Тогда я об этом так не думал, да и сейчас не думаю. Но это, наверное, было самым важным. Поэтому я так резко среагировал на письмо Эндрю Таненбаума».

Солнце начинает сползать в Тихий океан – время уходить с пляжа. На обратном пути Линус уговаривает меня вести машину (чтобы я почувствовал, как она слушается руля) и возвращаться в Кремниевую Долину длинным и извилистым путем, по шоссе номер 9.

Линус говорит, что спор с создателем Minix вскоре перешел в обмен личными посланиями – перепалка была слишком резкой, чтобы вести ее публично. Несколько месяцев было тихо. Потом Таненбаум прислал Линусу ссылку на пятистрочное объявление в журнале «Byte» о выпуске коммерческой версии Linux.

«В своем последнем сообщении Эндрю спрашивал, этого ли я хотел – чтобы кто-то продавал мой труд. Я ему ответил коротко: „Да“, и больше он мне не писал», – рассказывает Линус.

Примерно через год, когда Линус приехал в Нидерланды на свое первое публичное выступление, он отправился в университет, где преподавал Таненбаум, надеясь получить от него автограф на своем экземпляре книги «Проектирование и реализация операционных систем» – книги, которая перевернула его жизнь. Он ждал под дверью, но Таненбаум так и не появился. Профессор был в отъезде, и встреча не состоялась.

 

XI

Температура в номере гостиницы была чуть выше нуля, и накануне своего первого выступления я лежал в постели, дрожа от холода. В Нидерландах, в отличие от Финляндии, не принято отапливать помещения, а в этой мерзкой комнате были еще и огромные сплошные окна, как будто жить в ней предполагалось только летом. Однако ночью 4 ноября 1993 года я не мог спать не только из-за холода. Я страшно волновался.

Публичные выступления мне всегда давались с трудом. В школе нас заставляли делать доклады по темам, которые мы изучали, – о крысах или еще о чем-нибудь, – и для меня это было совершенно непереносимо. Я стоял, не мог вымолвить ни слова и только хихикал. Хотя – поверьте мне – я вовсе не такой смешливый. Мне было трудно даже просто выйти к доске рассказать, как я решил задачу.

И вот теперь я оказался в Эде (Нидерланды), в часе езды на поезде от Амстердама, потому что меня пригласили выступить на десятой годовщине Нидерландской группы пользователей Unix. Я хотел сам себе доказать, что справлюсь. За год до этого меня пригласили выступить перед аналогичной организацией в Испании, но я отказался, потому что страх перед публичными выступлениями пересилил любовь к путешествиям. А в то время я очень любил путешествовать. (Я и сейчас люблю, но уже нет той остроты впечатлений, которая была у мальчика, практически не выезжавшего из Финляндии. Я бывал только в Швеции, куда мы несколько раз ездили с палатками на каникулы, и в Москве, где мы навещали папу, когда мне было шесть лет.)

Жалея, что упустил шанс поехать в Испанию, я решил принять следующее приглашение. Но теперь, лежа в постели, я уже сомневался, что смогу когда-нибудь преодолеть свой страх перед большой аудиторией, боялся, что не смогу открыть рта или – хуже того – начну хихикать перед 400 участниками собрания.

Мне было тошно.

Я говорил себе все, что обычно говорят в подобных случаях. Что аудитория желает мне успеха – ведь если бы они меня не любили, то просто не пришли бы. Что я хорошо знаком с темой: причины выбора тех или иных технических решений при создании ядра Linux, причины предоставления исходников в свободное пользование. Но я все равно сомневался, что доклад удастся, и мысли у меня в голове проносились со стуком и скрежетом, как бесконечный товарный состав. Я буквально дрожал и далеко не от одного только холода.

Как прошел доклад? Аудитория была дружелюбна к заметно трепещущему перед ней докладчику, вцепившемуся в свои PowerPoint-слайды как в спасательный круг (слава Microsoft!), а потом с запинкой отвечавшему на вопросы. На самом деле вопросы и ответы прошли лучше всего. Как бы то ни было, после доклада ко мне подошел Маршал Кирк Маккусик – один из главных разработчиков BSD Unix – и сказал, что с интересом выслушал мое выступление.

Я был так благодарен ему за этот жест, что готов был встать на колени и целовать его ноги. Для меня есть всего несколько авторитетов в компьютерной области, и Кирк – один из них. За то, что он был так мил после моего первого выступления.

Тот первый доклад стал для меня своего рода шоковой терапией. И следующие за ним тоже. Зато они постепенно помогли мне приобрести некоторую уверенность в себе.

Дэвид все спрашивает, изменилось ли мое положение в университете после того, как Linux получила известность? Я никогда не слышал, чтобы кто-то из преподавателей упоминал о ней или кто-то из студентов показывал меня своим друзьям. Ничего такого не было. Мое университетское окружение знало о Linux, но большинство линуксоидов жило за пределами Финляндии.

Осенью 1992-го меня назначили ассистентом в шведских классах факультета информатики. (Это произошло так. Им был нужен говорящий по-шведски преподаватель для базовых компьютерных курсов. В университете специализировались по информатике всего два шведа-старшекурсника: Ларс и Линус. Особого выбора не было.) Первое время я со страхом выходил к доске решать задачи, но вскоре увлекался и переставал волноваться. Кстати, спустя три года меня перевели в научные сотрудники – я стал получать деньги не за преподавание, а за исследования в компьютерной лаборатории, которые по существу сводились к разработке Linux. Этим было положено начало доброй традиции: мне стали платить за работу над Linux. Именно так в сущности обстоит дело и в Transmeta.

Дэвид: «Ну, и когда это стало важным?»

Я: «До сих пор не стало».

Хорошо, отвечу подробнее. Дело приняло новый оборот, когда я понял, что Linux не просто игрушечная операционная система – на нее всерьез стало полагаться множество людей. Вначале многие ставили себе Linux, просто чтобы поковыряться в ней, а вот когда ее стали использовать как настоящую операционную систему, я понял, что несу ответственность, если что-то случится. Или по крайней мере начал это понимать. (Я и сейчас чувствую такую ответственность.) За 1992 год Linux превратилась из увлекательной игры в важную составляющую жизни людей, стала источником их доходов, средством ведения коммерции.

Скачок произошел весной 1992-го – примерно через год после того, как я занялся программой эмуляции терминала, – когда под Linux заработала первая версия оконной системы X Window. Это значило, что операционка может поддерживать графический интерфейс пользователя и что пользователи могут работать в нескольких окнах одновременно благодаря проекту X Window, зародившемуся в Массачусетском технологическом институте. Это было существенное новшество. Помню, за год до его внедрения я шутил на эту тему с Ларсом: говорил, мол, когда-нибудь мы сможем запустить X Window, и все заработает. Я совершенно не ожидал, что это произойдет так быстро. Хакер по имени Орест Збровски сумел перенести X Window под Linux.

Система X Window работает с помощью Х-сервера, который берет на себя всю графику. Сервер общается с клиентами, чья задача говорить: «Мне нужно окно такой-то величины». Обмен информацией происходит на уровне сокетов, или, точнее, Unix Domain Sockets. Это способ обмена информацией внутри Unix, но он же используется и для передачи информации по Интернету. Орест написал первый уровень сокетов для Linux, просто чтобы перенести под нее X Window. Интерфейс Ореста был сметан на живую нитку и не интегрирован с остальным кодом. Это тот случай, когда я согласился на грубо сработанную заплатку, потому что она была нам нужна.

Я не сразу привык к тому, что у нас есть графический интерфейс пользователя. Думаю, около года я им вообще редко пользовался. А сейчас уже не могу без него: во время работы у меня всегда открыт миллион окон.

Орест не только дал возможность работать с окнами, но и вообще открыл дорогу в будущее. Domain Sockets использовались для организации локальной сети, которая позволяла работать системе X Window. Мы могли воспользоваться теми же самыми Domain Sockets, чтобы обеспечить Linux большой рывок во внешние сети – получить возможность связывать компьютеры. Без включения в сеть Linux была полезна только тем, кто сидел дома и выходил в большой мир по модему или вообще делал все локально. Поэтому мы с большим воодушевлением принялись разрабатывать сети для Linux поверх этих самых Domain Sockets, хотя они вовсе не были для этого предназначены.

Я был настолько уверен, что все получится, что даже сделал скачок в нумерации версий. В марте 1992 года я планировал выпустить версию 0.13. А вместо этого, получив графический интерфейс пользователя, уверился, что мы на 95 % достигли цели – выпуска полноценной, надежной операционной системы, пригодной к тому же для работы в сети. И поэтому выпустил версию 0.95.

Господи, как же это было преждевременно! Чтобы не сказать, глупо.

Работа в сети – поганое дело, и в итоге на ее организацию ушло почти два года – только тогда ее можно было выпустить в свет. Переходя в сеть, получаешь целый букет новых проблем. Во-первых, защита. Ты не знаешь, кто работает в сети и что он затеял. Нужно быть очень осторожным, чтобы никто не мог повесить твой компьютер, посылая тебе кучи хлама. Ты уже не можешь контролировать, кто вступает в контакт с твоей машиной. Причем у разных людей могут быть совершенно разные настройки. Используя стандартный сетевой протокол TCP/IP, трудно правильно установить все тайм-ауты. Казалось, процесс будет бесконечным. К концу 1993 года у нас уже была почти работоспособная сетевая система, хотя у некоторых возникали серьезные проблемы с ее использованием. Мы не умели работать с сетями, в которых адрес не укладывался в 8-битные границы.

Из-за своего чрезмерного оптимизма при выпуске версии 0.95 я оказался в ловушке. В течение тех двух лет, что ушли на разработку и выпуск версии 1.0, с номерами творилось что-то невообразимое. Между 95 и 100 не так много чисел, но мы продолжали постоянно выпускать новые версии – то ошибку поправишь, то функцию добавишь. Добравшись до 0.99, мы были вынуждены начать добавлять номера, чтобы указать на уровень заплат, а потом перешли на алфавит. В какой-то момент мы выпустили версию 0.99, уровень заплаток 15A. Потом появилась версия 0.99, уровень заплаток 15B и так далее. Так мы добрались до уровня заплаток 15Z. А вместо уровня 16 была выпущена версия 1.0 – в этот момент система наконец стала работоспособной. В марте 1994-го Linux 1.0 была с большой помпой представлена в аудитории факультета информатики Университета Хельсинки.

Этому предшествовал довольно беспорядочный период, но уже ничто не могло нанести урона популярности Linux. У нас была своя собственная телеконференция в Интернете – comp.os.linux, выросшая из пепла нашей с Эндрю Таненбаумом перепалки. И она привлекала орды участников. В те времена Internet Cabal (группа администраторов некоторых узлов Интернета) ежемесячно подводила неофициальную статистику: сколько человек участвует в каждой конференции. Данные были не очень точные, но они лучше всего говорили о популярности твоего сайта – в данном случае, сколько людей интересовалось Linux. Неизменным лидером среди телеконференций была alt.sex. (Я-то ей особенно не интересовался. Хотя и сходил туда пару раз, чтобы посмотреть, из-за чего подняли такой шум. Но вообще я был типичным фригидным ботаником, которому гораздо интересней играть в процессор с плавающей точкой, чем следить за новостями с сексуального фронта: о свеженайденных позициях при половом акте, отчетах о крутых любовных играх или о чем там еще говорят на alt.sex.)

С помощью ежемесячной статистики Cabal легко было следить за популярностью comp.os.linux. Можете не сомневаться – так я и делал. (Некоторые считают меня чуть ли не народным героем, но я никогда не был тем бескорыстным, самоотверженным компьютерным фанатом, каким меня пытается представить падкая на мифы пресса.) К осени 1992 года в нашем форуме участвовали десятки тысяч людей. Все эти люди следили за событиями вокруг Linux, но не все из них пользовались самой операционной системой. Каждый месяц в момент подведения итогов выпускался список из сорока самых популярных телеконференций. Если твой форум не входил в эти сорок, то о его популярности можно было узнать из полного отчета, который распространялся в специальной служебной конференции. Мне обычно приходилось обращаться к полному отчету.

Однако форум Linux неуклонно двигался вверх. В какой-то момент он вошел в первые сорок, и я был счастлив. Это было круто. Помню, я тогда написал довольно злорадное сообщение в comp.os.linux, в котором перечислял форумы, посвященные разным ОС, включая Minix, и говорил: «Смотрите, мы популярнее Windows!» (Учтите, что в то время любители Windows еще не освоили Интернет.) Где-то в 1993-м мы вошли в первую пятерку. В ту ночь я лег спать преисполненный самодовольства, в экстазе от того, что Linux по популярности почти догнала секс.

В окружающем меня мирке ничего похожего не происходило. Я практически не жил реальной жизнью. К тому времени, как я уже писал, Петер Энвин организовал в Интернете сбор средств для оплаты моего компьютера. В итоге было собрано три тысячи долларов, и в конце 1993 года я закончил выплаты. А на Рождество провел модернизацию своего компьютера до 486 DX2-66, который использовал потом много лет. В этом и была моя жизнь: я ел, спал, иногда ходил в университет, программировал, читал прорву мейлов. Я был в курсе, что некоторые мои друзья чаще занимаются сексом, но это меня не трогало.

Честно говоря, большинство моих друзей тоже не преуспевали в этой сфере.

 

XII

Выступление в Эде почти убедило меня, что я способен вынести что угодно – даже такой ужас, как выступление перед множеством совершенно незнакомых, уставившихся на меня людей. Начинала приходить уверенность и в других областях. Я был вынужден принимать быстрые решения по поводу исправления и модернизации Linux, и каждое такое решение укрепляло меня в роли лидера растущего коллектива. С технической точки зрения решения не вызывали проблем – труднее было дипломатично сообщить одному человеку, что я предпочел решение другого. Иногда достаточно было просто написать: «Поправки такого-то работают прекрасно. Давайте на них и остановимся».

Никогда не понимал, зачем соглашаться на решение, которое я не считаю самым лучшим с технической точки зрения. Это помогало мне сохранять беспристрастность, когда несколько программистов предлагали различные заплатки. Кроме того, хотя тогда я об этом не задумывался, это внушало людям доверие. А доверие дорогого стоит. Когда тебе верят, то прислушиваются к твоим советам.

Безусловно, сперва нужно заложить фундамент доверия. Думаю, все началось не столько, когда я написал ядро Linux, а скорее когда я выложил свою программу в свободном доступе в Интернете с тем, чтобы каждый желающий мог внести в нее изменения или добавить функции, а я бы принимал окончательное решение в отношении устройства операционной системы.

Точно так же, как я не планировал, что Linux начнет свое существование за пределами моего собственного компьютера, так и не ожидал, что стану лидером. Это произошло само собой, по умолчанию. В какой-то момент группа из пяти разработчиков стала выполнять основную часть работы по ключевым направлениям. Было естественно, чтобы они стали своего рода фильтрами и отвечали за разработку в соответствующих областях.

Я довольно быстро понял – проще всего руководить, позволяя людям делать то, что им хочется, а не заставляя их делать то, что хочется тебе. Кроме того, хороший руководитель понимает когда не прав, и умеет отступать. А еще он позволяет другим принимать самостоятельные решения.

Другими словами: успех Linux в значительной степени обусловлен моими собственными недостатками: я ленив и люблю пожинать чужие лавры. Если б не это, модель разработки Linux – как они это называют – до сих пор не вышла бы за рамки ежедневного обмена сообщениями между пятью-шестью хакерами. Не было бы и речи о сегодняшнем размахе, когда разработкой Linux занимается сложнейшая сеть из сотен тысяч участников четырех тысяч одновременно разрабатываемых проектов, опирающихся на листы рассылки, встречи разработчиков и корпоративную поддержку – А сверху как верховный арбитр всех споров по поводу ядра операционной системы расположился руководитель, который совсем не стремится руководить.

Что ни делается – все к лучшему. Мне удалось избавиться от тех частей, которые меня не особенно увлекали. Это прежде всего уровень пользователя – внешние части системы, с которыми непосредственно имеет дело конечный пользователь, в отличие от кода, который скрывается в глубине системы. Вначале кто-то вызывается вести то или иное направление. Потом процесс поддержки подсистем становится органичным. Все знают, кто активно участвует в работе и кому можно доверять, в итоге на него все и переключается. Никаких голосований. Никаких приказов. Никаких подсчетов.

Например, если двое создают однотипные драйверы, я иногда принимаю варианты обоих и смотрю, каким чаше пользуются. Обычно один становится более популярным. Или же авторы начинают совершенствовать свои программы и в итоге их пути расходятся – они начинают использоваться в разных сферах.

Многих удивляет сам факт, что модель с открытыми исходниками работает.

По-моему, тут полезно попытаться понять психологию хакеров из мира общедоступных программ. (Вообще-то, обычно я избегаю слова «хакер». В личном разговоре с технарями я еще могу назвать себя хакером. Но в последнее время смысл этого слова изменился: так стали называть мальчишек, которые от нечего делать заняты электронным взломом корпоративных ВЦ вместо того, чтобы помогать работе местных библиотек или уж, на худой конец, бегать за девочками.)

Хакеры (программисты), которые работают над Linux и другими проектами с открытыми исходниками, часто отказывают себе во сне, занятиях спортом, посещениях школьных чемпионатов, в которых участвуют их дети, а иногда и в сексе, потому что им нравится программировать. А еще им нравится участвовать в крупнейшем в мире коллективном проекте, посвященном построению самой лучшей и самой красивой технологии, – проекте, который доступен каждому. Вот и все. И это прикольно.

Ну ладно, я, кажется, перешел на язык самовосхвалений, которым пишутся пресс-релизы. Фанаты открытых исходников – не матери Терезы из сферы высоких технологий. Они получают свою долю славы – их имена включаются в благодарственные списки или в файл с описанием истории проекта, который сопровождает любой проект. Наиболее активные участники привлекают внимание работодателей, которые изучают программы, чтобы выявить и нанять лучших программистов. В значительной степени хакерами движет и стремление заслужить уважение других участников своими солидными вкладами. Это очень мощный стимул. Каждый хочет произвести впечатление на окружающих, укрепить свою репутацию, повысить социальный статус. Разработка программ с открытыми исходниками дает программистам такую возможность.

Разумеется, я провел большую часть 1993 года точно так же, как и большую часть 1992-го, 1991-го и так далее: уткнувшись в компьютер. Но близились перемены.

Идя по стопам своего дедушки, я стал ассистентом в Университете Хельсинки, ответственным за шведскоязычный курс «Введение в информатику» в осеннем семестре. Тут-то я и встретил Туве. Она оказала на мою жизнь еще большее влияние, чем «Проектирование и реализация операционных систем» Эндрю Таненбаума. Но я не буду обременять вас излишними деталями.

Туве была одной из студенток моей группы (всего там было 15 человек). Она уже получила специальность дошкольного педагога. А потом решила познакомиться с компьютерами, но сначала немного отставала от остальных. В конце концов она всех догнала.

Курс был совершенно элементарный. Шла осень 1993-го, Интернет еще не был популярен, поэтому однажды я задал на дом послать мне сообщение по мейлу. Сегодня это звучит по-идиотски, но я сказал: «Домашнее задание: пошлите мне e-mail».

Другие студенты прислали просто тестовые сообщения или какие-то замечания о занятиях. Туве пригласила меня на свидание.

Я женился на первой же женщине, которая обратилась ко мне по мейлу.

Наше первое свидание так и не кончилось. Туве была дошкольным педагогом и шестикратным чемпионом Финляндии по карате, она выросла в нормальной семье, хотя так я называю любую семью, которая не похожа на нашу чокнутую семейку. У нее было много друзей. Я сразу понял, что именно эта женщина мне нужна. (Подробности пропущу.) Через несколько месяцев мы с моим котом Ранди переехали в ее крошечную квартирку.

В первые две недели я не потрудился даже перевезти свой компьютер. Не считая службы в армии, это была самая долгая разлука с компьютером с тех пор, как одиннадцатилетним мальчиком я сидел у дедушки на коленях. Не буду подробно на этом останавливаться, но это по-прежнему рекорд моей штатской жизни без процессора. Каким-то образом я выжил (детали снова опускаю). В редкие встречи с мамой в тот период я слышал от нее что-то о «триумфе матери-природы». Думаю, отец с сестрой были просто в шоке.

Вскоре Туве принесла в дом кошечку, чтобы Ранди не скучал. У нас повелось проводить вечера вдвоем или с друзьями, вставать в 5 утра, чтобы она могла пойти на работу, а я мог оказаться в университете раньше всех и никто не мешал мне читать мейлы о Linux.