LXF148:20 лет Linux
|
|
|
Содержание |
Linux: Старт дистрибуции
- Алексей Федорчук рассказывает о появлении первых дистрибутивов.
Прошлую статью я завершил обсуждением вопроса, что же такое придумал Линус, и не GNU ли его Linux. В религиозные вопросы по сему поводу вдаваться не будем. А лучше посмотрим, что же именно Линус придумал (не считая метода разработки, который придумал Том Сойер).
Был ли дистрибутивом первозданный Linux?
Общеизвестно, что Линус придумал ядро операционной системы имени... нет, не и минеральных источников, а имени себя. И это правда, чистая правда – но не вся правда. Потому что Линус придумал еще и файловую систему ext (расширение файловой системы MINIX, которая позднее воплотилась в ext2). Кроме того, им или с его подачи был разработан набор низкоуровневых утилит для работы с ядром, его модулями, файловой системой ext – он получил имя linux-utils. Наконец, в рамках реанимированного Линусом метода Тома Сойера Вернер Альмесбергер [Werner Almesberger] разработал загрузчик ядра 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) и был разработан Питером Мак-Дональдом [Peter McDonald]. Помимо ядра 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 умер. Но душа его жила. Еще в период его активного развития Патрик Фолькердинг [Patrick J. Volkerding] принял 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 лет, не поступаясь своими принципами, сохраняя редкую по нынешним временам компактность, лишь обновляя версии ядра, компоненты базовой системы и приложений. Сохраняется и устойчивый круг пользователей этого дистрибутива.
Исходный «примитивизм» формата пакетов Slackware не мешает использовать в этом дистрибутиве весьма развитые средства пакетного менеджмента, обеспечивающие учет и автоматическое разрешение зависимостей. Поскольку внутри самих пакетов никакой метаинформации не содержится, для хранения ее можно использовать любую внешнюю базу.
Этой особенностью формата пакетов Slackware активно пользуются все, у кого возникает к тому желание или необходимость, приспосабливая к ней любые системы управления пакетами, от портов FreeBSD до Debian’овского apt-get и pacman, происходящего из Archlinux. Разработан был для Slackware и собственный менеджер пакетов, swaret. Однако в штатный комплект дистрибутива он, вследствие заветов Патрика, так и не вошел.
Потому что для собственно Slackware в качестве основных средств управления пакетами Патрик по-прежнему признает только два: установку официальных бинарников с помощью штатных утилит, при ручном разрешении зависимостей, и компиляцию из исходников – в случае, если нужных пакетов нет в репозитории или их официальная сборка по тем или иным причинам не удовлетворяет пользователя. Все остальное – от глюкавого. То есть дистрибутив этот должен рассматриваться не столько как законченная система, сколько как каркас для конструирования системы собственной.
И этими возможностями для конструирования начали активно пользоваться, в результате чего Slackware стал плодовитым прародителем клонов: на сегодняшний день на Distrowatch зарегистрировано около 25 активно развиваемых его производных, а в прошлом их число было куда больше.
Конструкторский характер Slackware способствовал тому, что на нем базировалось изобилие разного рода специализированных систем, которые условно можно объединить под названием «Linux на дискете». Правда, ныне, с широким распространением LiveCD, появлением «Linux на флэшках» и отмиранием 3-дюймовых дисководов, «дискеточные» Linux’ы представляют интерес исторический – как напоминание о временах, когда деревья были большими, а дистрибутивы – маленькими.
Debian: Второй шаг к пользователю
Дистрибутиву Slackware недолго пришлось оставаться в гордом (почти) одиночестве на своем тернистом пути к пользователю. Скоро этот путь разделился на троих – сначала с Debian, а затем и с Red Hat.
История дистрибутива Debian особенно интересна по четырем причинам. Первая – ее длительность и насыщенность событиями, давшими большое количество инноваций, аккумулированных мировым дистростроением. Вторая причина – Debian стал основоположником универсалистской тенденции в дистростроении, стремившейся охватить весь океан свободного ПО. Третья – Debian стал прародителем максимального количества активно развивающихся клонов. И, наконец, четвертая – некоторые из его потомков сравнились по популярности с родителем, а один (Ubuntu) даже превзошел его (не это ли – мечта всех родителей?).
Debian – или, точнее, Debian GNU/Linux, разработчики настаивают именно на таком его именовании – был создан в 1993 году Яном Мердоком [Ian Murdock], и его название образовано сочетанием имен его жены Деборы [Deb] и самого автора – в то время он был студентом Университета Пэрдью [Purdue]. Однако очень быстро вокруг Debian выросло сообщество пользователей и разработчиков, и проект приобрел общественное значение.
Основной идеей раннего (1993 – 1995 гг.) Debian были модуляризация авторских пакетов, сборка этих модулей в качестве дистрибутивных пакетов с детальным описанием их зависимостей, утилита dpkg для управления оными в масштабе одного отдельно взятого пакета. И, под занавес первого акта, dselect – первая система пакетного менеджмента, достойная претендовать на звание именно системы и представляющая собой интерфейс к dpkg, обеспечивающий автоматическое разрешение зависимостей и установку целевых наборов пакетов. Названные тенденции получили развитие в дальнейшем.
Универсализм Debian проявился на следующем этапе его развития, начиная с 1996 года, когда Яна, ушедшего после окончания университета на службу мировому капиталу (а именно, в компанию Progeny), на посту лидера проекта сменил Брюс Пиренс [Bruce Perens] – известный адепт 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 и многих других – и об этом будет говориться в следующих сериях.