Книга: Вопросы истории: UNIX, Linux, BSD и другие

Глава одинадцатая. Начало дистрибуции

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

Был ли дистрибутивом первозданный Linux?

Общеизвестно, что Линус придумал ядро операционной системы имени... нет, не и минеральных источников, а имени себя. И это правда, чистая правда – но не вся правда. Потому что Линус придумал ещё и файловую систему ext (расширение файловой системы MINIX, которая позднее воплотилась в ext2). Кроме того, им или с его подачи был разработан набор низкоуровневых утилит для работы с ядром, его модулями, файловой системой ext – он получил имя linux-utils. Наконец, в рамках реанимированного Линусом метода Тома Сойера Вернер Альмесбергер разработал загрузчик ядра Linux – Lilo (LInux LOader), который затем, до появления GRUB'а, успешно выступал в качестве мультисистемного.

Именно этот комплекс, (почти) способный к самостоятельному существованию, и можно назвать операционной системой Linux в самом узком смысле слова. Однако он существовал не в безвоздушном пространстве. Ибо, с одной стороны, требовал средств управления – им, в силу некоторых причин, стала командная оболочка bash. А с другой – его требовалось чем-то собирать, и в этом качестве выступил компилятор gcc вместе с набором сопутствующих ему инструментов (binutils, make и так далее). И то, и другое было разработано в рамках проекта GNU – что и служит по сей день основанием для именования нашей ОС как GNU/Linux.

Подобно первозданному UNIX’у, Linux изначально являлся типичной «системой для себя». Более того, исходно единственным его назначением была разработка самого же себя – никаких других целей Линус перед собой поначалу не ставил. Да и первые пользователи Linux’а устанавливали (точнее, собирали) систему для того, чтобы её изучать и, по возможности, совершенствовать. Так что ни в каких дополнительных компонентах, кроме ядра, утилит обрамления и инструментария для их сборки, необходимости не возникало.

Установка Linux в те «времена старинные, теперь почти былинные» была задачей не вполне тривиальной даже для опытного компьютерщика (а иные его и не пользовали). И в формирующемся тогда же Linux-сообществе возникла идея облегчить им эту процедуру. В результате чего родилось понятие дистрибутив Linux. Это – система комплектации ядра ОС и его обрамления дополнительными программами и способ её распространения. Она предполагает наличие программы-установщика и средств управления пакетами, то есть теми самыми дополнительными программами.

И уже через несколько месяцев после обнародования Линусом исходников первой (0.01) версии своего ядра, в начале 1992 года, появляются первые наборы программ, которые можно считать прототипами позднейших дистрибутивов Linux – MCC Interim Linux и TAMU. Они представляли собой комплекты разработчика, включающие в прекомпилированном виде ядро, командную оболочку, компилятор со средствами сборки, а также основные пользовательские утилиты, что позволяло развернуть работоспособную систему на «чистой» машине, не несущей никакой иной ОС.

Начало начал

В итоге в октябре 1992 года на свет появляется комплект, который можно назвать первым в истории настоящим дистрибутивом Linux. Он носил имя SLS (Softlanding Linux System) и был разработан Питером Мак-Дональдом. Помимо ядра Linux и утилит обрамления, дистрибутив SLS включал в себя оконную систему X и средства работы с сетью, то есть был уже вполне пригоден для конечного пользователя. Правда, не следует забывать, что конечными пользователями Linux в те годы были исключительно его же разработчики.

Дистрибутив SLS просуществовал недолго – последняя его версия вышла в 1994 году. Однако он лёг в основу целой линии дистроения, протянувшейся в наши дни яркой нитью, и потому о нём стоит сказать подробней.

Дистрибутив SLS распространялся преимущественно на трехдюймовых дискетах, в количестве 20-30 штук. Образы дистрибутивных дискет можно было получить по Сети (у нас – практически только по служебным каналам), а также заказать на CD (хотя CD-приводы в то время на пользовательских машинах были не меньшей экзотикой, чем Интернет на дому).

Одной из знаковых особенностей SLS была схема инициализации в BSD-стиле – хотя в дальнейшем в большинстве дистрибутивов майнстрима возобладал стиль System V, которую Линус заимствовал из первозданного UNIX'а.

Формат бинарных пакетов в SLS был предельно прост – tar-архив, компрессированный с помощью Gzip или compress, возможно – с постинсталляционным сценарием. Для установки и удаления пакетов использовалась утилита sysinstall – предтеча всех последующих систем пакетного менеджмента. Которая не только разворачивала архив и инкорпорировала его компоненты в файловую систему, но и фиксировала его в специальной базе данных – на предмет последующего удаления, если таковое потребуется. Хотя о контроле зависимостей тогда речи ещё и не возникало.

