История зарождения Linux — как это было?
25 августа 1991 года, ровно 31 год назад, в USENET-конференции comp.os.minix появилось сообщение от молодого человека по имени Линус Бенедикт Торвальдс о том, что он создал бесплатную операционную систему для 386 и 486-совместимых ПК, с отдельным примечанием: в качестве хобби, новинка не претендует на лавры серьезного профессионального проекта вроде GNU. Так началась история Linux. Официальные источники гласят, что к творчеству Торвальдса сподвигли лицензионные и функциональные ограничения ОС MINIX, в которой он тогда работал. Кое-где даже упоминается, что он вдохновлялся книгой создателя MINIX профессора Эндрю Таненбаума «Операционные системы: разработка и реализация» (Operating Systems: Design and Implementation). Однако изучая историю Linux, я случайно наткнулся на воспоминания однокурсника Торвальдса — Ларса Вирзениуса, вовлеченного в разработку Linux с самых первых дней существования этого проекта. Ларс рассказывал эту историю из «первых рук», причем излагал ее немного не так, как она описана в «Википедии».
То самое историческое сообщение в группе comp.os.minix
В 1988 году Ларс Вирзениус окончил среднюю школу и поступил в Хельсинкский университет на факультет информатики. В сентябре его пригласили в клуб для шведоговорящих студентов «Спектрум», где состояли ребята, интересующиеся информатикой, физикой, химией и другими точными науками. Там он и познакомился с Линусом Торвальдсом. По воспоминаниям Вирзениуса, в университете было несколько компьютерных классов, в которых стояли «маки» и персоналки с MS-DOS, а также терминалы, подключенные к мейнфрейму VAX/VMS. Среди этого великолепия обнаружился один-единственный старенький компьютер от DEC с операционной системой Ultrix — одной из версий BSD Unix. MS-DOS не нравилась Ларсу своими ограниченными возможностями, графический интерфейс Mac OS показался ему неудобным, и он оккупировал машину с Ultrix. Однажды, работая в терминале, Вирзениус опечатался в команде «rm», набрав вместо нее «rn» — и совершенно случайно открыл для себя мир конференций USENET, где общались тысячи IT-специалистов и компьютерных энтузиастов с разных уголков нашей планеты. Своей необычной находкой Ларс поспешил поделиться с Линусом Торвальдсом.
Один из циклов в университете Хельсинки был посвящен программированию на С в Unix. К тому моменту Вирзениус неплохо знал С, Торвальдс тоже умел программировать на этом языке, при этом оба были постоянными участниками конференции comp.lang.c, сообщения которой они читали с университетского компьютера DEC. Поэтому содержание лекций казалось им не слишком интересным — значительная часть теории была им уже знакома. Ларс и Линус сдавали лабораторные работы экстерном, соревнуясь между собой, кто уложит очередную программу из учебного задания в меньшее количество строк кода. Гораздо большее удовольствие друзьям доставляли эксперименты с университетской машиной: Ларс разработал аналог демона Cron, чтобы выгружать почту в USENET-конференции по расписанию, а Линус написал код для поддержки Postscript-принтера в Ultrix.
На рождество 1990 года Торвальдс решил сделать себе подарок: он взял льготный студенческий кредит и 5 января купил 386-й компьютер. На этот компьютер Торвальдс действительно установил MINIX, но основной проблемой, которая злила и бесила его, было отсутствие в этой системе нормальной поддержки многозадачности. Больше всего Торвальдс хотел организовать модемный доступ со своей личной «трёшки» на университетский компьютер DEC, чтобы комфортно читать из дома любимые конференции USENET, но ни одна из существовавших тогда терминальных программ его не устраивала — в каждой чего-нибудь, да не хватало. Перепробовав кучу вариантов, Торвальдс начал писать собственный терминал. Причем он пошел нестандартным путем: вместо того чтобы использовать довольно ограниченные возможности MINIX, он решил, что его программа будет работать с «железом» напрямую, не опираясь на ресурсы ОС. Первая версия поддерживала два потока: один считывал нажатия клавиш и передавал их в последовательный порт, второй слушал последовательный порт и транслировал данные в терминал. После того, как Торвальдс добавил в свою программу поддержку набора команд VT-100, используемых в терминалах DEC, у него получилась софтина, вполне пригодная для обмена сообщениями в конференциях USENET из дома.
Однако настоящий перфекционист редко останавливается на достигнутом — Торвальдс принялся совершенствовать терминал, добавляя туда поддержку команд sh и функций многозадачности, начав с переключения между потоками. Линус написал подсистему вывода сообщений USENET на принтер и модуль управления памятью, и уже не мог остановиться. Терминал стремительно разрастался, превращаясь в ядро новой ОС: вскоре он обзавелся собственным драйвером жесткого диска и драйверами файловой системы, — из-за того, что Линусу нужно было как-то сохранять на диск скачанные из USENET через терминал файлы. Этими драйверами и модулями Торвальдс понемногу заменял стандартные компоненты операционной системы. Постепенно, день ото дня, MINIX на его компьютере мутировал в Linux. Правда, изначально проект назывался по-другому: Торвальдс придумал смешное словечко «Freax» — сборную солянку из слов «Free» «Freak» и «Unix», и попросил администратора сайта ftp.funet.fi Ари Леммке выложить на этот портал исходники его терминала. Но Леммке решил назвать папку на сервере по имени автора софта, добавив к нему окончание от «Unix» — получилось «Linux». Название прижилось, хотя строку «Freax» все еще можно найти в makefile ранних версий ядра Linux.
Ларс Вирзениус вспоминает, что первую версию Linux невозможно было установить в обычном понимании этого слова. На компьютере Торвальдса Linux зародился сам собой путем добавления и замены различных модулей MINIX, а первая попытка поставить систему на компьютер Вирзениуса не увенчалась успехом. Торвальдс возился несколько часов, при этом установка потребовала ручного редактирования секторов диска в шестнадцатеричном формате. В конце концов Линус справился с этой задачей, и в итоге сумел собрать на дискете дистрибутив, пригодный для инсталляции на других ПК почти без применения черной магии.
Зимой 1991 года Торвальдс добавил в Linux поддержку виртуальной памяти, что значительно повысило практическую пользу ОС. Тогда же вместе с Вирзениусом он создал собственную группу в USENET — alt.os.linux, которая стала местом притяжения первых пользователей и евангелистов новой системы. В 1992 году был запущен проект документирования Linux — он начался с файла README, который Ларс написал лично, чтобы помочь людям самостоятельно скомпилировать ядро. Регулярно возникающие технические сбои только подстегивали процесс разработки. Так, по словам Вирзениуса, проблемы в сетевом стеке Linux приводили к генерации паразитного трафика, из-за чего Linux запретили использовать в университетской сети. Это заставило Торвальдса вплотную заняться решением данного вопроса: как следствие, реализация стека протоколов TCP/IP была переписана практически полностью в очень сжатые сроки. У какой-нибудь корпорации вроде Microsoft на это ушли бы месяцы.
В 1997 году Линус Торвальдс покинул университет, был принят на работу в Transmeta и переехал в США, после чего Ларс Вирзениус потерял его из вида. Но его рассказ немного проясняет историю появления Linux, добавляя в нее несколько новых интересных деталей. Получается, Linux появился на свет не из-за амбиций разработчика, желавшего сделать «MINIX лучше самого MINIX», а как следствие скромного желания читать почту в любимых конференциях, не покидая пределы родного дома. Как говорится, великие вещи порой рождаются случайным образом, но для их появления на свет все равно нужны талант и упорство.