RFC (Request for Comments, Запрос на комментарии) - серия документов, публикуемая сообществом исследователей и разработчиков, руководствующихся практическими интересами, в которой описывается набор протоколов и обобщается опыт функционирования Интернет.
Начнем с того, что попробуем определить разницу между понятиями «UNIX-клон» и «UNIX-подобная ОС» и разберемся, какое из понятий к какой из рассматриваемых ОС применимо. Для этого нам придется совершить экскурс в прошлое, как раз в тот момент, когда исходные тексты UNIX попали в калифорнийский университет Беркли. Произошло это знаменательное событие в 1974 году и вскоре началось развитие второй ветки оригинального UNIX, распространялась которая под именем BSD (Berkely Software Distribution). К началу 90-х в BSD-ветке UNIX накопилось столько изменений и улучшений, что было принято решение создать полностью открытую операционную систему, избавившись от кусков кода оригинального UNIX (по условиям лицензии, исходные коды UNIX не могли распространяться дальше университетских стен). Так на свет появилась 386BSD, а затем из нее выросла FreeBSD. Как видно, BSD-системы - это прямые потомки и наследники традиций оригинального UNIX от AT&T, что дает им право именоваться «UNIX-клонами».
История Linux, в отличие от истории BSD, достаточно прямолинейна и даже романтична. В 1991 году обычный финский студент, фанат программирования, Линус Торвальдс, находясь под влиянием учебной ОС minix, бросает миру вызов и в одиночку пишет собственную операционную систему. Вскоре он выкладывает свое творение во всеобщий доступ под открытой лицензией GPL и сообщает об этом группе новостей comp.os.minix. К разработке присоединяется множество людей, и студенческая игрушка постепенно превращается в серьезную ОС. В этой истории легко заметить одну немаловажную деталь - Linux написан, что называется, с нуля. Сам Линус в своих мемуарах говорит, что во время создания ОС у него на руках даже стандарта POSIX не было, не то что исходников UNIX или его потомка - BSD. Linux - это не UNIX, это ОС, исповедующая традиции UNIX-систем, совместимая со стандартом POSIX, но все-таки не UNIX. Linux - это «UNIX-подобная ОС», не больше, не меньше.
Вдумчивый читатель наверняка заметил ошибку - в последнем абзаце Linux назван операционной системой, хотя каждый должен знать, что Linux - это всего лишь ядро и не более того. В следующем разделе мы попробуем рассмотреть плюсы и минусы распространения ядра Linux как отдельного пакета, и то, чем этот подход отличается от цельных BSD-систем.
интеграция
С самого начала своего возникновения Linux был всего лишь ядром. Линус Торвальдс не утруждал себя созданием так называемого «окружения ОС», всех тех утилит и библиотек, которые, работая поверх ядра, создают завершенную операционную систему. Вместо этого предлагалось использовать наработки проекта GNU, в рамках которого уже было написано все необходимое, включая стандартную библиотеку языка Си (libc). Так как и ядро Linux, и все программы проекта GNU выпускались под лицензией GPL, то никаких проблем в создании на их основе операционной системы, пригодной для использования, не возникало. Так появилось понятие дистрибутива Linux, то есть окружения ОС на основе ядра Linux. В современные дистрибутивы Linux входит софт не только проекта GNU, но и множество других программ от сторонних разработчиков, лицензии которых совместимы с GPL.
BSD-системы, будучи прямыми потомками UNIX, изначально комплектовались всем необходимым для комфортной работы в ОС. Это подтверждается наличием слова Distribution в самой аббревиатуре BSD. Все системные компоненты окружения ОС разрабатываются одной командой разработчиков, а их развитие координируется лидерами проекта. За счет этого поддерживается общая целостность и непротиворечивость всей операционной системы. Системные утилиты имеют четкие, понятные имена и единообразные флаги. Яркие примеры: vidcontrol и kbdcontrol. По названию утилит легко определить, что они предназначены для настройки консоли и клавиатуры. Никаких дополнительных программ не существует, поведение консоли настраивается только двумя утилитами, начиная от типа курсора и заканчивая цветом и шрифтами.
Взглянем теперь на ситуацию в мире Linux. Системные программы, которыми комплектуется дистрибутив, разрабатываются зачастую совершенно независимыми командами. Представления разработчиков об имени команды и способах управления ею существенно различаются. В результате возникает мешанина - огромное количество утилит с невнятными названиями и различным поведением. Ситуация усугубляется еще и тем, что независимые разработчики не могут скоординировать свою работу, и, как результат, появляется множество различных утилит, управляющих, по сути, одним и тем же устройством. Рассмотрим тот же пример с консолью. Для полной настройки и русификации консоли в Linux придется прибегнуть к помощи аж четырех утилит: loadkeys для настройки раскладки, setfont для смены шрифта, setterm для управления визуальными параметрами и fbset для настройки разрешения графической консоли. Причем, если возникнет необходимость сменить разрешение текстовое, то это можно сделать только путем передачи параметра ядру. Хотя, затрагивая вопрос графики в консоли, надо отдать пингвину должное, настоящей графической консоли в FreeBSD нет, максимум, что можно сделать, это установить VESA-режим с разрешением 800x600 и частотой смены кадров 60Гц. Но ситуация меняется: ребята из проекта DragonFlyBSD доработали консольный драйвер и научили его действовать во всех режимах, которые только позволяет использовать железо машины. Не так давно был сделан бэкпорт этого драйвера в FreeBSD.
С точки зрения пользователя, BSD-системы - это цельные, хорошо спроектированные и укомплектованные операционные системы. С другой стороны, ОС на базе ядра Linux - это нечто вроде конструктора, детали которого плохо стыкуются между собой и не подходят по цвету. Задачу сборки такого конструктора решают дистрибьюторы, а то, к чему это приводит, мы рассмотрим в следующем разделе.
свобода выбора
До недавнего времени в мире BSD вообще не существовало понятия «дистрибутив» с тем смыслом, какой в него вкладывают линуксоиды. Пользователю предлагалось на выбор четыре варианта ОС: FreeBSD, NetBSD, OpenBSD и DragonFlyBSD. Каждая из перечисленных ОС была рассчитана на решение определенного круга задач, за исключением FreeBSD, которая позиционировалась как многоцелевая. Ситуация осталась прежней, но на сцене появилось два новых проекта: DesktopBSD и PC-BSD. И это уже не отпрыски семейства BSD, а самые настоящие дистрибутивы FreeBSD с некоторыми улучшениями в плане юзабилити. Их мы рассматривать не будем.
Ситуация с Linux всем известна. Просто колоссальное количество дистрибутивов, каждый со своей историей, целевой аудиторией и, зачастую, собственным форматом пакетов. Каждый дистрибутив Linux может рассматриваться как обособленная UNIX-подобная ОС на базе одного ядра. Перед пользователем открываются огромные просторы для выбора. Каждый может найти для себя тот единственный и неповторимый дистрибутив, который будет удовлетворять всем его потребностям. Одни предпочитают собирать программы из исходников, другим больше по душе прекомпелированные пакеты, для третьих важна простота использования, четвертые предпочитают покопаться во внутренностях пингвина. Выбор практически неограничен.
К сожалению, неограниченная свобода выбора далеко не всегда приносит одну лишь выгоду. Любой пользователь Linux может рассказать множество историй о том, как он, в поисках идеала, прыгал с одного дистрибутива на другой. Сколько времени, нервов и дискового пространства было на это потрачено. Опять же, любой линуксоид знает, что такое поиск нужного пакета для своего дистрибутива. Что такое несовместимость и конфликты между пакетами. И, конечно же, любой опытный линуксоид хоть раз в жизни прибегал к помощи утилиты alien для конвертации пакетов из одного формата в другой. С этим можно не согласиться, сказав, что проблемы надуманы, и любой мало-мальски популярный дистрибутив содержит в базе пакетов все, что только может потребоваться пользователю. Отчасти это правда, но полностью отрицать существование проблемы нельзя.
В мире BSD, напротив, выбор очень и очень ограничен. Несмотря на то, что различные представители BSD-семейства разительно отличаются друг от друга в плане архитектуры ядра и целевой аудитории, юзерлэнд-окружение в них практически идентично. Те качества, которые отличают дистрибутивы Linux, для BSD-систем являются сходной чертой. В операционных системах семейства BSD можно выделить три общих черты: инициализационные скрипты в стиле BSD, способ установки стороннего ПО через систему портов, простота. Рассмотрим каждую из них подробнее.
стили инициализации
Стиль инициализационных скриптов - это первое, что различается в Linux-дистрибутивах и является общим в BSD. Существует два стиля инициализации - SystemV и BSD. SystemV-стиль пришел к нам из оригинального UNIX и основан на понятии runlevel (наиболее часто употребляемый вариант перевода: «уровень запуска»). Скрипты SystemV представляют собой набор файлов-скриптов, каждый из которых ответственен за определенный этап инициализации (это может быть монтирование файловых систем, запуск сервисов и любая другая задача). В зависимости от уровня запуска стартует только заранее определенная часть этих скриптов (например, на уровне 2 скрипты, ответственные за поднятие сети, управления не получают). Привлекательность скриптов SystemV-стиля заключается в их гибкости. Пользователь может самостоятельно контролировать поведение системы на каждом этапе загрузки. Кроме того, SystemV-стиль идеально подходит для организации параллельной загрузки сервисов. Подавляющее большинство дистрибутивов Linux используют такой стиль инициализации.
BSD-стиль, как легко догадаться из названия, изначально использовался только в BSD-системах. В скриптах BSD-стиля нет понятия runlevel, как нет и модульности. После загрузки ядра, демон init передает управление скрипту /etc/rc, и тот проводит систему через все этапы инициализации. Достоинство такого подхода в простоте реализации и управления. Недостаток - в отсутствии гибкости. С другой стороны, BSD-скрипты со временем приобрели черты SystemV- скриптов, что легко заметить по наличию каталога /etc/rc.d. Сегодня файл /etc/rc - это всего лишь обертка, нужная для того, чтобы поочередно передавать управление скриптам из этого каталога, каждый из которых, как и в случае с SystemV, выполняет свою функцию. Это придает некоторую гибкость процессу настройки инициализации.
система пакетного менеджмента
Вторая отличительная черта дистрибутива Linux - это система пакетного менеджмента. Практически все существующие способы установки ПО представлены в мире Linux. Это и пакеты, разворачивающиеся прямо в дерево файловой системы (rpm, deb, tgz), и пакеты, устанавливаемые в выделенные каталоги (на подобие «Program Files» из Windows), и BSD-подобные системы портов (вроде портов Gentoo или ArchLinux), и даже модули файловой системы, применяемые в некоторых LiveCD. Опять же, выбор практически неограничен. Причем особой популярностью у дистрибьюторов Linux пользуются пакеты форматов rpm и deb. В особенности первый, который был включен в стандарт LSB (Linux Standard Base). Учитывая тот факт, что пакет rpm имеет, наверное, самый противоречивый и запутанный формат, его популярность вызывает тревогу.
Что касается BSD, то здесь мы видим обратную картину, причем картину, одинаковую во всех BSD-отпрысках. Системы пакетного менеджмента BSD-систем основаны на понятии портов. Система портов представляет собой некий фреймворк, который позволяет скомпилировать и установить любой портированный программный пакет, используя единый интерфейс. Каждый BSD'шник знает, как легко найти и установить нужную программу через систему портов. Для этого потребуется выполнить всего три незамысловатых действия (на примере FreeBSD): находясь в каталоге /usr/ports, набрать команду «make search name=имя», перейти через дерево портов в нужный каталог и выполнить команду «make install». Это все: никаких команд с непонятными флагами и километровыми man-страницами, никаких поисков пакетов в Интернете - все просто и ясно. Более того, не возбраняется и установка перекомпилированных пакетов. Для выполнения этой операции предусмотрена команда pkg_add, которая, будучи запущенной с опцией '-r', вовсе освобождает пользователя от лишних телодвижений, автоматически выкачивая сам пакет и все его зависимости из сети.
Прошли времена, когда система пакетного менеджмента BSD превосходила все существующие наработки Linux-сообщества. Сегодня BSD-подобную систему портов можно встретить во многих Linux-дистрибутивах (Gentoo, ArchLinux, CRUX). Особого внимания заслуживает система портов Gentoo, которая даже превосходит свой прообраз из BSD-систем. Идея apt-get как средства быстрой и простой установки пакетов сегодня применяется во всех популярных дистрибутивах. Одна из сильнейших сторон BSD постепенно уходит на задний план.
простота
Ну и, наконец, последнее, что отличает дистрибутивы Linux и является общим для BSD-систем - простота устройства всей операционной системы. Известна тенденция пользователей (особенно неопытных) делить все существующие дистрибутивы на две группы: простые в использовании, для новичков (SuSe, Mandriva, Ubuntu) и дистрибутивы для профи (Slackware, CRUX, Gentoo). Это тенденция не отражает реального положения вещей, но для нас является значимой. В частности потому, что «дистрибутивы для новичков» обычно очень сложны в архитектурном плане, потому как сама ОС должна решать сложные задачи за пользователя и предоставлять ему различные графические конфигураторы. Дистрибутивы «для профи», наоборот, весьма просты в отношении внутреннего устройства. Отсюда можно сделать вывод: Linux настолько сложен в использовании, что возникла потребность в создании специальных дистрибутивов для людей. Но вывод этот не совсем правильный: дистрибутивы для людей нужны так же потому, что нужно скрыть от глаз пользователя ту конструкцию, которая состоит из плохо стыкующихся между собой деталей разного цвета.
BSD-системы, изначально спроектированные как цельные операционные системы, лишены недостатков Linux. Конструктор легко складывается в простую, как в пользовательском плане, так и в плане архитектуры, ОС. Все компоненты ОС - на своем месте и четко выполняют свои обязанности. Можно привести множество примеров, подтверждающих этот факт. Это и простота конфигурирования большинства параметров ОС путем правки файла /etc/rc.conf, и куда более простой механизм загрузки модулей и внятный механизм конфигурирования ядра - sysctl (в противовес запутанной каталоговой структуре /proc/sys). Отдельно стоит упомянуть также о том, что разработчики Linux зачастую слишком усложняют простые вещи.
документация
Последний вопрос на сегодня - документированность ОС. Учитывая разительное отличие качества документации Linux и BSD, считаю этот фактор немаловажным. Ситуация с документацией Linux весьма плачевна. Многие нововведения ядра не документируются вовсе, те, для которых документация существует, не обновляются или обновляются нерегулярно. Зачастую бывает очень проблематично найти сведения о нужном драйвере. Любой, кто заглядывал в каталог /usr/src/linux/Documentation, знает, какой там творится беспорядок, и как трудно найти нужную информацию. К сожалению, многим утилитам пользовательского уровня свойственна та же проблема. Конечно, нельзя забывать и о документации, распространяемой Linux-дистрибьюторами, но она охватывает только небольшую часть вопросов. Документация проекта www.tldp.org (The Linux Documentation Project) - вообще не документация, а руководство «Как сделать то-то». Можно сказать, что Linux берет не качеством, а количеством документации.
Что касается BSD, - здесь все иначе. Особенности каждого драйвера, файловой системы или другой части ядра, с которым приходится непосредственно работать пользователю, доходчиво расписаны в оперативно обновляемых man-страницах. Для FreeBSD существует также регулярно обновляемый handbook (настольная книга, руководство пользователя), который охватывает пусть не все, но очень широкий круг вопросов. В большинстве случаев, чтобы овладеть FreeBSD достаточно только handbook'а и man-страниц. Дополнительные материалы понадобятся только в узкоспециализированных случаях.
резюме
Не нужно писать мне гневных отзывов со словами: «Где сравнение ядер?», «Где бенчмарки?», «Где сравнение ФС?» и т.п. Если бы пользователи выбирали ОС только по критериям быстродействия или поддержки новых технологий, то выбор всегда бы падал на Linux. Почему тогда так много людей выбирает BSD-системы? Причину такого выбора и должна была объяснить данная статья.