«Конечно, оно работает на NetBSD» — таков официальный слоган операционки, которой посвящен сегодняшний обзор. Долгое время NetBSD держала первенство как самая портабельная ОС в мире и, если говорить о технической стороне вопроса, до сих пор продолжает лидировать. Это единственная BSD, способная запускать драйверы, файловую систему и сетевой стек в пространстве пользователя, а сами драйверы здесь можно писать на скриптовом языке Lua. Компоненты этой системы ты можешь найти везде, начиная от роутеров и заканчивая смартфонами и игровыми консолями.

 

Истоки

NetBSD — первая из доживших до наших дней BSD-система, отпочковавшаяся от 386BSD. В 1993 году группа разработчиков, в составе которой был Тео де Раадт, скопировала исходный код 386BSD, интегрировала в него неофициальные патчи и другие наработки, а также некоторые компоненты BSD Net/2 и выпустила NetBSD 0.8. Девизом новой ОС стала полностью открытая модель разработки, высокое качество кода и хорошая портируемость, а слово Net в начале имени означало ориентированность ОС на применение в сети Интернет и распределенный принцип разработки.

Сегодня NetBSD уже доросла до версии 7.0, и ее развитие все больше ускоряется. В том или ином виде NetBSD можно встретить повсюду, включая многие модели роутеров и встраиваемой электроники. На NetBSD основана операционка карманной игровой консоли Sony PSP, высокоуровневые части системы используются в MINIX 3, Android (toolbox — набор инструментов командной строки, правда недавно он был заменен на Toybox), DragonFly BSD (система управления портами/пакетами pkgsrc) и огромном количестве других систем.

Процесс загрузки NetBSD
Процесс загрузки NetBSD

Но почему NetBSD до сих пор жива как цельная система и кому нужно ее развитие, когда все силы можно бросить на разработку той же FreeBSD? Тут все дело в банальной философии разработчиков и векторе развития проекта. Разработчики NetBSD пропагандируют написание кода с оглядкой на максимальную переносимость и, как следствие, качество и модульность, без всяких поблажек. И если с командой OpenBSD их интересы в основном пересекаются, то FreeBSD, которая уже давно превратилась из идейной академической ОС в мейнстримовый продукт, точно идет совсем другим путем.

В целом люди работают над NetBSD ради фана и получения опыта, а сама система — это очень хороший полигон для экспериментов и опробования идей. И появившаяся в последних версиях экспериментальная система rump-ядер и скриптинга ядра — самое красноречивое тому доказательство. NetBSD — это чисто академическая ОС, которая тем не менее отличается высоким качеством кода, простотой и стабильностью. А компактность и простота портирования на новое железо делает ее прекрасным решением для встраиваемой электроники.

Инсталлятор NetBSD
Инсталлятор NetBSD
 

Переносимость

Сборки NetBSD 7.0 доступны для 58 архитектур, включая 16 различных семейств CPU, а в списке поддерживаемых присутствуют все популярные платы для разработчиков, в том числе Raspberry Pi 2, ODROID-C1, BeagleBoard и Cubieboard2.

Тостер под управлением NetBSD
Тостер под управлением NetBSD

Ты можешь сказать, что в сравнении с тем, где работает Linux, 58 архитектур — это ерунда, и будешь прав. Но только отчасти. Дело в том, что между терминами «переносимость» и «количество поддерживаемых платформ» существуют коренные различия. Linux доступен для такого большого числа платформ не потому, что он так прекрасно и просто портируется, а из-за банальной популярности. Любой, кто плотно работал с кодом ядра Linux, знает, что, несмотря на то что в ядре, в общем-то, соблюдается разделение на платформенно зависимый/независимый код, зачастую оно нарушается, а само ядро представляет собой большой запутанный комок кода. Код NetBSD, напротив, четко структурирован и имеет несколько слоев абстракций от железа.

Драйверы в NetBSD полностью абстрагированы от платформы, включая такие ее компоненты, как шина ввода-вывода, DMA, прерывания или что угодно еще. Драйвер работает исключительно с абстрактными сущностями, что позволяет использовать его на любой архитектуре вообще без модификаций. Более того, один и тот же драйвер можно брать для разных версий периферии, подключаемой к разным шинам. На странице NetBSD приводится пример драйвера fxp для сетевых карт Intel. Один и тот же драйвер используется для архитектур alpha, arc, cats, cobalt, i386, macppc, prep, и он же — для PCI- и Cardbus-версий сетевой карты без всякого дополнительного кода. На самом деле ядро NetBSD настолько грамотно разделено на независимые слои, что даже процесс портирования на новую архитектуру здесь значительно проще, чем в других ОС. Портирование NetBSD на x86_64 в свое время заняло всего месяц, тогда как у разработчиков Linux на это ушло полгода. А теперь представь, насколько разные по количеству участников команды это делали!

 

Rump-ядро

Одним из побочных эффектов разделения кода NetBSD на независимые слои стала концепция так называемых rump-ядер. Технология позволяет запустить сильно урезанный и облегченный вариант ядра NetBSD в пространстве пользователя как обычный процесс или даже собрать его в форме разделяемой библиотеки. При этом в таком ядре могут работать почти любые драйверы или подсистемы (стек TCP/IP, например), запросы которых к оборудованию будут происходить с помощью специальных гипервызовов к основному ядру.

Продолжение статьи доступно только подписчикам

Вариант 1. Оформи подписку на «Хакер», чтобы читать все статьи на сайте

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта, включая эту статью. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке

Вариант 2. Купи одну статью

Заинтересовала статья, но нет возможности оплатить подписку? Тогда этот вариант для тебя! Обрати внимание: этот способ покупки доступен только для статей, опубликованных более двух месяцев назад.


1 комментарий

Подпишитесь на ][, чтобы участвовать в обсуждении

Обсуждение этой статьи доступно только нашим подписчикам. Вы можете войти в свой аккаунт или зарегистрироваться и оплатить подписку, чтобы свободно участвовать в обсуждении.

Check Also

Конкурс хаков: пишем на PowerShell скрипт, который уведомляет о днях рождения пользователей Active Directory

В компаниях часто встречается задача уведомлять сотрудников о приближающихся днях рождения…