Прекращение разработки SLS связывается с его переходом на формат бинарных файлов ELF вместо общепринятого тогда в Linux и вообще в UNIX формата a.out. Хотя ELF был более «прогрессивен», нежели a.out, тогда это оказалось шагом преждевременным. Но, возможно, дело было просто в потере интереса разработчика к своему произведению – ситуация, с которой мы ещё не раз столкнёмся при знакомстве с историей Open Source.

О SLS ныне мало кто помнит, однако роль его в дальнейшем дистроении трудно переоценить: именно он лёг в основу старейшего дистрибутива из числа доживших до наших дней – Slackware.

Slackware: первый шаг к Linux’у для всех

Итак, дистрибутив SLS умер. Но душа его жила. Ещё в период его активного развития Патрик Фолькердинг принял SLS за основу своей Linux-системы, названной Slackware, первая версия которой была обнародована 17 июля 1993 года и с тех пор успешно развивается по сей день.

Именно со Slackware началась и история Linux-дистрибуции в организационном, так сказать, аспекте. Сразу же после своего появления Slackware, помимо обычных сетевых каналов, начала распространяться на CD известной медиа-фирмой Walnut Creek.

Slackware в своём внутреннем устройстве унаследовала первозданную простоту SLS. И не только унаследовала – именно простоту Патрик возвёл в основополагающий принцип построения системы. Реализация его выразилась в сохранении BSD-стиля инициализации, простого формата пакетов, и «идеологически обусловленного» отказа от контроля их зависимостей.

Создававшиеся чуть позже (но в масштабах эпохи – практически одновременно) дистрибутивы Debian и Red Hat пошли по прямо противоположному пути: всё более усложняющаяся со временем схема инициализации в стиле System V, включение максимально большого количества метаинформации в структуру пакетов и все более изощрённые формы контроля их зависимостей.

Новшествами Slackware были:

   • собственная программа инсталляции – меню-ориентированная, работающая в псевдографическом режиме, похожая по виду и родственная по духу создававшейся в то же самое время утилите sysinstall из FreeBSD;

   • выделение категорий пакетов – базовой системы (A), консольных приложений (AP), средств разработки (D), оконной системы X и ее приложений (X и XAP, соответственно), и так далее;

   • набор утилит для управления индивидуальными пакетами, не предусматривающего, однако, никакого контроля зависимостей.

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

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

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

Этой особенностью формата пакетов Slackware активно пользуются все, у кого возникает к тому желание или необходимость, приспосабливая к ней любые системы управления пакетами. Так, мне доводилось слышать об удачных попытках применения в Slackware системы портов, заимствованой из FreeBSD. Для Slackware поддерживается система pkgsrc – портообразная система, разработанная первоначально для NetBSD. На базе синтеза Slackware и pkgsrc активно развивается несколько дистрибутивов, например, Voltalinux и Draco GNU/Linux.

Механизм apt-get, обеспечивший славу Debian, а в дальнейшем немало способствовавший и популярности семейства Ubuntu, также был адаптирован для использования в Slackware: здесь он получил название slapt-get. На основе синтеза Slackware и пакетного менеджера pacman, происходящего из Archlinux (кстати, во многом – идейного наследника Slackware), возник дистрибутив Frugalware.

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

Debian: второй шаг к пользователю

Дистрибутиву Slackware не долго пришлось оставаться в гордом (почти) одиночестве на своём тернистом пути к пользователю. Скоро этот путь пришлось делить на троих – сначала с Debian, а затем и с Red Hat.

История дистрибутива Debian особенно интересна по четырём причинам. Первая – ее длительность и насыщенность событиями, давшими большое количество инноваций, аккумулированных мировым дистроением. Вторая причина – Debian стал основоположником универсалистской тенденции в дистроении, стремившейся охватить весь океан свободного софта. Третья – Debian стал прародителем максимального количества активно развивающихся клонов. И, наконец, четвертая – некоторые из его потомков сравнились по популярности с родителем, а один (Ubuntu) даже превзошёл его (не это ли мечта всех родителей?).

Debian – или, точнее, Debian GNU/Linux, разработчики настаивают именно на таком его именовании, – был создан в 1993 году Яном Мёрдоком (Ian Murdock), и его название образовано сочетанием имен его жены Деборы (Debora) и самого автора – в то время он был студентом Университета Пэрдью (Purdue). Однако очень быстро вокруг Debian выросло сообщество пользователей и разработчиков, и проект приобрёл общественное значение.

