NetBSD — это бесплатная операционная система Unix с открытым исходным кодом, основанная на дистрибутиве программного обеспечения Беркли (BSD). Это был первый потомок BSD с открытым исходным кодом, официально выпущенный после разветвления 386BSD . [4] [5] Он продолжает активно развиваться и доступен для многих платформ, включая серверы, настольные компьютеры, портативные устройства, [5] и встроенные системы . [6] [7]
Проект NetBSD фокусируется на ясности кода, тщательном проектировании и переносимости на многие компьютерные архитектуры . Его исходный код общедоступен и имеет разрешительную лицензию . [8] [9] [10]
NetBSD была первоначально получена из версии 4.3BSD-Reno дистрибутива программного обеспечения Беркли от Исследовательской группы компьютерных систем Калифорнийского университета в Беркли через выпуск исходного кода Net/2 и проект 386BSD . [5] Проект NetBSD начался в результате разочарования сообщества разработчиков 386BSD темпами и направлением разработки операционной системы. [11] Четыре основателя проекта NetBSD, Крис Деметриу, Тео де Раадт , Адам Гласс и Чарльз Ханнум, считали, что более открытая модель разработки принесет пользу проекту: модель, ориентированная на переносимый, чистый и правильный код. Они стремились создать унифицированную, многоплатформенную, качественную операционную систему на базе BSD. Название «NetBSD» было выбрано исходя из важности и роста таких сетей , как Интернет , в то время, а также распределенного и совместного характера их развития. [12]
Репозиторий исходного кода NetBSD был создан 21 марта 1993 года, а первая официальная версия NetBSD 0.8 была выпущена 19 апреля 1993 года . Версия Net/2 отсутствует в реинтегрированной 386BSD, а также в различных других улучшениях. [13] [14] Первая многоплатформенная версия, NetBSD 1.0, была выпущена в октябре 1994 года и, будучи обновлена исходными кодами 4.4BSD-Lite, была свободна от всего юридически обремененного кода 4.3BSD Net/2. [15] Также в 1994 году по спорным причинам из проекта был отстранен один из основателей, Тео де Раадт. Позже, ближе к концу 1995 года, он основал новый проект OpenBSD на основе разветвленной версии NetBSD 1.0. [16] В 1998 году в NetBSD 1.3 появилась коллекция пакетов pkgsrc . [17]
До 2004 года выпуски NetBSD 1.x выпускались примерно раз в год, с небольшими выпусками «исправлений» между ними. Начиная с версии 2.0, NetBSD использует семантическое управление версиями , и каждому основному выпуску NetBSD соответствует увеличенный номер основной версии, т. е. основными выпусками, следующими за 2.0, являются 3.0, 4.0 и так далее. Предыдущие второстепенные выпуски теперь разделены на две категории: «стабильные» выпуски обслуживания xy и выпуски xyz , содержащие только исправления безопасности и критические исправления. [18]
Как следует из девиза проекта ( «Конечно, он работает под управлением NetBSD» ), NetBSD была портирована на большое количество 32- и 64-битных архитектур . Они варьируются от миникомпьютеров VAX до КПК Pocket PC . По состоянию на 2019 год NetBSD поддерживает 59 аппаратных платформ (с 16 различными наборами инструкций ). Ядро и пользовательская среда для этих платформ построены из центрального унифицированного дерева исходного кода, управляемого CVS . В настоящее время, в отличие от других ядер, таких как μClinux , ядро NetBSD требует наличия MMU в любой заданной целевой архитектуре.
Переносимости NetBSD способствует использование интерфейсов уровня абстракции оборудования для низкоуровневого доступа к оборудованию, такого как ввод/вывод по шине или DMA . Используя этот уровень переносимости, драйверы устройств можно разделить на «машинно-независимые» и «машинно-зависимые» компоненты. Это позволяет легко использовать один драйвер на нескольких платформах, скрывая детали доступа к оборудованию, и сокращает работу по его переносу на новую систему. [19]
Это позволяет конкретному драйверу устройства для карты PCI работать без изменений, независимо от того, находится ли он в слоте PCI на IA-32 , Alpha , PowerPC , SPARC или другой архитектуре с шиной PCI. Кроме того, один драйвер для конкретного устройства может работать через несколько разных шин, таких как ISA , PCI или PC Card .
Эта независимость от платформы помогает разработке встроенных систем , особенно начиная с NetBSD 1.6, когда вся цепочка компиляторов , ассемблеров , компоновщиков и других инструментов полностью поддерживает кросс-компиляцию .
В 2005 году в качестве демонстрации портативности и пригодности NetBSD для встроенных приложений компания Technologic Systems, поставщик оборудования для встраиваемых систем, разработала и продемонстрировала кухонный тостер на базе NetBSD . [20]
Коммерческие порты для встраиваемых платформ были доступны и поддерживались компанией Wasabi Systems, включая такие платформы, как AMD Geode LX800, процессоры Freescale PowerQUICC , Marvell Orion, семейство процессоров PowerPC AMCC 405 , а также серии Intel XScale IOP и IXP.
Среда кросс-компиляции NetBSD (также известная как «build.sh» [21] ) позволяет разработчику построить полную систему NetBSD для архитектуры из более мощной системы другой архитектуры ( кросс-компиляция ), в том числе в другой операционной системе. (фреймворк поддерживает большинство POSIX -совместимых систем). Некоторые встроенные системы, использующие NetBSD, не требовали никакой дополнительной разработки программного обеспечения, кроме набора инструментов и целевого повторного хостинга. [22]
NetBSD включает pkgsrc (сокращение от «источник пакета»), структуру для создания и управления пакетами стороннего прикладного программного обеспечения . Коллекция pkgsrc насчитывает более 20 000 пакетов по состоянию на октябрь 2019 года [обновлять]. [23] Сборка и установка таких пакетов, как Lumina , KDE , GNOME , HTTP-сервер Apache или Perl , выполняется с помощью системы make-файлов . Это может автоматически получить исходный код, распаковать, исправить, настроить, собрать и установить пакет, чтобы его можно было снова удалить позже. Альтернативой компиляции из исходного кода является использование предварительно скомпилированного двоичного пакета. В любом случае любые необходимые условия/зависимости будут установлены автоматически системой пакетов без необходимости вмешательства вручную.
pkgsrc поддерживает не только NetBSD, но и несколько других вариантов BSD, таких как FreeBSD и Darwin / macOS , а также другие Unix-подобные операционные системы, такие как Linux , Solaris , IRIX и другие, а также Interix . pkgsrc ранее был принят в качестве официальной системы управления пакетами для DragonFly BSD . [24]
NetBSD поддерживает SMP с момента выпуска NetBSD 2.0 в 2004 году [25] , который первоначально был реализован с использованием подхода гигантской блокировки . Во время цикла разработки выпуска NetBSD 5 была проделана большая работа по улучшению поддержки SMP; большинство подсистем ядра были модифицированы для использования подхода детальной блокировки . Были реализованы новые примитивы синхронизации , а активация планировщика была заменена моделью потоков 1:1 в феврале 2007 года. [26] Был реализован масштабируемый планировщик потоков M2, хотя старый планировщик 4.4BSD по-прежнему остается планировщиком по умолчанию, но был изменен для масштабирования с помощью SMP. Для улучшения синхронизации были реализованы поточные программные прерывания . Система виртуальной памяти , распределитель памяти и обработка ловушек стали безопасными для MP. Структура файловой системы, включая VFS и основные файловые системы, была изменена для обеспечения безопасности MP. С апреля 2008 года единственными подсистемами, работающими с гигантской блокировкой, являются сетевые протоколы и большинство драйверов устройств .
NetBSD предоставляет различные функции в области безопасности. [27] Структура авторизации ядра [28] (или Kauth) — это подсистема, управляющая всеми запросами авторизации внутри ядра и используемая в качестве общесистемной политики безопасности. Это позволяет внешним модулям подключаться к процессу авторизации. NetBSD также включает функции защиты от эксплойтов, ASLR , [29] KASLR, ограниченный mprotect() и Segvguard из проекта PaX , а также расширения компилятора GCC Stack Smashing Protection (SSP, или также известный как ProPolice, включенный по умолчанию, начиная с NetBSD 6.0). Проверенные исполняемые файлы (или Veriexec) — это встроенная подсистема обеспечения целостности файлов в NetBSD. Он позволяет пользователю устанавливать цифровые отпечатки (хеши) файлов и предпринимать ряд различных действий, если файлы не совпадают с их отпечатками. Например, можно разрешить Perl запускать только сценарии, соответствующие их отпечаткам. [30] Драйвер криптографического устройства (CGD) позволяет использовать диски или разделы (включая компакт-диски и DVD-диски) для зашифрованного хранения. [31]
Монитор виртуальных машин Xen поддерживается в NetBSD с версии 3.0. Для использования Xen требуется специальная среда загрузки перед ядром, которая загружает специализированное ядро Xen в качестве «хостовой ОС» (Dom0). Любое количество виртуализированных компьютеров с «гостевой ОС» (DomU) со специальной поддержкой Xen/DomU или без нее может работать параллельно с соответствующими аппаратными ресурсами.
Необходимость в стороннем менеджере загрузки, таком как GRUB, была устранена с появлением Xen-совместимого менеджера загрузки NetBSD 5. [32] NetBSD 6 как Dom0 сравнивался с Linux, и в некоторых тестах производительность была выше, чем у Linux. [33]
Начиная с NetBSD 9.0, ускоренная виртуализация обеспечивается через встроенный гипервизор NVMM (монитор виртуальных машин NetBSD). [34]
Он предоставляет API виртуализации, libnvmm
который может использоваться такими эмуляторами, как QEMU . Уникальным свойством NVMM является то, что ядро никогда не обращается к памяти гостевой виртуальной машины, а только создает ее. [35]
Диспетчер аппаратного ускорения выполнения Intel (HAXM) предоставляет альтернативное решение для ускорения в QEMU только для процессоров Intel, аналогичное KVM в Linux . [36]
В NetBSD 5.0 появилось ядро Rump — архитектура для запуска драйверов в пространстве пользователя путем эмуляции вызовов пространства ядра. Эта архитектура Anykernel позволяет добавлять поддержку драйверов NetBSD к другим архитектурам ядра, от экзоядер до монолитных ядер . [37]
NetBSD включает в себя множество корпоративных функций, таких как iSCSI , журналируемую файловую систему , управление логическими томами и файловую систему ZFS .
Интерфейс bio(4) для независимого от производителя управления томами RAID через bioctl доступен в NetBSD с 2007 года. [38]
Журналируемая файловая система WAPBL , расширение файловой системы BSD FFS, была разработана компанией Wasabi Systems в 2008 году. [39]
Диспетчер логических томов NetBSD основан на BSD-реализации драйвера устройства сопоставления и порта инструментов диспетчера логических томов Linux . В основном он был написан во время Google Summer of Code 2008. [40]
Файловая система ZFS , разработанная Sun Microsystems, была импортирована в базовую систему NetBSD в 2009 году.
Файловая система флэш-памяти CHFS была импортирована в NetBSD в ноябре 2011 года. CHFS — это файловая система, разработанная на факультете разработки программного обеспечения Университета Сегеда , Венгрия , и первая файловая система с открытым исходным кодом, предназначенная для флэш-памяти, написанная для NetBSD.
На уровне исходного кода NetBSD почти полностью совместим со стандартом POSIX .1 (IEEE 1003.1-1990) и в основном совместим с POSIX.2 (IEEE 1003.2-1992).
NetBSD обеспечивает двоичную совместимость на уровне системных вызовов на соответствующих процессорных архитектурах со своими предыдущими выпусками, а также с некоторыми другими UNIX -производными и UNIX-подобными операционными системами, включая Linux и другие производные 4.3BSD, такие как SunOS 4. Это позволяет пользователям NetBSD запускать множество приложений, которые распространяются только в двоичной форме для других операционных систем, обычно без существенной потери производительности. [41]
В NetBSD также поддерживаются различные форматы «чужих» дисковых файловых систем , включая ZFS , FAT , NTFS , Linux ext2fs , Apple HFS и OS X UFS , RISC OS FileCore/ADFS, AmigaOS Fast File System , IRIX EFS , Unix-файл версии 7. System и многое другое через PUFFS .
Сценарии в пространстве ядра с использованием языка программирования Lua были добавлены в NetBSD 7.0. [42] Язык Lua (т.е. его интерпретатор и стандартные библиотеки) был первоначально перенесен в ядро NetBSD во время Google Summer of Code 2010 и с тех пор претерпел несколько улучшений. Есть два основных различия между пространством пользователя и пространством ядра Lua: ядро Lua не поддерживает числа с плавающей запятой ; поэтому доступны только целые числа Lua. Он также не имеет полной поддержки библиотек пользовательского пространства, зависящих от операционной системы (например, io и os ).
NetBSD имеет встроенную структуру мониторинга оборудования с 1999/2000 года. В 2003 году он послужил источником вдохновения для создания инфраструктуры sysctl hw.sensors OpenBSD , когда некоторые драйверы NetBSD переносились на OpenBSD. [43]
По состоянию на март 2019 года [обновлять]в NetBSD было около 85 драйверов устройств, экспортирующих данные через API платформы envsys. Начиная с версии 2007 года, сериализация данных между ядром и пользовательской средой осуществляется через списки свойств XML с помощью proplib(3) NetBSD .
Чистый дизайн, высокая производительность, масштабируемость и поддержка многих архитектур NetBSD привели к ее использованию во встроенных устройствах и серверах, особенно в сетевых приложениях. [45]
Коммерческая операционная система реального времени QNX использует сетевой стек, основанный на коде NetBSD, [46] [47] и предоставляет различные драйверы, портированные из NetBSD. [45]
Dell Force10 использует NetBSD в качестве базовой операционной системы, поддерживающей FTOS (операционную систему Force10), которая используется в коммутаторах/маршрутизаторах с высокой масштабируемостью. [48] Force10 также сделала пожертвование в фонд NetBSD Foundation в 2007 году, чтобы помочь дальнейшим исследованиям и сообществу открытой разработки. [49]
Wasabi Systems предоставляет коммерческий продукт Wasabi Certified BSD на базе NetBSD с собственными корпоративными функциями и расширениями, ориентированными на встраиваемые, серверные приложения и приложения для хранения данных. [50]
NetBSD использовалась в проекте НАСА SAMS-II по измерению условий микрогравитации на Международной космической станции [51] [52] и для исследования TCP для использования в спутниковых сетях. [53] [54]
В 2004 году SUNET использовала NetBSD для установления рекорда скорости Интернета2 . NetBSD был выбран «из-за масштабируемости TCP-кода». [55]
NetBSD также используется в продуктах Apple AirPort Extreme и Time Capsule [56] [57] вместо их собственной OS X (большая часть пользовательского кода уровня Unix которой получена из кода FreeBSD, но некоторая часть получена из кода NetBSD [58] [ 59] ).
Операционная система смартфона T-Mobile Sidekick LX 2009 основана на NetBSD. [60]
Операционная система Minix использует в основном пользовательскую среду NetBSD, а также инфраструктуру пакетов pkgsrc, начиная с версии 3.2. [61]
Части macOS изначально были взяты из NetBSD, например некоторые инструменты командной строки пользовательского пространства. [62] [63] [64]
Все ядро NetBSD и большая часть основного исходного кода пользовательской среды выпускается на условиях лицензии BSD (варианты с двумя, тремя и четырьмя пунктами). По сути, это позволяет каждому использовать, изменять, распространять или продавать его по своему усмотрению, при условии, что они не удаляют уведомление об авторских правах и текст лицензии (варианты из четырех пунктов также включают условия, относящиеся к рекламным материалам). Таким образом, разработка продуктов на базе NetBSD возможна без необходимости внесения изменений в исходный код в открытый доступ. Напротив, GPL , которая не распространяется на NetBSD, предусматривает, что изменения в исходном коде продукта должны быть переданы получателю продукта при выпуске продуктов, созданных на основе этих изменений.
20 июня 2008 года Фонд NetBSD объявил о переходе на лицензию BSD, состоящую из двух пунктов, сославшись на обеспокоенность по поводу поддержки UCB пункта 3 и отраслевой применимости пункта 4. [65]
NetBSD также включает инструменты разработки GNU и другие пакеты, на которые распространяется лицензия GPL и другие лицензии с открытым исходным кодом. Как и другие проекты BSD , NetBSD разделяет их в своем базовом дереве исходного кода, чтобы упростить удаление кода, находящегося под более строгими лицензиями. [66] Что касается пакетов, то установленными лицензиями на программное обеспечение можно управлять путем изменения списка разрешенных лицензий в файле конфигурации pkgsrc ( mk.conf
).
В следующей таблице перечислены основные выпуски NetBSD и их примечательные особенности в обратном хронологическом порядке. Второстепенные выпуски и патчи не включены.
Логотип NetBSD «флаг», разработанный Грантом Биссеттом, был представлен в 2004 году и представляет собой абстракцию их старого логотипа, [92] разработанного Шоном Мюллером в 1994 году. Версия Мюллера была основана на знаменитой фотографии времен Второй мировой войны, поднимающей флаг на Иводзима . [93]
Фонд NetBSD является юридическим лицом, владеющим интеллектуальной собственностью и товарными знаками, связанными с NetBSD, [94] и 22 января 2004 года стал некоммерческой организацией, освобожденной от налогов в соответствии со статьей 501(c)3 . Членами фонда являются разработчики, имеющие доступ к фиксации CVS. [95] Фонд NetBSD имеет Совет директоров, избираемый голосованием членов сроком на два года. [96]
Хостинг для проекта предоставляется в основном Колумбийским университетом и Университетом Западного Вашингтона , возглавляемыми CDN , предоставляемым Fastly . Зеркала для проекта разбросаны по всему миру и предоставлены волонтерами и сторонниками проекта.
NetBSD — это ответвление 386/BSD операционной системы Berkeley Software Distribution (или BSD).
NetBSD фокусируется на чистом дизайне и хорошо продуманных решениях.
Некоторыми примерами высокопереносимых операционных систем являются Minix, NetBSD и многие исследовательские системы.
Две операционные системы действительно имеют много общего кода, например, большинство пользовательских утилит и библиотека C в OS X созданы из версий FreeBSD.
NetBSD разделяет их в своем базовом дереве исходного кода, чтобы упростить удаление кода под более строгими лицензиями.
Каждый директор избирается на должность в течение двух лет.