NetBSD — это бесплатная и открытая Unix-подобная операционная система , основанная на Berkeley Software Distribution (BSD). Это был первый потомок BSD с открытым исходным кодом, официально выпущенный после того, как 386BSD был форкнут . [4] [5] Он продолжает активно разрабатываться и доступен для многих платформ, включая серверы, настольные компьютеры, карманные устройства, [5] и встроенные системы . [6] [7]
Проект NetBSD фокусируется на ясности кода, тщательном проектировании и переносимости на многие компьютерные архитектуры . Его исходный код находится в открытом доступе и лицензирован разрешительно . [8] [9] [10]
NetBSD изначально была получена из релиза 4.3BSD-Reno Berkeley Software Distribution от Computer Systems Research Group Калифорнийского университета в Беркли через его исходный код Net/2 и проект 386BSD . [5] Проект NetBSD начался в результате разочарования в сообществе разработчиков 386BSD темпами и направлением разработки операционной системы. [11] Четыре основателя проекта NetBSD, Крис Деметриу, Тео де Раадт , Адам Гласс и Чарльз Ханнум, посчитали, что более открытая модель разработки пойдет на пользу проекту: модель, сосредоточенная на переносимом, чистом, правильном коде. Они стремились создать унифицированную, многоплатформенную, производственного качества, основанную на BSD операционную систему. Название «NetBSD» было выбрано на основе важности и роста сетей, таких как Интернет в то время, и распределенного, совместного характера ее разработки. [12]
Репозиторий исходного кода NetBSD был создан 21 марта 1993 года, а первый официальный релиз, NetBSD 0.8, был выпущен 19 апреля 1993 года. [13] Он был получен из 386BSD 0.1 плюс неофициальный патч-кит версии 0.2.2, с несколькими программами из релиза Net/2, отсутствовавшими в 386BSD, повторно интегрированными, и различными другими улучшениями. [13] [14] Первый многоплатформенный релиз, NetBSD 1.0, был выпущен в октябре 1994 года и, будучи обновленным исходными кодами 4.4BSD-Lite, он был свободен от всего юридически обремененного кода 4.3BSD Net/2. [15] Также в 1994 году по спорным причинам один из основателей, Тео де Раадт, был исключен из проекта. Позже он основал новый проект OpenBSD , на основе ответвленной версии NetBSD 1.0 ближе к концу 1995 года. [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 поставлялась с twm в качестве предварительно настроенного графического интерфейса ( менеджера окон ); в 2020 году (версия 9.1) он был изменен на более современный и универсальный CTWM . [19]
Как следует из девиза проекта ( «Конечно, он запускает NetBSD» ), NetBSD была портирована на большое количество 32- и 64-битных архитектур . Они варьируются от мини-компьютеров VAX до карманных ПК . NetBSD также была портирована на несколько игровых консолей, таких как Sega Dreamcast [20] и Nintendo Wii [21] . По состоянию на 2019 год NetBSD поддерживает 59 аппаратных платформ (в 16 различных наборах инструкций ). Ядро и пользовательское пространство для этих платформ построены из центрального унифицированного дерева исходного кода, управляемого CVS . В настоящее время, в отличие от других ядер, таких как μClinux , ядро NetBSD требует наличия MMU в любой заданной целевой архитектуре.
Переносимость NetBSD поддерживается использованием интерфейсов уровня абстракции оборудования для низкоуровневого доступа к оборудованию, такого как шинный ввод/вывод или DMA . Используя этот уровень переносимости, драйверы устройств могут быть разделены на «машинонезависимые» и «машинозависимые» компоненты. Это делает один драйвер легко используемым на нескольких платформах, скрывая детали доступа к оборудованию, и сокращает работу по его переносу на новую систему. [22]
Это позволяет определенному драйверу устройства для карты PCI работать без модификаций, независимо от того, находится ли он в слоте PCI на IA-32 , Alpha , PowerPC , SPARC или другой архитектуре с шиной PCI. Кроме того, один драйвер для определенного устройства может работать через несколько различных шин, таких как ISA , PCI или PC Card .
Эта независимость от платформы способствует разработке встраиваемых систем , особенно начиная с NetBSD 1.6, когда вся цепочка инструментов компиляторов , ассемблеров , компоновщиков и других инструментов полностью поддерживает кросс-компиляцию .
В 2005 году в качестве демонстрации переносимости NetBSD и пригодности для встраиваемых приложений компания Technologic Systems, поставщик оборудования для встраиваемых систем, разработала и продемонстрировала кухонный тостер на базе NetBSD . [23]
Компания Wasabi Systems предоставила и поддержала коммерческие порты на встраиваемые платформы, включая такие платформы, как AMD Geode LX800, процессоры Freescale PowerQUICC , Marvell Orion, семейство процессоров PowerPC AMCC 405 , а также серии Intel XScale IOP и IXP.
Фреймворк кросс-компиляции NetBSD (также известный как "build.sh" [24] ) позволяет разработчику построить полную систему NetBSD для архитектуры из более мощной системы другой архитектуры ( кросс-компиляция ), в том числе на другой операционной системе (фреймворк поддерживает большинство POSIX -совместимых систем). Несколько встраиваемых систем, использующих NetBSD, не потребовали никакой дополнительной разработки программного обеспечения, кроме набора инструментов и целевого рехоста. [25]
NetBSD имеет pkgsrc (сокращение от «package source»), фреймворк для сборки и управления пакетами стороннего прикладного программного обеспечения . Коллекция pkgsrc состоит из более чем 20 000 пакетов по состоянию на октябрь 2019 года [обновлять]. [26] Сборка и установка пакетов, таких как Lumina , KDE , GNOME , Apache HTTP Server или Perl , выполняется с помощью системы makefiles . Она может автоматически извлекать исходный код, распаковывать, исправлять, настраивать, собирать и устанавливать пакет таким образом, чтобы его можно было удалить позже. Альтернативой компиляции из исходного кода является использование предварительно скомпилированного бинарного пакета. В любом случае любые предварительные условия/зависимости будут установлены автоматически системой пакетов без необходимости ручного вмешательства.
pkgsrc поддерживает не только NetBSD, но и несколько других вариантов BSD, таких как FreeBSD и Darwin / macOS , а также другие Unix-подобные операционные системы, такие как Linux , Solaris , IRIX и другие, а также Interix . Ранее pkgsrc была принята в качестве официальной системы управления пакетами для DragonFly BSD . [27]
NetBSD поддерживает SMP с момента выпуска NetBSD 2.0 в 2004 году, [28] который изначально был реализован с использованием подхода гигантской блокировки . В ходе цикла разработки выпуска NetBSD 5 была проделана большая работа по улучшению поддержки SMP; большинство подсистем ядра были изменены для использования подхода мелкозернистой блокировки . Были реализованы новые примитивы синхронизации , а активация планировщика была заменена на потоковую модель 1:1 в феврале 2007 года. [29] Был реализован масштабируемый планировщик потоков M2, хотя старый планировщик 4.4BSD по-прежнему остается планировщиком по умолчанию, но был изменен для масштабирования с помощью SMP. Были реализованы потоковые программные прерывания для улучшения синхронизации. Система виртуальной памяти , распределитель памяти и обработка ловушек были сделаны безопасными для MP. Структура файловой системы, включая VFS и основные файловые системы, были изменены для обеспечения безопасности MP. С апреля 2008 года единственными подсистемами, работающими с гигантской блокировкой, являются сетевые протоколы и большинство драйверов устройств .
NetBSD предоставляет различные функции в области безопасности. [30] Структура авторизации ядра [31] (или Kauth) — это подсистема, управляющая всеми запросами авторизации внутри ядра и используемая в качестве общесистемной политики безопасности. Она позволяет внешним модулям подключать процесс авторизации. NetBSD также включает функции смягчения эксплойтов, ASLR , [32] KASLR, ограниченный mprotect() и Segvguard из проекта PaX , а также расширения компилятора GCC Stack Smashing Protection (SSP, также известный как ProPolice, включенный по умолчанию с NetBSD 6.0). Verified Executables (или Veriexec) — это подсистема целостности файлов в ядре NetBSD. Она позволяет пользователю устанавливать цифровые отпечатки (хэши) файлов и выполнять ряд различных действий, если файлы не соответствуют их отпечаткам. Например, можно разрешить Perl запускать только те скрипты, которые соответствуют их отпечаткам. [33] Драйвер криптографического устройства (CGD) позволяет использовать диски или разделы (включая CD и DVD) для зашифрованного хранения. [34]
Монитор виртуальной машины Xen поддерживается в NetBSD с версии 3.0. Использование Xen требует специальной среды загрузки pre-kernel, которая загружает специализированное ядро Xen как «хостовую ОС» (Dom0). Любое количество «гостевых ОС» (DomU) виртуализированных компьютеров, с поддержкой Xen /DomU или без нее, может работать параллельно с соответствующими аппаратными ресурсами.
Необходимость в стороннем менеджере загрузки, таком как GRUB, была устранена с появлением Xen-совместимого менеджера загрузки NetBSD 5. [35] NetBSD 6 как Dom0 была протестирована на производительность, сопоставимую с Linux, и в некоторых тестах показала лучшую производительность, чем Linux. [36]
Начиная с NetBSD 9.0, ускоренная виртуализация обеспечивается через собственный гипервизор NVMM (NetBSD Virtual Machine Monitor). [37]
Он предоставляет API виртуализации, libnvmm
который может быть использован такими эмуляторами, как QEMU . Уникальным свойством NVMM является то, что ядро никогда не обращается к памяти гостевой виртуальной машины, а только создает ее. [38]
Intel's Hardware Accelerated Execution Manager (HAXM) предоставляет альтернативное решение для ускорения в QEMU только для процессоров Intel, аналогичное Linux's KVM . [39]
NetBSD 5.0 представила ядро rump , архитектуру для запуска драйверов в пространстве пользователя путем эмуляции вызовов пространства ядра. Эта архитектура anykernel позволяет добавлять поддержку драйверов NetBSD к другим архитектурам ядра, от экзоядер до монолитных ядер . [40]
NetBSD включает в себя множество корпоративных функций, таких как iSCSI , журналируемая файловая система , управление логическими томами и файловая система ZFS .
Интерфейс bio (4) для управления томами RAID независимо от поставщика через bioctl доступен в NetBSD с 2007 года. [41]
Журналируемая файловая система WAPBL , расширение файловой системы BSD FFS, была представлена Wasabi Systems в 2008 году. [42]
NetBSD Logical Volume Manager основан на BSD-реализации драйвера-картографа устройств и порте инструментов Linux Logical Volume Manager . Он был в основном написан во время Google Summer of Code 2008. [43]
Файловая система ZFS , разработанная Sun Microsystems, была импортирована в базовую систему NetBSD в 2009 году.
Файловая система флэш-памяти CHFS была импортирована в NetBSD в ноябре 2011 года. CHFS — это файловая система, разработанная на кафедре программной инженерии Сегедского университета ( Венгрия) , и первая файловая система с открытым исходным кодом для Flash, написанная для NetBSD.
На уровне исходного кода NetBSD практически полностью соответствует стандарту POSIX .1 (IEEE 1003.1-1990) и в основном соответствует стандарту POSIX.2 (IEEE 1003.2-1992).
NetBSD обеспечивает двоичную совместимость на уровне системных вызовов на соответствующих архитектурах процессоров с предыдущими версиями, а также с несколькими другими UNIX -производными и UNIX-подобными операционными системами, включая Linux и другие производные 4.3BSD, такие как SunOS 4. Это позволяет пользователям NetBSD запускать множество приложений, которые распространяются только в двоичной форме для других операционных систем, как правило, без существенной потери производительности. [44]
В NetBSD также поддерживаются различные форматы «чужих» файловых систем дисков, включая ZFS , FAT , NTFS , Linux ext2fs , Apple HFS и OS X UFS , RISC OS FileCore/ADFS, AmigaOS Fast File System , IRIX EFS , Version 7 Unix File System и многие другие через PUFFS .
Скрипты пространства ядра с языком программирования Lua были добавлены в NetBSD 7.0. [45] Язык Lua (т. е. его интерпретатор и стандартные библиотеки) был первоначально перенесен в ядро NetBSD во время Google Summer of Code 2010 и с тех пор претерпел несколько улучшений. Существует два основных различия между пользовательским и ядерным пространством Lua: ядро Lua не поддерживает числа с плавающей точкой ; как таковое, доступны только целые числа Lua. Он также не имеет полной поддержки библиотек пользовательского пространства, которые полагаются на операционную систему (например, io и os ).
NetBSD имеет собственную структуру мониторинга оборудования с 1999/2000. В 2003 году она послужила источником вдохновения для структуры OpenBSD sysctl hw.sensors , когда некоторые драйверы NetBSD были перенесены в OpenBSD. [46]
По состоянию на март 2019 года [обновлять]NetBSD имела около 85 драйверов устройств, экспортирующих данные через API фреймворка envsys. Начиная с версии 2007 года сериализация данных между ядром и пользовательским пространством выполняется через списки свойств XML с помощью proplib(3) NetBSD .
Чистый дизайн NetBSD, высокая производительность, масштабируемость и поддержка многих архитектур привели к ее использованию во встраиваемых устройствах и серверах, особенно в сетевых приложениях. [48]
Коммерческая операционная система реального времени QNX использует сетевой стек на основе кода NetBSD [49] [50] и предоставляет различные драйверы, перенесенные из NetBSD. [ 48]
Dell Force10 использует NetBSD в качестве базовой операционной системы, которая поддерживает FTOS (операционная система Force10), которая используется в коммутаторах/маршрутизаторах с высокой масштабируемостью. [51] Force10 также сделала пожертвование в NetBSD Foundation в 2007 году для поддержки дальнейших исследований и сообщества открытой разработки. [52]
Wasabi Systems предоставляет коммерческий продукт Wasabi Certified BSD на основе NetBSD с фирменными корпоративными функциями и расширениями, которые ориентированы на встроенные, серверные и хранилища приложений. [53]
NetBSD использовалась в проекте NASA SAMS-II по измерению условий микрогравитации на Международной космической станции [54] [ 55] и для исследований TCP для использования в спутниковых сетях. [56] [57]
В 2004 году SUNET использовала NetBSD для установления рекорда скорости Internet2 Land Speed Record. NetBSD была выбрана «из-за масштабируемости кода TCP». [58]
NetBSD также используется в продуктах Apple AirPort Extreme и Time Capsule [59] [60] вместо собственной OS X от Apple (большая часть пользовательского кода уровня Unix которой получена из кода FreeBSD, но некоторая часть получена из кода NetBSD [61] [62] ).
Операционная система смартфона T-Mobile Sidekick LX 2009 основана на NetBSD. [63]
Операционная система Minix использует в основном пользовательское пространство NetBSD, а также инфраструктуру пакетов pkgsrc, начиная с версии 3.2. [64]
Части macOS изначально были взяты из NetBSD, например, некоторые инструменты командной строки пользовательского пространства. [65] [66] [67]
Все ядро NetBSD и большая часть исходного кода ядра пользовательского пространства выпускаются на условиях лицензии BSD (варианты из двух, трех и четырех пунктов). По сути, это позволяет каждому использовать, изменять, распространять или продавать его по своему усмотрению, при условии, что он не удалит уведомление об авторских правах и текст лицензии (варианты из четырех пунктов также включают условия, относящиеся к рекламным материалам). Таким образом, разработка продуктов на основе NetBSD возможна без необходимости вносить изменения в общедоступный исходный код. Напротив, GPL , которая не применяется к NetBSD, предусматривает, что изменения в исходном коде продукта должны быть переданы получателю продукта, когда продукты, полученные из этих изменений, выпускаются.
20 июня 2008 года NetBSD Foundation объявила о переходе на двухпунктную лицензию BSD, сославшись на обеспокоенность по поводу поддержки UCB пункта 3 и применимости в отрасли пункта 4. [68]
NetBSD также включает в себя инструменты разработки GNU и другие пакеты, которые покрываются GPL и другими лицензиями с открытым исходным кодом. Как и в случае с другими проектами BSD , NetBSD разделяет их в своем базовом дереве исходного кода, чтобы упростить удаление кода, находящегося под более строгими лицензиями. [69] Что касается пакетов, установленные лицензии программного обеспечения можно контролировать, изменяя список разрешенных лицензий в файле конфигурации pkgsrc ( mk.conf
).
В следующей таблице перечислены основные выпуски NetBSD и их примечательные особенности в обратном хронологическом порядке. Незначительные выпуски и исправления не включены.
Логотип NetBSD «flag», разработанный Грантом Биссетом, был представлен в 2004 году и является абстракцией старого логотипа, [96] разработанного Шоном Мюллером в 1994 году. Версия Мюллера была основана на знаменитой фотографии времен Второй мировой войны «Поднятие флага над Иводзимой» . [97]
NetBSD Foundation — это юридическое лицо, которому принадлежат права интеллектуальной собственности и товарные знаки, связанные с NetBSD, [98] и 22 января 2004 года стала некоммерческой организацией, освобожденной от налогов 501(c)3 . Членами фонда являются разработчики, имеющие доступ к CVS. [99] NetBSD Foundation имеет Совет директоров, избираемый голосованием членов на два года. [100]
Хостинг для проекта в основном предоставляется Колумбийским университетом и Университетом Западного Вашингтона , а также CDN , предоставленным Fastly . Зеркала для проекта распределены по всему миру и предоставляются волонтерами и сторонниками проекта.
Проект определяет руководящие принципы для внесения изменений в исходное дерево CVS . 4 апреля 2004 года была опубликована его первая версия 1.1. [101] 10 руководящих принципов этой версии можно суммировать следующим образом: [102] [103]
В мае 2024 года второе руководство было расширено, чтобы указать, что код, созданный « большой языковой моделью или аналогичной технологией», не должен быть передан без предварительного письменного одобрения со стороны ядра. [104] [105]
NetBSD — это ответвление ветви 386/BSD операционной системы Berkeley Software Distribution (или BSD).
фокусируется на чистом дизайне и хорошо спроектированных решениях.
Примерами высокопортативных операционных систем являются Minix, NetBSD и многие исследовательские системы.
Две операционные системы действительно имеют много общего кода, например, большинство пользовательских утилит и библиотека C в OS X получены из версий FreeBSD.
разделяет их в своем базовом исходном дереве, чтобы упростить удаление кода с более строгими лицензиями.
Каждый директор исполняет обязанности в течение двух лет.