FreeBSD

В определенный момент времени у каждого системного администратора (ну, или у большинства) возникает вопрос: «Что бы это такого придумать, чтобы ничего не делать, а оно само работало?» Такой вопрос возник и у меня во время применения домкрата к напрочь рухнувшему серверу. Я был бы не я, если бы озадачился этим вопросом исключительно сам, не озадачив никого вокруг. И в один прекрасный день было решено проверить некоторое количество ОС и выбрать наиболее удобную для установки сервера. В итоге, общего мнения не получилось. Кто-то решил остаться на Microsoft Windows 2003 Server, кому-то больше понравился Linux (таких было трое), а я, после тщательного изучения результатов, остановил свой выбор на FreeBSD, которой пользуюсь по теперешний момент и менять на что-то другое не собираюсь. Естественно, возникает вопрос: «А почему именно FreeBSD?» на который я и постараюсь в этой статье ответить.

Что же она из себя представляет и чем отличается от остальных? FreeBSD - это свободно доступная, с полными исходными текстами, основанная на 4.4BSD-Lite, версия для компьютерных систем, основанных на Intel i386, i486, Pentium, Pentium Pro, Celeron, Pentium II, Pentium III, Pentium 4 (или совместимыми), Xeon, DEC Alpha и Sun UltraSPARC. В основном она базируется на программном обеспечении от группы CSRG, U.C. Berkley, с некоторым дополнениями из NetBSD, OpenBSD, 386BSD и Free Software Foundation (Ну как же без этого? А то ж как-то не по-товарищески - не спереть порт, пэкедж или вообще удачный участок кода).

Среди объявленных преимуществ FreeBSD - полное обновление системы виртуальной памяти с объединением виртуальной памяти и буферного кэша файловой системы, что, по словам разработчиков «не только увеличивает производительность, но и уменьшает количество используемой FreeBSD памяти, делая 5 Mб конфигурацию более приемлемым минимумом». Честно говоря, я оставлю это утверждение на совести разработчиков, поскольку проверять FreeBSD 2.0 не было ни времени, ни желания. Да и к тому же было лень искать подходящее железо.
Среди остальных—полная поддержка клиента и сервера NIS, поддержка транзакций TCP, поддержка ''дозвона по запросу'' в PPP, встроенная поддержка DHCP, улучшенная подсистема SCSI, поддержка адаптеров ISDN, ATM, FDDI, Fast и Gigabit Ethernet (1000 Mбит), улучшенная поддержка новейших контролеров Adaptec и многие тысячи исправленных ошибок. Также, начиная с FreeBSD 5 включены несколько новых функций, в том числе относящихся к безопасности. С целью повысить безопасность FreeBSD был сформирован проект TrustedBSD, в рамках которого были разработаны, в том числе: расширяемая система принудительного контроля доступа MAC, списки доступа ACL для файловых систем и новая файловая система UFS2. Некоторые функции TrustedBSD были интегрированы также в операционные системы NetBSD и OpenBSD. FreeBSD также поддерживает шифрование файловых систем посредством системы GDBE, которую написал Пол-Хеннинг Камп (Poul-Henning Kamp), один из ведущих разработчиков. Другие важные возможности FreeBSD относятся к внутриядерным блокировкам для улучшения производительности на многопроцессорных SMP-системах и многопоточности, реализованной системой KSE, которая является поточной библиотекой по умолчанию начиная с версии 5.3.

