NetBSD: трицятиріччя
Застосовуваність: ця робота може бути використана як дидактичний матеріал курсу операційні системи
кафедри теоретичної інформатики інституту формальної математики.
Об'єкт та предмет: операційна система NetBSD.
Мета та завдання: розкриття мотивації та історія UNIX культури.
Вступ
Після переходу від мейнфреймових систем MULTICS на PL/1 для IBM на мікрокомʼютери та мову C виникло поняття UNICS. AT&T Bell Labs вийшла з проекту ше в 1969, а остання версія MULTICS MR12.5 вийшла в 1992 році в MIT. Саме тоді починалася історія UNIX таку як ми її знаємо зараз. Коли Томпсон та Річі вийшли з Bell Labs вони почали створювати UNIX, а університет MIT правовласник MULTICS почав оразу рухатися в тому ж напрямку. Так виникли головні два відгалуження UNIX які відомі зараз як System V та BSD.
У традиційній термінології операційної системи ядро — це невеликий прошарок програмного забезпечення, яке забезпечує лише мінімальні можливості, необхідні для реалізації додаткових служб операційної системи. Ще до початку розробки UNIX існувала на той час потужна теорія операційних систем у томи числі на мікроядрах: 1) Chorus [Rozier et al, 1988]; 2) Mach [Accetta et al, 1986]; 3) Tunis [Ewens et al, 1985]; 4) V Kernel [Cheriton, 1988]. Мікроядра — це гранулярний розподіл функціональності поміж сервісів які є відображенням апаратури. Такі служби, як файлові системи та мережеві протоколи, реалізуються як клієнтські прикладні процеси ядра або ядра.
На основі теорії Mach (а саме кодової бази версії 2.5) був створений пакет 4.3BSD в MIT який ще називався Net/2, Net/1 можна назвати експерименти які проводилися на апаратурі VAX. Версія 4.4 цього пакету і лягла в основу NetBSD, як основної операційної системи класу UNICS Каліфорнійського університету Берклі або просто Berkeley Software Distribution.
Мотивація
У той час коли вчення про мінімалізм у програмному забезпеченні втрачає своїх адептів, а професія програміста деградувала до DevOps дебілів, ми все ще маємо можливість нюхнути справжної каліфорнійської культури мінімалізму, який ліг в основу всіх BSD відгалужень (OpenBSD, NetBSD, FreeBSD). Головна мотивація BSD, а також UNICS загалом полягала в мінімізації кодової бази (бампінг) до максимального рівня, зокрема завдяки побудові проміжних мов, якою стала мова С. Компілятори мови С існують навіть для 8-бітних платформ, таких як Z80, хоча UNIX будувалися вже для 16-бітних архітектур. Якщо ваша операційна система не має на меті бескомпромісний мінімалізм, то вона не відповідає мотивації UNIX. Нам дуже пощастило, що ми маємо зараз історію викарбовану в 30-річний досвід який до цих пір є основою сучасних обчислень.
В 1995 році Тео де Раадт керуючись принципами Benevolent dictator for life (BFDL), послав нахуй товариство NetBSD і заснував власний форк NetBSD — в основу якого поклав філософію безпеки (головним чином range-check та вихід за границі буферів, щоб унеможливити розробку експоїтів, то чим зараз займаються такі системи як Valgrind, фактично він був піонером ручної математичної верифікації коду). NetBSD ж як університетський проект поставив собі за мету покрити максимальну кількість архітектур. Якось святий Тео де Раадт посрався з пацанами в мейл лісті з приводу ліцензії на IPFilter фаєрвол і за ніч написав pf (пакетний фільтр, який є сучасним прототипом-компонентом мережевого стеку всіх BSD ситсем). Святі мають ємність аби собі це дозволити, бидло так не може. Половину всього шо ви знаєте про сучасні UNIX вийшло з благословення Тео: OpenSSH, OpenBGPD, OpenVPN, LibreSSL, strlcat/strlcpy, тощо.
Джордан Хаббард, керівник проекту FreeBSD (1993) яка мала на мету проникнення в корпоративний сектор, був запрошений Стівом Джобсом для UNIX-сифікації Mach 3 мікро-ядра яле стало основою xnu/Darwin, та розповсюдження POSIX/UNIX BSD на userland операційної системи. Дуже багато userlang коду NetBSD та FreeBSD і по цей день складає основу macOS (Mac OS X). Джордан Хаббард зараз працює старшим директором по обчислювальному програмному забезпеченні для GPU в nVidia.
Детально про самі останнії події в NetBSD світі можна дізнатися з цієї презентації Нії Аларії. Хоча там йдеться про CURRENT версію 10.0 все що там говориться є актуальним і для STABLE версії 9.3, про яку йдеться у цій статті.
Портовуваність
Головною метою за завданням NetBSD товариства стало підтримка максимальної кількості архітектур зокрема для збереження культурної спадщини, ретрогеймінга та ретро-компʼютінга загалом. Головним девізом стало гасло "якшо на цій архітектурі можна запустити NetBSD — вона повинна бути запущена". Завдяки BSD ліцензії, гарній портовуваності та якості NetBSD лягла в основу не тільки багатьох культових продуктів таких як SONY PlayStation 3/4/5, Apple AirPort, RICOH прінтери, але і в основу державних системи таких як NASA Satellite Networks (LewisRC), де вся мережа побудована виключно на TCP/IP NetBSD, де і була придумана схема FACK TCP.
Інсталяція та перформанс
NetBSD як сучасна операційна система підтримує GPT, а MBR за замовчуванням виключена з ядра. Тому я конвертнув всі свої диски в GPT, і після NetBSD вже поклав MBR на поличку історії в куточок ком'ютерної археології. Хоча експозиція лейбла NetBSD ще не передається в UEIF BIOS, там ви побачите рядок UEFI OS, все виглядає дуже зручно, хоча бутлоадер вміє запускати тільки ядро тільки FFS дисків. Для інталяції бажано підготувати повний фізичний диск розміром в 1ТБ, а не GPT партішин, який в термінології NetBSD називається wedge. Також вам знадобиться зовнішній USB пристрій з якого ви будете інсталювати систему, я використовув Rawrite32 NetBSD Disk Image Tool.
NetBSD поки що не підтримує всі Wi-Fi, тому перед інсталяцією попіклуйтеся про твістей пейр кабель. Заплановано портування Wi-Fi стеку з FreeBSD як це зробили в проекті Haiku, можливо це з'явиться в 10 версії, а може і в 11. Прямо в інсталяторі виберіть і наклацайте всі компоненти, разом з вихідними файлами, бо саме для цього ми її ставимо, аби детально прочитати її імплементацію. Інсталяція триватиме певний час, тож на всьо вам знадобиться 1 день, аби в повній мірі насолодитися цим процесом. Після існсталяції, налаштуйте систему бінарних пакетів.
Якшо ви не хочете скачувати всі пакети і вихідні файли в процесі інсталяції то це можна зробити пізніше використовуючи такі адреси:
Використовуючи такі команди
Компіляція ядра
На моїй системі X299 неправильно працює MSI-X система налаштування переривань, тому її довелося відключити в ядрі, яке довелося перезібрати, nvme_pci_force_intx змінилося з 0 на 1, а також, що те саме nvme_pci_mq з 1 на 0:
Загалом білд система ядра не мінялася десятиріччя і виглядає так:
Не забудьте включити в ядрі підтримку KGDB, підтримку всіх типів Wedge, статистику SYSCALL, NTFS файлову систему (якшо треба), а також VMX/SVM менеджер віртуалізації NVMM. Для цього перед made depent поредагуйте і дослідіть конфігураційний файл ядра:
ZFS
Незважаючи на те, що ZFS повністю присутня в інсталяції тільки FreeBSD, на NetBSD теж показує себе стабільно. Реальний даунгрейд перформенса на сучасних NVMe пристроях складає 3х, тобто на дисках з теоретичною пропускною здатністю 1ТБ/с в raidz пулі ви отримаєте 300МБ/с. Це не добре і не погано, з урахуванням того, що ZFS є супернадійною, реально працюючою розподіленою системою, яка охоплює весь спектр апаратури і операційних систем та є міжсистемно-сумісною.
UVM
Одна з особливостей NetBSD є її менеджер віртуальної пам'яті написаний як докторська дисертація Чарльза кренора. UVM використовується також у проекті OpenBSD. FreeBSD ж використовує похідну реалізацію проекта Mach 3. UVM вже стала канонічною MMU реалізацією менеджера віртуальної пам'яті, однак NetBSD потребує ще однієї, не MMU версії для запуска на процесорах без цією апаратної підсистеми, так як в uLinux. Ця задача до цих пір відкрита в NetBSD трекері. В 2019 році відбулася значна оптимізація UVM менеджера для SMP систем, що призвело до загальної стабільності та продуктивності системи вцілому.
NVMM
NVMM — це гіпервізор типу 2 і платформа гіпервізора, яка забезпечує підтримку апаратно-прискореної віртуалізації. API віртуалізації постачається в libnvmm і дозволяє існуючим емуляторам, таким як Qemu, легко створювати віртуальні машини та керувати ними через NVMM. NVMM був розроблений у 2018 році та спочатку підтримував NetBSD як основну ОС. У 2021 році остання версія NVMM була перенесена на DragonFlyBSD, і тоді DragonFlyBSD стала основною ОС, яку підтримує NVMM. NVMM може підтримувати до 128 віртуальних машин, кожна з яких має максимум 128 VCPU і 128 ГБ оперативної пам’яті. Він працює як з процесорами x86 AMD, так і з процесорами x86 Intel. NVMM має унікальні конструктивні властивості, яких зараз немає в інших рішеннях гіпервізорах, таких як xhyve (macOS), bhyve (FreeBSD), VMD (OpenBSD), HAXM (NetBSD). Хоча автор каже шо в NetBSD версія NVMM застаріла, і основна розробка перенеслася в DragonflyBSD, в мене все працює стабільно. Причина в тому, що автор посварився з командою NetBSD, і тепер код NVMM з'являється в дереві NetBSD лише як бекпорт з основної гілки DragonflyBSD. Страсті і мелодрами у світі розробки це нормально!
CTWM
Починаючи з 2020 року, дефаултний віндов менеджер в NetBSD є CTWM, це фактично класичний TWM тільки з підтримкою віртуальних десктопів. Мотивація такого вибору є його висока портовуваність і простота, що співпадає з мотивацією NetBSD, тому не просіть в NetBSD навіть XFCE, це занадто жирні штуку. Хоча ви все одно поставите Firefox і з ним приїде половину GTK, тільки CTWM дасть вам відчути справжній спартанський мінімалізм ЮНІКСІВ минулого.
SYNRC N2O
SYNRC стек працює на всьому, де є Erlang. Для того аби почати працювати з Erlang стеком SYNRC достатньо поставити Erlang (в NetBSD 9.3 це 25.1.2) та скомпілювати rebar3:
Після цього одразу можна переходити до SYNRC SAMPLE прикладу, який побудований на PubSub брокері SYN, веб-фреймворку NITRO, WebSocket сервері N2O, базі даних MNESIA, та представляє собою чат додаток з кімнатами та завантаженням файлів, всьо по веб-сокет протоколу та з використанням природнього (для Erlang) серіалізатора BERT (що швидше на стороні браузера навіть від JSON!), який дозволяє не використовувати на сервері взагалі ніяких додаткових перетворень, для економії серверного часу, що в масштабі мільйонів клієнтів коштує до 10% грошей.
Детальніше про SYNRC стек читайте на сторінках N2O.DEV.
PKGSRC
Для публікації нових пакетів в NetBSD (NetBSD Package Release Engineering) використовується така схема:
Варіанти курсового завдання
Апарат:
[1]. NetBSD.org.
[2]. Sung-Won Chung. The Design of the NetBSD I/O Subsystems.
[3]. The NetBSD Guide.
[4]. The Design and Implementation of the 4.4BSD Operating System.
[5]. Charles D. Cranor. Design and implementation of the UVM virtual memory system.
[6]. The Joy of X.
[7]. Oracle® Solaris Administration: ZFS File Systems.
[8]. HP-UX. Using the X Window System.
[9]. X Toolkit Intrinsics — C Language Interface.
[10]. X Window System Protocol, Version 11, Release 6.8.