Essays:Как Linux стал крупнейшим проектом по разработке свободного ПО
Автор: Евгений Голышев
В 2021-м Linux отметил две знаменательные даты – 30 лет со дня анонса в телеконференции Usenet, посвященной операционной системе Minix, рабочего прототипа новой операционной системы на базе ядра, разработанного студентом Хельсинского университета Линусом Торвальдсом[1]; и 30 лет со дня выхода в свет исходного кода первой публичной версии этого ядра за номером 0.01[2]. Сегодня, спустя 30 лет, под управлением Linux'а работает каждая уважающая себя микроволновка. Однако этот проект стал успешным не благодаря каким-то уникальным техническим решениям, а уникальной модели разработки и стечению обстоятельств, о которых я и предлагаю сегодня поговорить. С одной стороны, большинство вещей, о которых я собираюсь рассказать в этой статье должны быть хорошо знакомы многим пользователям GNU/Linux-систем и тем, кто просто интересуется историей развития программного обеспечения, но с другой стороны, этим рассказом я хотел бы обратить ваше внимание на то, как глубоко коренятся причины успеха, и как сильно выдающиеся люди зависят от обстоятельств.
На плечах гигантов
К началу работы над Linux'ом у Торвальдса было все необходимое для его разработки. Что касается технических средств, то к этому времени компилятор GCC от Проекта GNU уже стал суперзвездой в мире программного обеспечения. С самого начала GNU задумывался как проект по разработке свободной операционной системы, но его автор, Ричард Столлман, начал разработку своей операционной системы с технологической базы – инструментов разработки, таких как редактор кода, компилятор и отладчик – без которых создание свободной операционной системы было бы немыслимым. Когда технологическая база была готова, Проект GNU переключился на разработку ядра будущей свободной операционной системы, которое получило название Hurd. Кстати о названии. Проект GNU дает рекомендацию по его произношению, согласно которой следует говорить английское слово «herd» (стадо). Тем не менее, русскоговорящие коллеги иногда предпочитают произносить это название с ньюкасловским акцентом как «хурд».
Что касается учебного пособия, необходимого Торвальдсу для работы над своим проектом, то им стала вышедшая в 1987-м книга профессора Амстердамского свободного университета Эндрю Таненбаума под названием «Операционные системы: разработка и реализация» (ориг. Operating Systems Design and Implementation). В этой книге в качестве примера рассматривалась разработанная Таненбаумом операционная система Minix.
Minix как отправная точка
Minix в то время была исключительно учебной операционной системой и Таненбаум хотел, чтобы она таковой и оставалась. Это негативно сказалось, во-первых, на условиях распространения ее исходных текстов – операционная система не была свободной, и во-вторых, на ее пригодности для конечного пользователя – Minix была намеренно изуродована по словами Торвальдса. Но именно несвободный характер операционной системы мешал ей стать пригодной для повседневного использования, т.к. заинтересованные в ее доработке хакеры были сильно ограничены в своих правах. Но справедливости ради хочу добавить, что Таненбаума нельзя винить за решение в то время сделать Minix несвободной. Дело в том, что Столлман сформулировал четыре базовые свободы, которые должны идти в комплекте с любым свободным программным обеспечением, всего лишь за год до публикации книги Таненбаума, т.е. в 1986-м. Таким образом, к моменту выхода книги в свет и публикации исходных текстов операционной системы идеи свободного программного обеспечения еще не успели укорениться в головах людей, которые стояли за этими проектами. Но давайте на минуту себе представим параллельный мир, в котором Таненбаум каким-то чудесным образом принял решение сделать исходный код Minix'а общественным достоянием. В этом мире Торвальдс установил себе на машину эту операционную систему и приятно удивился тому, насколько она удобна для повседневного использования, т.к. ее регулярно улучшало дружное сообщество хакеров. Таким образом, в этом мире у него не было повода начинать работу над Linux'ом. Но в нашем мире сразу после установки себе на машину Minix'а Торвальдс столкнулся с тем, что эмулятор терминала, который предлагала операционная система, не был пригоден для решения его задач. По его словам, терминал нужен был ему для подключения к университетскому компьютеру, чтобы работать с мощной Unix-системой или просто выходить в онлайн. Так, Торвальдс решил написать собственный эмулятор терминала, опираясь прямо на аппаратный уровень. Результат этой работы стал позднее известен как Linux.
Превращение ядра в свободное ПО
Торвальдс чуть не попался в ту же ловушку, что и Таненбаум: первые версии Linux'а не были свободными, т.к. запрещали использование ядра в коммерческих целях. Идеи свободного программного обеспечения к моменту публикации первых версий Linux'а уже насквозь пронизывали хакерское сообщество, но Торвальдс боялся, что какая-нибудь компания отберет у него его детище и станет бессовестно на нем зарабатывать. В то же время Торвальдс чувствовал себя обязанным сообществу за компилятор GCC. В итоге чувство долга взяло верх и Торвальдс сменил лицензию на GPL. Позднее в своей автобиографической книге он написал: «...я чувствовал, что иду по стопам всех тех ученых, которые столетиями строили свои теории на базе других – на плечах гигантов, говоря словами Исаака Ньютона».
Это было судьбоносное решение – не сделай Торвальдс вовремя исходный код своего проекта свободным, Linux не успел бы нарастить вокруг себя сообщество, которое и превратило его в крупнейший проект по разработке свободного ПО, но в самый ответственный момент интуиция не подвела Торвальдса.
Немаловажную роль также сыграл и тот факт, что Торвальдс на момент создания своего ядра находился в финансово комфортных условиях – семья обеспечивала его всем необходимым, хотя была небогатой. В той же автобиографической книге Торвальдс позднее рассказал, что на нем висело тысяч пять долларов в студенческих ссудах, и примерно 50 долларов в месяц нужно было выкладывать за компьютер. Но никто не требовал от него в те годы приносить деньги, а Торвальдсу, по его словам, это и в голову не приходило.
Создание модели разработки ядра
Linux начал набирать популярность с самых первых версий именно благодаря лицензии GPL, на условиях которой распространялся его исходный код – лицензия позволяла каждому желающему принять участие в разработке. Однако свободный характер проекта не стал единственной причиной его успеха, но стал трамплином для другого изобретения Торвальдса. Как сказал известный хакер Эрик Реймонд: «Я думаю, самый умный и значимый хак Линуса это не создание ядра, а создание модели разработки ядра». Именно эта модель и вдохновила Реймонда написать его знаменитое эссе под названием «Собор и Базар».
«Собор» и «базар» – это две противоположные модели разработки. Реймонд в своем эссе связывает успех Linux'а с приверженностью Торвальдса базарной модели: он позволяет всем желающим работать над ядром и вмешивается только в спорных ситуациях. Таким образом, своей задачей он видит не контроль над процессом, а поддержку идей. Но стоит заметить, что компилятор GCC стал в свое время не менее успешным, хотя Столлман придерживался соборной модели при его разработке. Таким образом, одна модель не лучше и не хуже другой. Они просто есть и, на мой взгляд, важно научиться их отличать друг от друга.
Появление GNU/Linux
С ростом популярности Linux'а стали появляться и первые системы на его базе, как нельзя лучше демонстрируя, что ядро, которого не хватало Проекту GNU для создания свободной операционной системы, было наконец готово. Таким образом, цель Проекта GNU была достигнута, но на этот раз уже без него, и разработчики Hurd'а оказались не у дел.
Первые системы на базе ядра Linux не отличались хорошим качеством, несмотря на то, что некоторые из них продавались за деньги. Очевидно, что для дальнейшего роста сообщества Linux нужна была по-настоящему качественная операционная система на его базе, но Торвальдсу не было до этого никакого дела – он был всецело поглощен разработкой ядра и управлением сообществом разработчиков этого ядра. Возможно такой подход – одно из проявлений его гения: понимая, что запрос на качественную операционную систему уже сделан, и оставалось только дождаться подходящего предложения, Торвальдс продолжал заниматься тем, что у него на тот момент лучше всего получалось. Но как бы там ни было на самом деле – понимал он это или нет, – но все сложилось как нельзя лучше, и Ян Мердок с Ричардом Столлманом вовремя включились в общее дело. Так, 16-го августа 1993-го Мердок, будучи еще никому неизвестным студентом Университета Пердью, анонсировал свой проект по созданию системы, которая, по его словам, будет достойна называться Linux'ом[3]. Столлман, в свою очередь, предложил Мердоку финансовую и моральную поддержку для того, чтобы его проект состоялся. Система позднее стала известна под именем Debian. Так началась эпоха GNU/Linux, в которой уже не было место Hurd'у.
Примечательно, что Мердок заимствовал распределенную модель разработки ядра у Торвальдса и сумел ее адаптировать к Debian'у. Таким образом, Debian был разбит на модули, названные программными пакетами (или просто пакетами), над которыми независимо друг от друга могли работать разработчики, названные сопровождающими. Позднее уже эту адаптированную версию модели разработки стали заимствовать у Мердока другие разработчики дистрибутивов, пока она не стала стандартом в дистростроении.
Подход Hurd: микроядро или ничего
Но все-таки как финский студент смог опередить команду профессиональных разработчиков, получавших за свой труд деньги, за плечами которых уже был опыт работы над другими проектами GNU, такими как компилятор GCC, отладчик GDB и редактор кода Emacs?
Успех Linux'а и провал Hurd'а кроются в размахе двух проектов. Торвальдс, будучи непрофессиональным разработчиком, выбрал самый простой путь разработки своего ядра – монолитную архитектуру – именно ту, которая использовалась в ядре оригинальной UNIX, и уже через полгода получил первый рабочую версию Linux'а. Разработчики Hurd'а, напротив, решили не искать легких путей и выбрали микроядерную архитектуру для своего проекта. Ее суть заключается в том, что в привилегированном режиме работает не весь код ядра, а только его малая часть, которая необходима для решения задач управления ресурсами и предоставления механизмов общения между сервисами, которые, в свою очередь, работают в менее привилегированном режиме и реализуют остальные функции, такие как драйверы устройств, файловые системы и т.д. Преимущество этой архитектуры – в отказоустойчивости: если в коде какого-нибудь драйвера возникает ошибка, то она не приводит к краху всей системы. Но за это преимущество приходится платить повышенной сложностью разработки. Разработчики Hurd'а об этом, конечно, знали, но уровень сложности сильно недооценили. Однако это только полбеды – ошибка в выборе архитектуры не могла стать роковой. В конце концов, разработка Hurd'а велась на протяжении года, пока не пришел Торвальдс. Другими словами, за это время можно было успеть поменять курс. Но вместо этого Столлман предпочитал слушать отчеты о неторопливой разработке Hurd'а до тех пор, пока движуха вокруг Linux'а не достигла планетарного масштаба.
Разработчики Hurd'а сделали ставку на сложной архитектуре, которая в итоге и потопила проект, а модель разработки Linux'а стала одним из ключевых факторов его успеха. Удивительно, но это не означает, что работа над Hurd'ом не ведется до сих пор – она ведется, хотя уже в вялотекущем режиме. Силами сообщества даже развивается неофициальный порт Debian, в котором ядро Linux заменено на ядро Hurd. Пользователям в этом порте доступно примерно 70% от общего количества пакетов, являющихся частью Debian.
Что же стало с Minix?
Что касается Minix'а, то 3-я версия этой операционной системы ознаменовала уход Minix'а от решения чисто академических задач. В 2009-м Таненбаум даже получил грант от Европейского исследовательского совета в размере 2.5 млн. евро на дальнейшую работу над своей операционной системой[4]. Тем не менее, Minix'у не удалось сколь-нибудь заметно потеснить Linux.
Заключение
Автобиография Торвальдса, на которую я пару раз ссылался, называется «Just for fun. Рассказ нечаянного революционера». «Нечаянный» или в оригинале «accidental» в значении «случайный» – это прямая противоположность того, что произошло на самом деле. Обстоятельства сложились как нельзя лучше для того, чтобы подкинуть Торвальдсу возможность устроить эту революцию. И он не упустил эту возможность. Но история успеха его другого проекта – системы управления версиями Git – совершенно непохожа на историю успеха Linux'а, что намекает на то, что Торвальдс не просто талантлив, а гениален. Но это уже другая история, которую, я надеюсь рассказать вам в другой раз.