А что, собственно, помогает учинять такое в пределах отдельно взятой ОС? Тип ядра FreeBSD относится к модульным ядрам ОС. То есть в отличие от классических монолитных ядер (они предоставляют богатый набор абстракций оборудования; все части монолитного ядра работают в одном адресном пространстве; используется в традиционных ядрах UNIX, таких как BSD и Linux), считающихся ныне устаревшими, модульные ядра, как правило не требуют полной перекомпиляции ядра при изменении состава аппаратного обеспечения компьютера. Вместо этого, модульные ядра предоставляют тот или иной механизм подгрузки модулей ядра, поддерживающих то или иное аппаратное обеспечение (например, драйверов). При этом подгрузка модулей может быть как динамической (выполняемой «на лету», без перезагрузки ОС, в работающей системе), так и статической (выполняемой при перезагрузке ОС после переконфигурирования системы на загрузку тех или иных модулей). Все модули ядра работают в адресном пространстве ядра и могут пользоваться всеми функциями, предоставляемыми ядром. Поэтому модульные ядра продолжают оставаться монолитными.

Модульное ядро представляет собой особый программный интерфейс (API) для связывания модулей с ядром, для обеспечения динамической подгрузки и выгрузки модулей. В свою очередь, не любая программа может быть сделана модулем ядра: на модули ядра накладываются определенные ограничения по части используемых функций (например, они не могут пользоваться функциями стандартной библиотеки С/С++ и должны использовать специальные аналоги, являющиеся функциями API-ядра). Кроме того, модули ядра обязаны экспортировать определенные функции, нужные ядру для правильного подключения и распознавания модуля, для его корректной инициализации при загрузке и корректного завершения при выгрузке, для регистрации модуля в таблице модулей ядра и для обращения из ядра к сервисам, предоставляемым модулем.

Возможность динамической подгрузки модулей не нарушает монолитности архитектуры ядра, так как динамически подгружаемые модули загружаются в адресное пространство ядра и в дальнейшем работают как интегральная часть ядра. Среди плюсов данного подхода—быстрота работы и неприхотливость в хардварной части. Но тут есть и свой, довольно весомый, минус: ядро работает в одном адресном пространстве и поэтому сбой одного из его компонентов может учинить глобальный крах всей системы. Нет, оно, конечно, kernel - так kernel, panic - так panic. Но все равно приятного мало.

Если сравнивать ядро FreeBSD с архитетурой ядра Linux и архитектурой ядра Windows NT-семейства - то отличия во многом существенны. Что касается многими любимого Linux - то здесь у нас, как и у FreeBSD присутствует монолитное ядро с поддержкой загружаемых модулей. То есть та же архитектура ядра, что и у FreeBSD, те же плюсы и минусы, но с большей степенью модульности. Казалось бы замечательно, придраться не к чему и означает «Нафиг эту FreeBSD совсем», но тут есть небольшой подвох. FreeBSD разрабатывается и выпускается в свет единой командой разработчиков, поэтому ядро существует в разных вариантах только для различных архитектур (amd64, alpha, i386, pc98, Sparc64), а в целом неизменно. Что касается Linux, то в данном случае разработчики дистрибутивов поддерживают свои собственные версии ядра (естественно основываясь на официальной версии), что часто делает прилагающееся программное обеспечение для двух дистрибутивов Linux от двух различных разработчиков совершенно несовместимым. Счастливым исключением является Gentoo Linux, который позволяет запускать под собой программное обеспечение, скомпилированное под любым из дистрибутивов (возможно потому, что является своеобразным гибридом Linux и FreeBSD). Mandriva Linux позволяет, в свою очередь, своим пользователям компилировать исходники сторонних разработчиков. Плюс ко всему все модули FreeBSD проходят весьма жесткий отбор, что приводит к более редким выходам в свет новых стабильных версий, но делает их более работоспособными и «стрессоустойчивыми».

Windows NT построена на гибридном ядре. Хотя Windows NT часто называют микроядерной операционной системой, это не совсем так. Микроядро NT слишком велико (более 1 Мб), чтобы носить приставку «микро». Компоненты ядра Windows NT располагаются в вытесняемой памяти и взаимодействуют друг с другом путем передачи сообщений, как и положено в микроядерных операционных системах. В то же время все компоненты ядра работают в одном адресном пространстве и активно используют общие структуры данных, что свойственно операционным системам с монолитным ядром. По мнению специалистов Microsoft, причина проста: чисто микроядерный дизайн коммерчески невыгоден, поскольку неэффективен. Минусами данной ОС по отношению к FreeBSD являются как раз таки объем ядра, расположение компонентов в вытесняемой памяти и их работа в едином адресном пространстве. Но есть несомненный плюс: там, где в NIX-системах приходится делать все руками, здесь можно сделать все то же самое, пользуясь встроенными службами.

