Глава из книги Сага о FreeBSD
Алексей Федорчук
2008-10-08
В Беркли UNIX попал в условия открытого общения специалистов в области Computer Science самого разного ранга, от профессоров, начиная с Фабри, до аспирантов — именно такой статус имели во второй половине 70-начале 80-х годов прошлого века Билл Джой (Bill Joy, в последующем один из основателей компании Sun), Маршалл Керк МакКузик (Marshall Kirk McKusick), Озалп Бабаоглу (Özalp Babaoğlu). Их усилиями, вкупе с другими сотрудниками университета, система UNIX медленно, но верно превращалась именно в то, чем она стала ныне. Достаточно сказать, что на счету "ранних берклианцев" разработка системы управления виртуальной памятью, концепции сокетов для взаимодействия между процессами, текстовый редактор vi, ставший в лице своих клонов elvis и Vim неотъемлемой частью всех Unix-подобных систем, и командная оболочка C-shell (csh), положившая начало интерактивным методам работы в командной строке.
Нам, избалованным мощными и красивыми текстовыми редакторами для графического режима (или, по вкусу, изощрёнными возможностями нынешнего Vim'а), современными командными оболочками типа bash и zsh, трудно сейчас оценить, какую роль в дальнешем развитии Unix-подобных систем сыграли vi и csh, выглядящие сегодня столь невзрачными.
Однако представьте, что в вашем распоряжении до сих пор была альтернатива из строчного редактора ed без всяких интерактивных возможностей, а также громоздкого и во многом непонятного GNU Emacs (разработка которого, кстати, началась лишь на несколько лет раньше создания vi). И вдруг в одночасье вы получаете в свое распоряжение легкий, универсальный (то есть работающий на всех терминалах, и работающий абсолютно одинаково), простой (да-да, vi в базовой своей части чрезвычайно прост — если воспринимать его именно таким, каким он является) интерактивный редактор. Да к тому же гарантированно имеющийся на любой Unix-машине.
А чтобы осознать, что привнёс с собой csh в командную строку, просто попробуйте поработать сколько-нибудь продолжительное время в /bin/sh, являющейся оболочкой по умолчанию для обычного пользователя во FreeBSD. Выполняя при этом действия хоть на гран сложнее, чем ls и cd. А ведь /bin/sh — это POSIX-шелл, основанный на шелле Корна, до интерактивных возможностей которого первичному для UNIX шеллу Борна, по свидетельству очевидцев, — что до Пекина раком...
Впору ли не воздать должное создателю обеих этих программ Биллу Джою?
Сотрудники Беркли оказались первыми и в организации распространения результатов своих работ. Этой цели служила Berkely Software Distribution или, сокращённо, BSD — система распространения разработанного в университете софта на магнитных лентах, от которой в конечном итоге происходит всё многообразие форм BSD- и Linux-дистрибуции.
Первые выпуски BSD (1BSD и 2BSD), вышедшие в 1978 году, ещё не представляли собой цельных систем, а содержали лишь набор утилит и приложений собственной разработки. О какой-либо системной целостности можно говорить, начиная с 3BSD (1979 год) — правда, целостность эта в значительной мере была обусловлена включением компонентов собственно UNIX.
Однако именно выпуск 3BSD послужил причиной тому, что команда UNIX-разработчиков Беркли получает в 1980 году грант упоминавшегося выше DARPA (то есть, в конечном счёте, Министерства обороны США) с целью разработки протокола передачи данных для сети ARPANET, который ныне известен как протокол TCP/IP.
Практически одновременно с получением гранта DARPA Бобом Фабри формируется команда CSRG (Computer System Research Group), которая объединила всех трудящихся университета Беркли (и не только его), связанных с развитием берклианской ветви UNIX. Начиная с октября 1980 года, на протяжении двух с небольшим лет эта группа последовательно выпускает 4BSD, а затем 4.1BSD в нескольких версиях: собственно 4.1BSD — июнь 1981 года, 4.1a, 4.1b и 4.1c (1982—начало 1983 года).
Модель распространения BSD выглядит весьма запутанной для нас, незнакомых с американским юридическим крючкотворством. Все собственно Берклианские разработки распространялись хотя и не бесплатно, но за минимальные деньги (лента 1BSD, например, стоила 50 долларов), причём дальнейшее их использование было практически свободным, в духе позднейшей BSD-лицензии.
Однако те же разработки в составе цельной работоспособной системы, содержащей UNIX-код, требовали лицензирования последнего, что приводило к удорожанию на порядки. Дело доходило до ситуаций, которые кажутся нам смешными: организации покупали лицензию на использование UNIX у Bell Labs, но заказывали и использовали более функциональную систему из Беркли. Несколько напоминает ситуацию с Windows, когда приобретается не программа как товар, а некое мифическое право на её использование, не правда ли? Такое положение вещей, противоречащее здравому смыслу, не могло продолжаться вечно — и скоро мы узнаем, каким образом оно разрешилось.
Пока же вернёмся к развитию BSD-линии. Наконец, в августе 1983 года, была выпущена система 4.2BSD — та самая, на разработку которой собственно и был получен грант DARPA. К этому времени Билл Джой, сыгравший большую роль в разработке предыдущих версий, покинул Университет Беркли и стал соучредителем новой компании Sun Microsystems. На первые же роли в проекте BSD вышли Майк Карелс (Mike Karels) и Керк МакКузик.
Система 4.2BSD аккумулировала в себе как все ранние достижения берклианской мысли, так и разработки, выполненные уже в рамках CSRG и как бы "порционно" появлявшиеся в последовательности версий 4.1BSD. Из которых главнейшими были протокол TCP/IP и новая файловая система FFS (Fast File System). Это и обусловило новизну и своеобразие системы, предопределившей развитие линии BSD на многие годы вперёд.
О значении TCP/IP много говорить не приходится: если вы читаете эти строки, значит, тем или иным образом имеете доступ в Интернет. Так вот, без TCP/IP ничего этого не было бы: ни Интернета, ни доступа к нему, ни, тем более, этой главы, материал для которой по крупицам собирался именно в Сетевых источниках.
А чтобы понять значение FFS, достаточно вспомнить особенности исконной для UNIX файловой системы — s5fs с её ограничением на длину имени файла (14 символов) и количеством файлов на разделе (не более 65 тысяч), отсутствием понятий группировки блоков и, напротив, внутренней их фрагментации, — короче говоря, всего того, что пользователю, например, Linux'а представляется присущим файловой системе от века. Так вот, до появления FFS всего этого не было. И все файловые системы современных Unix'ов, как свободных, так и проприетарных, берут свое начало не от s5fs, а от FFS из Беркли, если не прямо, то опосредованно, через развитие заложенных в ней принципов.
Система 4.2BSD не только предопределила направление развития всех последующих представителей BSD-семейства, но и оказала большое влияние на UNIX "чистой линии". Ведь UNIX от AT&T, за которым со временем закрепилось название System V, развивался и в своей Alma Mater, и во многих других компаниях, лицензировавших его, давая немало клонов, оказавших то или иное влияние на систему в целом. Однако они отмирали, сливались, перекрещивались, и имена их ныне помнят только очевидцы событий и особо интересующиеся вопросом. И постепенно реальностью стало существование двух линий развития Unix: System V в её многочисленных реализациях и BSD. Причём, в силу открытости берклианских разработок, достижения 4BSD (протокол TCP/IP, вариации на тему FFS) быстро инкорпорировались и в System V. Так что, начиная с System V Realese 4 (SVR4), говорить от первозданном Unix уже не приходится.
Именно SVR4 легла в основу большинства современных (то есть ныне здравствующих и развивающихся) коммерческих UNIX-систем, таких, как HP-UX фирмы Hewlett-Packard, AIX от IBM, Sun Solaris, SGI IRIX, SCO Unixware (если последнюю еще можно считать живой), не считая некогда передовых, но прекративших свое развитие систем вроде True64 от в Бозе почившей фирмы DEC. В последующем SVR4 оказала влияние и на развитие Linux, хотя, вопреки утверждениям SCO, между ними нет никакого "кровного родства" в виде общего кода.
Линия BSD тоже давала боковые отростки, в том числе и коммерческие. В их числе SunOS — ранняя операционная система для машин одноименной фирмы на процессорах Sparc, позднее заменённая на Solaris от линии SVR4; или A/UX для Macintosh на процессорах Motorolla 68xxx — да, уже встарь были попытки приобщения Mac'ов к миру Unix, нашедшие в конце концов свое воплощение в современной MacOS X, которая также имеет непосредственное отношение к миру BSD-систем.
Отдельным побегом линии BSD стали микроядерные операционки, в первую очередь Mach, разрабатывавшаяся в Университете Карнеги-Меллона, а затем — в университете штата Юта. Некогда она рассматривалась как прообраз операционных систем будущего, однако на практике возлагавшихся на него надежд не оправдала. Сам по себе проект Mach давно прекратил своё развитие, как и все его прямые отпрыски, Yamit и xMach. Но он, в свою очередь, успел дать несколько потомков косвенных.
Во-первых, на микроядре Mach долгое время базировался перманентный долгострой проекта GNU — Hurd, призванный заменить все прочие операционки FOSS. И хотя ныне Mach в нём заменяется на иное микроядро, L4, завершение этого проекта теряется в той же туманной дали, что и светлое коммунистическое будущее всего человечества.
Во-вторых, микроядро Mach использовалось в легендарной системе NEXTStep, сначала на её собственной аппаратной платформе, затем — на платформе x86. Эта система, опередив свое время, также приказала нам всем жить долго, однако оказала очень большое влияние на последующее развитие всей индустрии персональных компьютеров. И во многом послужила прообразом для позднейшей MacOSX, также основанной на Mach и системных сервисах BSD. Правда, назвать MacOSX микроядерной можно только с очень большой натяжкой...
Наконец, принципы, заложенные в микроядре Mach, оказали влияние на форк FreeBSD — DragonFlyBSD, хотя последняя и не является микроядерной в прямом смысле слова. Впрочем, на эту тему я надеюсь еще поговорить позднее.
Пора опять возвращаться к магистральной линии развития BSD. Каковая после выхода 4.2BSD, оказавшейся переломной в развитии этой системы, приобрела плавно поступательный характер. Новые релизы появляются относительно редко: выход 4.3BSD датируется июнем 1986 года, а её последовательных инкарнаций — 4.3BSD-Tahoe и 4.3BSD-Reno — июнем 1988 и началом 1990 года соответственно.
Выход следующего релиза, 4.4BSD, который готовился как квинтэссенция всей предшествующей Берклиады, был запланирован на 1993 год. И действительно произошел почти в установленные сроки. Однако ему суждено было стать и последним в ряду всех систем линии 4.xBSD: потому что в интервале 1990-1993 года произошло несколько событий, которые в своей совокупности изменили весь ход истории BSD-систем. Да пожалуй, что и всей истории операционных систем вообще. А весь этот период можно охарактеризовать как