Вниманию читателей предлагается перевод статьи «Whatever happened to the Hurd? — The story of the GNU OS», опубликованной в журнале Linux User & Developer в декабре прошлого года.
Работа над операционной системой GNU ведется без малого тридцать лет — с 1983 г. Впервые интерес к микроядру Mach, которое разрабатывалось в университете Карнеги-Меллон (CMU), в качестве ядра своей операционной системы Фонд свободного программного обеспечения (FSF) проявил еще в 1987 г., но его исходный код не распространялся под подходящей лицензией вплоть до 1991 г. К тому времени Линус Торвальдс уже занимался своим собственным проектом по разработке ядра для IBM-совместимых компьютеров на процессоре i386.
Если бы в свое время Linux не был написан и опубликован под GPLv2, если бы не вписался столь удачно в окружение уже существующих компонентов GNU и не захватил умы и сердца разработчиков по всей планете, — кто знает, быть может, вся «движуха» сосредоточилась бы вокруг Hurd, и мы бы сейчас жили в несколько ином мире. Но на судьбу Hurd повлияли не только стремительный рост популярности Linux или сделанная FSF ставка на микроядро Mach.
По своей сути, архитектура Hurd — это попытка воплотить в программном коде дух и перспективы движения за свободу программного обеспечения. Вот слова одного из сотрудников FSF тех времен: «Наверное, можно сказать, что когда мы проектировали Hurd, у нас дух захватывало от того, что происходило вокруг. Движение за свободу программного обеспечения всегда было (и есть) о том, чтобы пользователи перестали быть зависимы от прихотей производителей „софта“. Микроядерная архитектура Hurd, устройство и взаимодействие демонов, — если провести аналогию, — давала такую же свободу простым пользователям системы: вы больше не обязаны подчиняться системному администратору, его драконовским политикам и правилам. Каждый пользователь мог (безопасно для самой системы и других пользователей) запустить любой набор демонов, создавая нужное ему или ей рабочее окружение, ни о чем не спрашивая администратора системы.»
Просто большой чулан
Ричард Столлман заявил о намерении написать полноценную Unix-подобную операционную систему, названную им GNU (рекурсивная аббревиатура GNU's Not Unix!), в сентябре 1983 г. За это время (до зарождения Hurd) были написаны компоненты системы и инструментарий, которые были необходимы для разработки ядра: редакторы и компиляторы, Bash, Make, Autoconf, Emacs, GCC, sed, gawk и др.
GNU окупала себя, продавая программные продукты. Когда началась работа над Hurd, FSF стала нанимать разработчиков. «Это было задолго до эры широкополосного интернета, и чаще всего люди работали на текстовых терминалах, через модем. Обычно мы делили один офис; если бы вы его увидели, то подумали, что он больше похож на большой чулан. В то время мы были гостями в MIT.»
Линус Торвальдс анонсировал свою «свободную операционную систему (просто хобби, ничего такого профессионального как GNU) для 386 (486) AT-клонов» в конференции comp.os.minix за несколько месяцев до начала работы над Hurd. Линус выбрал модель монолитного ядра, от которой воротили нос пуристы, но которая дала возможность быстро получить рабочее ядро.
Linux понравился хакерам, энтузиастам и ученым, многие из которых стали активно участвовать в разработке. Ядро привлекало их своей открытостью, свободной лицензией и тем, что его можно было запустить практически на любом имеющемся устройстве. Linux «поймал волну», сообщество разработчиков росло удивительно быстро. Работа над Hurd продолжалась, но далеко не с той же активностью. Людям было интереснее заниматься GNU/Linux, а не GNU Hurd.
Идеалистическая философия
С точки зрения пользователей, Hurd было еще расти и расти, а Linux, благодаря усилиям разработчиков, прочно занял место в качестве «сердца» операционной системы GNU. По началу Столлман относился к этому скептически. Ранние версии Linux работали только на IBM 386; по словам самого Столлмана, «мы слышали, что Linux практически не портируем (сейчас это не так, но тогда так говорили), и, кроме того, Linux по своей архитектуре похож на ядро Unix. Мы же пишем нечто значительно более мощное и продвинутое.»
Linux был тесно завязан на GCC и инструментарий GNU, все более развивался и «матерел», особенно с появлением дистрибутивов, и вскоре FSF стала рассматривать его в качестве приемлемой (пусть не самой оптимальной и временной) замены все еще несуществующего ядра операционной системы GNU. Столлман сразу внес ясность: «Не существует операционной системы, которая называется Linux. Операционная система Linux — это GNU. Linux это всего лишь программа: ядро. Ядро — это часть операционной системы, самая низкоуровневая программа, которая управляет другими программами, выделяя им процессорное время и другие ресурсы.»
Он настаивал, чтобы операционная система GNU с Linux в качестве ядра непременно называлась GNU/Linux, чтобы «люди понимали, что система существует благодаря идеалистической философии. Назовите ее Linux, и вы нарушите философию. Это очень серьезная проблема. Linux — это не система, а всего лишь ее часть… Именно благодаря той идеалистической позиции, на которой основывается проект GNU, у нас есть эта система.»
Работа над Hurd продолжалась, но вскоре стало очевидно, что FSF ступила на тернистый путь в своих поисках совершенства. Микроядро требовало решения ряда довольно непростых проблем, а многие их тех, кто мог бы за это взяться, были заняты в работе над Linux, которым уже можно было плодотворно пользоваться. Несмотря на известную критику, например со стороны Энди Таненбаума, выбор Линуса монолитной модели ядра позволил получить рабочую систему намного проще и быстрее.
Позже Столлман признал, что «несет всю ответственность за техническое решение разрабатывать ядро GNU на основе Mach, из-за чего так замедлилась разработка системы. Я полагал, что использование Mach позволит нам сэкономить время, но оказался неправ.» В последующие годы Hurd был портирован на различные микроядра, от L4 до Coyotos и Viengoos, но никогда не мог он похвастаться той поддержкой сообщества и теми ресурсами, которыми располагал (и располагает) Linux.
Принцип и обязательство
В конце девяностых в сообществе произошел раскол, обусловивший появление EGCS (произносится как eggs) — ответвления GCC, целью которого было отстраниться от руководства FSF разработкой, и Open Source Initiative (OSI) для продвижения менее радикальных и бескомпромиссных взглядов и идей открытого программного обеспечения.
«Главное, в чем они [OSI] стремились отличаться от FSF, это то, что они не осуждали закрытые программные продукты и не заявляли о себе как о движении за свободу, а развивали идеи о том, какие экономические преимущества может принести добровольная работа энтузиастов бесплатно, just for fun.» Но некоторые видели «ее основной целью — попытаться политически маргинализировать Столлмана; и попытке в чем-то небезуспешной.»
О выходе Hurd стали говорить в 1994 г., когда вроде бы удалось запустить Emacs; в качестве даты релиза указывался 2001 г., но этого так и не случилось. Когда в 2005 г. Hurd портировали на L4, Маркус Бринкман сказал, что «теперь мы можем с легкостью исследовать и развивать систему так, как мы захотим», но был вынужден признать, что «я могу собирать простые приложения, используя мой порт glibc, но большинство из них не запускаются, т.к. им требуются файловая система или, скажем, вызовы fork и exec, а у меня там пока только заглушки.»
В середине девяностых на сцене появляется Debian, который благодаря Debian Guidelines, написанных Брюсом Перенсом, становится носителем и выражением «общественного сознания» FOSS-движения, в то время как FSF во многом отстранилась от разработки GNU, сосредоточившись главным образом на политических проблемах движения.
С 1998 г. Debian GNU/Hurd — один из активных проектов Debian, выпускающий инсталляционный и live CD-диски, может рассматриваться как эталонная версия Hurd, однако до сих пор не имеет статуса официального релиза. Качество кода Hurd все еще не позволяет применять его для решения сколько-нибудь реальных задач, поддержка железа также весьма ограничена — но его можно полноценно запустить в виртуальной машине, попробуйте.
Когда-то FSF платила программистам за работу над проектами GNU, теперь же большинство из них — это волонтеры или сотрудники компаний, которые заинтересованы в проектах типа GCC и, соответственно, спонсирующие их. Hurd практически выпал из поля зрения, ведь есть Linux, который работает уже здесь и сейчас, так что особой нужды в еще одном ядре нет. Но принцип и обязательство никуда не делись, и, возможно, в будущем идеи GNU Hurd вновь окажутся востребованными.
Alix — истинное ядро GNU
Ричард рассказывает историю, что ядро GNU изначально не должно было называться Hurd.
«Сначала я назвал его Alix (Аликс), так звали мою девушку в то время. Она была системным администратором Unix и как-то обратила внимание на то, что ее имя схоже с названиями многих Unix-систем. Друзьям она в шутку сказала, что „кто-то должен назвать ядро в честь меня“. Я тогда ничего не сказал, но решил, что сделаю ей сюрприз и назову ядро Alix.»
«Впрочем, название не прижилось. Майкл (теперь Томас) Бушнелл, главный разработчик ядра, предпочел имя Hurd, а имя Alix досталось одной из подсистем ядра — той, что перехватывала системные вызовы и обрабатывала их, обмениваясь сообщениями с серверами Hurd.»
«Какое-то время спустя Аликс и я расстались; она сменила имя. Вместе с тем (но независимо) в архитектуре Hurd произошли изменения, и библиотека C стала посылать сообщения серверам напрямую, что сделало компонент Alix ненужным, и он был удален.»
«Но прежде, чем все это произошло, кто-то из ее друзей наткнулся на ее имя в исходниках Hurd и сообщил ей об этом. Так что у нее была возможность найти ядро, названое в ее честь.»
Бушнелл выбрал имя Hurd отчасти из-за того, что получается похоже на «стадо антилоп», отчасти из-за того, что Hurd — это рекурсивная аббревиатура «Hird of Unix-Replacing Daemons», а в свою очередь Hird — это «Hurd of Interfaces Representing Depth». Он говорил, что «мы, насколько мне известно, первый программный продукт, название которого — это пара взаимно-рекурсивных аббревиатур.»
Томас Бушнелл в настоящее время — разработчик Debian и грегорианец.
На переднем крае
В отличие от Linux — монолитного ядра, Hurd использует микроядро, и почти вся функциональность вынесена из пространства ядра в пользовательское пространство. Микроядро — всего лишь прослойка между «железом» и всем остальным, чем обычно занимается монолитное ядро.
В 1996 г. Томас Бушнелл, один из основных архитекторов Hurd на раннем этапе, опубликовал свои идеи в статье «Towards a New Strategy of OS design».
«GNU Hurd, — пишет он, — спроектирован так, чтобы системный код был как можно более ограничен. Программы будут взаимодействовать только с несколькими подсистемами, все остальные части системы динамически заменяемы. Пользователи вольны задействовать их по своему усмотрению, смогут подключать новые компоненты для других пользователей. Нет никакой необходимости в предварительном установлении доверия при взаимодействии между пользователями (т.е. сервисами друг-друга). Система не подвергается уязвимости, „доверяя“ сервисам произвольных пользователей.» На практике это означает, что пользователям не нужно обращаться к некоему супер-пользователю (root) и ждать, пока тот примонтирует файловую систему или загрузит нужный драйвер устройства (как это было в Linux до недавнего времени, пока там не стали появляться некоторые из полезных особенностей микроядер).
«Уже в то время было понятно, — вспоминает один из сотрудников GNU, — и это обсуждалось в академических кругах, что микроядерная архитектура будет иметь проблемы с производительностью (связанные, главным образом, с большим числом переключений контекста из-за необходимости обмена сообщениями между демонами, по сравнению с традиционной обработкой системных вызовов в монолитных ядрах). [Ричард] Рашид, исследователь из CMU, в своей работе предположил, что эта проблема не настолько серьезная. Тогда казалось, по крайней мере мне, что мы здесь в GNU, при скудном финансировании, умудряемся не только программировать и бороться за свободу, но и одними из первых воплощать в жизнь самые последние академические исследования computer science. Во всяком случае, задумка была такая, и мы очень гордились собой и вообще были рады быть в том месте и в то время.»
Hurd был замечательным приключением и экскурсом в самые выдающиеся достижения теории операционных систем своего времени. Целью GNU было стать одновременно Unix-подобной операционной системой и чем-то похожим на Лисп-машины, классические однопользовательские рабочие станции, появившиеся в AI Lab MIT, одном из главных очагов хакерской культуры, из которого вышел и Столлман. «Emacs (с его Lisp-расширениями) определил парадигму для проектирования интерактивных программ. Сначала даже предполагалось, что оконная система тоже будет основана на Lisp.»
«Одно из ранних изменений в концепции GNU произошло, когда стало ясно, что X11 работает довольно неплохо, не „загнется“ и будет свободной программой. Чисто практический вывод: надо брать и пользоваться.»
Что еще могло бы быть
Когда GNU только зарождался, очевидным решением было найти готовое ядро, которое уже находилось бы в общественном достоянии.
Первым выбором Ричарда был TRIX, который разрабатывался в его родном MIT и упоминается в манифесте GNU. «У нас есть прототип ядра, но для полноценной эмуляции Unix еще многого не хватает, — писал он в 1984 г. — Когда мы закончим ядро и компилятор, мы сможем распространять систему GNU, под которую можно будет писать программы.» В декабре 1986 г. программисты GNU все еще продолжали «допиливать TRIX», а в следующем году Столлман стал интересоваться Mach.
Рассматривались и другие идеи, например, использование операционной системы Беркли Sprite и ядра BSD. «RMS был большим и последовательным приверженцем использования как можно большего количества готового кода (как я считаю, зря)», — вспоминал позднее Томас Бушнелл.
«Я бы сразу взял BSD 4.4-Lite и собрал ядро на ее основе. Я хорошо знал этот код, знал, что и как надо делать. Теперь мне очевидно, что у нас бы все замечательно получилось, и мир сегодня был бы совсем другим. RMS хотел сотрудничать с людьми из Беркли в этом направлении. Кто-то из них в самом деле был в этом заинтересован, но были и те, кто сознательно затягивал процесс. Сейчас мне кажется, что это было из-за из их собственных планов по запуску BSDI, для которой основанная на BSD 4.4-Lite GNU система была бы совсем нежелательным конкурентом.»
По словам Бушнелла, в итоге Столлман решил, что «Mach — полностью рабочее ядро, 4.4-Lite же готово только частично. Мы выбираем Mach.»
Автор: danfe