Основной идеей раннего (1993– 1995 гг.) Debian были – модуляризация авторских пакетов, сборка этих модулей в качестве дистрибутивных пакетов с детальным описанием их зависимостей, утилита dpkg для управления оными в масштабе одного отдельно взятого пакета. И, под занавес первого акта, dselect – первая система пакетного менеджмента, достойная претендовать на звание именно системы и представляющая собой front-end к dpkg, обеспечивающий автоматическое разрешение зависимостей и установку целевых наборов пакетов. Эти тендеции получили развитие в дальнейшем.

Универсализм Debian проявился на следующем этапе его развития, начиная с 1996 года, когда Яна, ушедшего после окончания университета на службу мировому капиталу (в компанию Progeny), на посту лидера проекта сменил Брюс Перенс – известный адепт Open Source, автор многочисленных публикаций на эту тему и, по совместительству, – тогда еще и немалый чин в компании Pixar. Каковая, к слову сказать, поучаствовала и в поддержке проекта Debian – в том числе, как мы увидим чуть дальше, и идеями.

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

Кроме того, на время лидерства Брюса пришлась разработка документов Принципы Свободного Программного Обеспечения Debian и Общественный контракт Debian, а также создание принципов контроля качества включаемых в дистрибутив пакетов. Наконец, именно он предложил систему кодовых имён версий дистрибутива (Potato, Woody и другие) – это были персонажи из мультфильма Toy Story, выпущенного компанией Pixar (вот оно, идейное воздействие масс-медиа!). При этом имя Sid, которое носил соседский мальчик, портящий игрушки, было навсегда закреплено за разрабатываемой версией – как символ того, что разработчики новой версии программы в процессе своей работы подчас вынуждены временно «подпортить» версию старую.

В период 1996– 1999 года Debian, в частности, благодаря политике контроля качества, завоевал признание как серверная платформа и система для технически грамотных пользователей (читай – в первую голову, для разработчиков). При этом он счастливо совмещал в себе качества «системы для себя» и «системы для всех». Первая сторона вопроса обеспечивалась программой dpkg, вторая же стала возможной благодаря ее надстройке – dselect.

Одновременно продолжали развиваться универсалисткие тенденции дистрибутива – не только вглубь океана Open Source Software, но и вширь – переносясь на архитектуры, отличные от i386. В интервале 1996– 1999 года Debian был портирован на платформы 68XXX, Alpha, затем – Sparc и PowerPC, Intel64 (так называемый Merced) и AMD64.

Важнейшей, наверное, вехой в развитии Debian (и не только его) стал выпуск весной 1999 года версии 2.1 Slink (Slinky – это такая собачка из того же мультика). И судьбоносность ее определяется тем, что в нее впервые был включён apt – универсальный инструмент для управления пакетами, который и создал позднее условия для широкого распространения Debian-клонов.

Значение apt переоценить трудно – он не только был портирован в дистрибутивы, использующие формат пакетов rpm, не только послужил прообразом для многих других систем управления пакетами, претендующими на универсальность (yum, urpmi), но и оказался своего рода связующим звеном между пакетными дистрибутивами и системами Source Based, поскольку обеспечивал не только установку бинарных пакетов. но и их построение (вплоть до тотальной пересборки системы, подобно сакраментальному make world из FreeBSD). Впрочем, все это стало ясно много позднее, по крайней мере, широким пользовательским массам.

Не случайно именно к 1999 году относятся первые попытки создания на базе Debian Систем Быстрого Развёртывания, таким, как Storm Linux и Corel Linux. Но это история, до которой мы доберёмся ещё не скоро.

Red Hat: совсем для всех?

Если Slackware продолжил исконно UNIX’овую традицию систем для себя, а Debian являет собой первый пример дистрибутива, развиваемого сообществом и для сообщества, то следующим шагом дистроения стало создание дистрибутива, претендующего быть системой для всех.

Ибо тем временем обозначилась первая сфера практического применения Linux за пределом круга разработчиков программного обеспечения – сервера сетевых служб, в том числе – web-сервера. Это вызвало к жизни вторую волну дистрибутивов (правда, по времени она практически пересеклась с первой – но в те героические годы счет вёлся на месяцы, если не на дни). И первой ласточкой её стал Red Hat, который м создавался как дистрибутив «для всех» – хотя, конечно, под понятие «все» тут попадали в первую очередь администраторы компьютерных сетей (время Linux’а для конечного пользователя ещё не пришло). Но важно, что Red Hat представлял собой не набор для конструирования собственной системы, как Slackware (да и Debian в те годы, до разработки apt, также скорее предполагал собственное конструирование, нежели готовое решение), а попытку создания системы, работающей «из коробки».

Было время на Руси, когда

Говоришь Linux – подразумеваешь Red Hat. Говоришь Red Hat – подразумеваешь Linux.