С архитектурой и устойчивостью компонентов ядра более-менее разобрались. Хотя, от Врожденного Синдрома Кривых Рук и «Умной» Головы спасет только топор. Теперь рассмотрим полезность FreeBSD с точки зрения системного администратора и проведем приблизительное сравнение с наиболее близкой к ней ОС - Linux.

В FreeBSD есть хороший и мощный стек TCP/IP с поддержкой стандартов DHCP, NFS, SLIP, PPP и NIS. Думаю, объяснять, что это позволяет взаимодействовать с самыми различными системами, не нужно. Поддержка большинства существующих файловых систем позволяет нам грамотно и без усилий создать и администрировать внутренний файл-сервер, обеспечить работу WWW и/или FTP. С установленным набором Samba FreeBSD вполне свободно и уверенно выполняет роль контроллера домена в Windows-сетях. Четко распределяемые права доступа, удобное управление оными. Хотя, тут и Linux можно использовать, но тут кому как больше нравится - спорить не буду. FreeBSD также прекрасно выполняет свои функции благодаря вытесняющей многозадачности, многопользовательской поддержке и защите памяти. Таким образом, быстро и не расходуя системные ресурсы мы можем распределять ресурсы сервера между пользователями и приложениями, грамотно обеспечивать работу сетевых устройств и, что самое важное, фатальная ошибка одного приложения не скажется на работе другого. Двоичная совместимость с большинством программных продуктов, созданных для Linux, SCO, SVR4, BSDI и NetBSD. Это обеспечивает нам довольно широкий выбор и возможность в очередной раз напомнить пользователям Linux о различных разработчиках дистрибутивов. Ну и, ко всему прочему, повод лишний раз им же язык показать и подразниться. Добавим к плюсам эффективную поддержку SMP-систем, виртуальную память с поддержкой сброса неиспользуемых страниц, встроенные средства разработки, огромное количество программного обеспечения (да еще и чужое можно использовать, что немаловажно). Можно было бы сейчас еще много чего вспомнить: Apache, PF, IPF, возможность установки и работы с Oracle, прекрасно выполненную систему безопасности с поддержкой Kerberos5, поддержка хэшей MD5, DES, Blowfish...

И тут как раз и появляется вопрос «Так почему же FreeBSD не настолько популярна и занимает среди операционных систем с открытым кодом всего около 15% рынка?» На мой взгляд одна из причин этого явления в методе продвижения и времени появления. Linux появился как раз тогда, когда BSD-платформа не использовалась по ряду причин, в основном, юридического характера и, что вполне естественно, занял пустующее место. Плюс добавим весьма агрессивную рекламу. Не в общепринятом смысле, конечно же. Заявление о том, что каждый может внести свой посильный вклад в создание Linux, бесплатность и, поистине всенародное участие и вызвали тот резонанс, благодаря которому эта ОС до сих пор настолько популярна. Но при этом огромное количество разработчиков и дистрибутивов создают более хаотичную и постоянно изменяющуюся платформу.
FreeBSD—это своеобразны компромисс между свободным энтузиазмом и рабочей рутиной. Более традиционная, более мощная, более предсказуемая, хотя и менее гибкая. Но разве факт того, что сервера Yahoo!, Apache, Sony Japan, Netcraft и многих других компаний используют в качестве платформы именно FreeBSD, а Hotmail использовала FreeBSD наряду с Solaris не говорит сам за себя? В 2000 году, после приобретения Hotmail компанией Microsoft большая часть серверов была переведена на собственные продукты (на тот момент, в частности, на Windows 2000), но FreeBSD используется в Hotmail до сих пор, поддерживая ряд важнейших функций.В сущности, проект FreeBSD возник в первой половине 1993 года, частично как результат развития ''Неофициального комплекта исправлений к 386BSD (patchkit)'', последними 3 координаторами этого проекта: Нэйтом Уильямсом (Nate Williams), Родом Граймсом (Rod Grimes) и Джорданом Хаббардом (Jordan Hubbard), главной задачей которых было зафиксировать промежуточное состояние проекта 386BSD, чтобы исправить проблемы, которые механизм patchkit решить не мог. Ранним рабочим названием этого проекта были 386BSD 0.5 или 386BSD Interim.

386BSD была операционной системой Билла и Линн Джолиц (William Jolitz и Lynne Jolitz), которая основывалась на 4.3BSD (BSD (Berkeley Software Distribution) - система распространения программного обеспечения в исходных кодах, созданная для обмена опытом между учебными заведениями. Особенностью пакетов ПО BSD была специальная лицензия BSD, которую кратко можно охарактеризовать так: весь исходный код — собственность BSD, все правки — собственность их авторов.

На данный момент термин BSD чаще всего употребляется как синоним BSD-UNIX общего названия вариантов UNIX, восходящих к дистрибутивам университета Беркли) и на тот момент сильно страдала от почти годичного пренебрежения к ней авторов. Так как patchkit разрастался, его поддержка становилось более неудобной и разработчики patchkit-а пришли к единодушному соглашению, что нужно что-то делать, и решили помочь Биллу, предоставив этот промежуточный ''очистительный'' снимок состояния системы. Эти планы были грубо оборваны, когда Билл внезапно решил прекратить поддержку проекта без каких-либо ясных комментариев.

Первым дистрибутивом, распространяемым как на CDROM, так и в сети, стала FreeBSD 1.0, выпущенная в декабре 1993 года. Эта версия была выполнена на основе ленты 4.3BSD-Lite (Net/2) из Калифорнийского Университета в Беркли, с многочисленными добавлениями из проекта 386BSD и Фонда Свободного Программного Обеспечения. Этот довольно внушительный успех для первой попытки был закреплен с выходом FreeBSD 1.1 RELEASE в мае 1994 года.

В это же время, на горизонте сгустились тучи в связи с назревающим скандалом между Novell и Калифорнийским Университетом Беркли. Это был вялотекущий судебный процесс о легальности версии Net/2 из Беркли. По условиям достигнутого соглашения, Калифорнийский Университет признавал, что большие куски Net/2 были ''унаследованным'' кодом, права на который принадлежат компании Novell, которая, в свою очередь, приобрела эти права ранее у AT&T. Взамен Беркли получил ''благословение'' Novell на то, что версия 4.4BSD-Lite после выхода будет объявлена полностью ''свободной'', а всем пользователям Net/2 будет настоятельно рекомендовано перейти на нее. Это также касалось FreeBSD, проекту было дано время до конца июля 1994 года для прекращения распространения продукта, базирующегося на Net/2. На этих условиях проекту было разрешено выпустить последний релиз до окончания срока, и это была FreeBSD 1.1.5.1.

Тогда проект FreeBSD приступил к сложнейшей задаче буквально пересоздания с нуля на основе абсолютно новой и довольно неполной системы 4.4BSD- Lite. Версии Lite были в прямом смысле легкими отчасти потому, что группа CSRG удалила большие куски кода, необходимого для создания реально загружающейся системы (по причине различных лицензионных требований) и фактически, порт 4.4BSD для платформы Intel был очень неполным. Проекту потребовалось время почти до ноября 1994 года для того, чтобы выполнить этот переход и на этом этапе FreeBSD 2.0 была опубликована в сети и на CDROM (в конце декабря). Несмотря на множество ''острых углов'' в этой версии, она пользовалась значительным успехом и была продолжена в более устойчивой и простой FreeBSD 2.0.5, выпущенной в июне 1995 года.

FreeBSD 2.1.5 была выпущена в августе 1996 и она стала достаточно популярной среди ISP и в коммерческой среде, чтобы выпустить еще один релиз из ветви 2.1-Stable. Существует две одновременно разрабатываемые ветви FreeBSD — Current и Stable. Current (нестабильная, тестовая) предназначена для тестирования нового, экспериментального кода. Новые функции, добавленные в Current, могут остаться в системе или от них могут отказаться, если реализация окажется неудачной. Иногда эта версия может оказаться в непригодном для использования состоянии. Stable (стабильная или производственная) версия содержит только те нововведения, которые прошли проверку в Current. Тем не менее, эта версия тоже предназначена, в основном для разработчиков. Не рекомендуется обновлять ответственные рабочие серверы до Stable, предварительно ее не протестировав. На основе Stable регулярно создаются тщательно протестированные разработчиками Release-версии. Это была FreeBSD 2.1.7.1, вышедшая в феврале 1997 и завершившая главную ветвь разработки 2.1-STABLE. Сейчас в режиме поддержки, в эту ветвь (RELENG_2_1_0) вносятся только улучшения защиты и другие критически важные исправления.

FreeBSD 2.2 была ответвлена от основной линии разработки (-Current) в ноябре 1996 как ветвь RELENG_2_2, а первая полная версия (2.2.1) появилась в апреле 1997. Последующие версии ветви 2.2 появлялись летом и в конце 1997 года, а последняя версия (2.2.8) вышла в ноябре 1998. Первая официальная версия 3.0 была подготовлена к выходу в октябре 1998, завершив развитие ветви 2.2

Третье ветвление произошло 20 января 1999 года: появились ветви 4.0-Current и 3.X-Stable. Из ветви 3.X-Stable были получены: 3.1 -- 15 февраля 1999, 3.2 -- 15 мая 1999, 3.3 -- 16 сентября 1999, 3.4 -- 20 декабря 1999, 3.5 -- 24 июня 2000, за которым последовал через несколько дней немного обновленный релиз 3.5.1, содержащий несколько исправлений в области защиты Kerberos. Это был последний релиз из ветви 3.X.

Другое ветвление было выполнено 13 марта 2000 года, в результате чего появилась ветвь 4.X-Stable. Из этой ветви было выпущено несколько релизов: 4.0-Release был представлен в марте 2000 года, а последний 4.11-Release был выпущен в январе 2005 года.

5.0-Release был анонсирован 19 января 2003 года. Он стал кульминацией приблизительно трех лет работы, с этого релиза начался курс FreeBSD на расширенную поддержку мультипроцессорности и потоков в приложениях, а также появилась поддержка платформ UltraSPARC и ia64. За этим релизом последовал релиз 5.1 в июне 2003 года. Последним релизом 5.X из ветви -Current стал 5.2.1-Release, представленный в феврале 2004.

Ветвь Releng_5 была создана в августе 2004, затем последовал выпуск релиза 5.3-Release, который открыл серию релизов из ветви 5-Stable. Самый последний релиз 5.5-Release был выпущен May 2006. Из ветви Releng_5 релизы больше выпускаться не будут.

Очередная ветвь, RELENG_6, была создана в июле 2005 года. 6.0-Release, первый релиз из этой ветви, был выпущен в ноябре 2005 года. Последний из релизов ветви RELENG_6, 6.2-Release, был выпущен Jan 2007. А 18 января 2008 года был выпущен 6.3-Release.

На данный момент основными разработками являются 7.0-Current и 8.0-Current.




Сетевые решения. Статья была опубликована в номере 02 за 2008 год в рубрике software

©1999-2021 Сетевые решения