Дистрибутив Red Hat – третий в ряду ныне живущих патриархов дистроения, после Slackware и Debian (хотя, повторяю, приоритет тут исчисляется первыми месяцами). Он разрабатывается с 1993 года, в октябре 1994 года появилась первая общедоступная бета-версия, а в мае 1995 года – первый официальный релиз.

В отличие от Slackware, созданного и развивавшегося кустарём-одиночкой с персональным компьютером, и Debian, вокруг которого быстро сложилось сообщество разработчиков, за Red Hat с самого начала его разработки стояла одноимённая коммерческая компания. Основали её Боб Янг (Bob Young) и Марк Юинг (Marc Ewing) в 1993 году, имея целью поставить свободное слово на службу мировому капиталу.

Происхождение названия дистрибутива (красная шляпа) и соответствующего логотипа объясняют тем, что Юинг в студенческие годы рассекал по колледжу в дедушкином шапо соответствующего колёру. Хотя Янг объясняет его тем, что красный цвет в дзэн-буддизме символизирует всякие хорошие качества.

Это была первая попытка монетизации свободного софта: сам дистрибутив распространялся свободно, в соответствие с лицензией GPL, и бесплатно (по цене носителей и доставки), деньги же предполагалось извлекать из технической его поддержки. А поскольку оплачивать таковую обычно готовы не частные лица, а организации, то Red Hat изначально был ориентирован на корпоративную сферу – во-первых, и на дружелюбие к пользователю – во-вторых.

Правда, следует учесть, что хотя шире стал круг пользователей, но связь их с народом не стала особенно ближе: расширился он за счёт сисадминов, до приобщения к Linux’у пользователей «простых» оставалось ещё несколько лет.

Настоящие сисадмины, как известно, люди занятые – с одной стороны, и ленивые – с другой. Возиться с конструированием системы им обычно не с руки. И потому Red Hat с самого начала отличался простотой установки – максимально возможной в те времена.

Значительную роль в упрощении процедуры установки и поддержки сыграл формат пакетов RPM (что тогда расшифровывалось как Red Hat Package Manager) и одноимённая утилита для манипулирования такими пакетами, способная отслеживать зависимости и сообщать об их нарушении (но ещё не разрешать их автоматически). По сравнению с молчаливым пакетным инструментарием из Slackware, способным установить неработоспособную, из-за нарушения зависимостей, программу, это казалось большим прогрессом.

Происхождение системы rpm (будем понимать под этим и набор утилит, и формат пакетов, с которыми они работают) теряется во мраке веков. В первых версиях Red Hat использовалась система RPP, обеспечивающая установку пакетов одной командой, проверку зависимостей и запрос информации о них. Однако сборка пакетов для неё требовала существенной модификации исходников, что было напряжно для разработчиков.

Параллельно раннему Red Hat некоторое время развивался дистрибутив Bogus, ныне мало кому известный. В нём имелась собственная пакетная система – PMS (Package Management System), написанная Рикардом Файтом (Rikard E. Faith). Она обладала слабым механизмом запросов информации о пакетах, а проверка их зависимостей просто отсутствовала. Но зато пакеты для PMS можно было собирать непосредственно из исходников, без всякой их модификации.

В ходе подготовки 2-го релиза Red Hat Рикард Файт вместе с Дугом Хоффманом (Doug Hoffman) по контракту с поименованной компанией написали систему PM, вобравшую в себя лучшие особенности RPP и PMS. Хотя практически она так и не была задействована, но послужила одной из основ для RPM.

Собственно система RPM была создана Марком Юингом и Эриком Троэном (Erik Troan), основываясь на всех достижениях предшественников – RPP, PMS и PM. Вариант её, подготовленный для тестовых версий второго релиза, быстроты ради был написан на Perl’е, что создавало ряд проблем, например, при загрузке с дискеты (а в те времена это было достаточно обычным способом старта Linux’а). И непосредственно к выходу релиза Red Hat 2.0 система была полностью переписана на C, база данных пакетов перепроектирована для пущей надёжности и быстродействия, и создана библиотека rpmlib для использования функциональности RPM сторонними разработчиками. Иными словами, система RPM приобрела практически тот вид, в каком мы знаем её ныне, подвергаясь с тех пор только корректировке ошибок и косметическим доделкам.

Система RPM и одноимённый формат, став штатными и общедоступными в релизе Red Hat 2.0, вышедшей в сентябре 1995 года, сразу завоевали популярность и вне родительской системы. Вскоре они были использованы в Caldera Linux, Suse, Mandrake и многих других – и об этом будет говориться в следующих сериях.

Оглавление книги


Генерация: 1.856. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз