Доступен значительный релиз операционной системы NetBSD 9.0, в котором реализована очередная порция новых возможностей. Для загрузки подготовлены установочные образы размером 470 Мб. Релиз NetBSD 9.0 официально доступен в сборках для 57 системных архитектур и 15 различных семейств CPU.
Отдельно выделены 8 первично поддерживаемых портов, составляющих ядро стратегии развития NetBSD: amd64, i386, evbarm, evbmips, evbppc, hpcarm, sparc64 и xen. 49 портов, связанных с такими CPU, как alpha, hppa, m68010, m68k, sh3, sparc и vax, отнесены ко второй категории, т.е. ещё поддерживаются, но уже потеряли актуальность или не имеют достаточного числа заинтересованных в их развитии разработчиков. Один порт (acorn26) включён в третью категорию, в которой размещены неработоспособные порты, претендующие на удаление, если не найдётся заинтересованных в их разработке энтузиастов.
Ключевые улучшения NetBSD 9.0:
- Добавлен новый гипервизор NVMM, поддерживающий аппаратные механизмы обеспечения виртуализации SVM для CPU AMD и VMX для CPU Intel. Особенностью NVMM является то, что на уровне ядра выполняется только минимально необходимый набор обвязок вокруг аппаратных механизмов виртуализации, а весь код эмуляции оборудования вынесен из ядра в пространство пользователя. Для управления виртуальными машинами подготовлен инструментарий на базе библиотеки libnvmm, а также пакет qemu-nvmm для запуска гостевых систем с использованием NVMM. API libnvmm охватывает такие функции как создание и запуск виртуальной машины, выделение памяти гостевой системе, распределение VCPU. При этом libnvmm не содержит функции эмулятора, а лишь предоставляет API, позволяющий интегрировать поддержку NVMM в существующие эмуляторы, такие как QEMU;
- Обеспечена поддержка 64-разрядной архитектуры AArch64 (ARMv8-A), включая серверные системы, соответствующие требованиям ARM ServerReady (SBBR+SBSA), и системы big.LITTLE (комбинация в одном чипе мощных, но потребляющих много энергии, ядер, и менее производительных, но более энергоэффективных ядер). Поддерживается выполнение 32-разрядных приложений в 64-разрядном окружении через использование COMPAT_NETBSD32. Возможно использование до 256 CPU. Поддерживается запуск в эмуляторе QEMU и SoC:
- Allwinner A64, H5, H6
- Amlogic S905, S805X, S905D, S905W, S905X
- Broadcom BCM2837
- NVIDIA Tegra X1 (T210)
- Rockchip RK3328, RK3399
- Серверные платы SBSA/SBBR, такие как Amazon Graviton, Graviton2, AMD Opteron A1100, Ampere eMAG 8180, Cavium ThunderX, Marvell ARMADA 8040.
- Расширена поддержка устройств на базе архитектуры ARMv7-A. Добавлена поддержка систем big.LITTLE и загрузки через UEFI. Возможно использование до 8 CPU. Добавлена поддержка SoC:
- Allwinner A10, A13, A20, A31, A80, A83T, GR8, H3, R8
- Amlogic S805
- Arm Versatile Express V2P-CA15
- Broadcom BCM2836, BCM2837
- Intel Cyclone V SoC FPGA
- NVIDIA Tegra K1 (T124)
- Samsung Exynos 5422
- TI AM335x, OMAP3
- Xilinx Zynq 7000
- Обновлены графические драйверы для GPU Intel (добавлена поддержка Intel Kabylake), NVIDIA и AMD для систем x86. Подсистема DRM/KMS синхронизирована с ядром Linux 4.4. Добавлены новые драйверы для GPU, применяемые на системах ARM, включая DRM/KMS-драйверы для Allwinner DE2, Rockchip VOP и TI AM335x LCDC, драйвер framebuffer для ARM PrimeCell PL111 и TI OMAP3 DSS;
- Улучшена поддержка работы NetBSD в качестве гостевой ОС. Добавлена поддержка устройства fw_cfg (QEMU Firmware Configuration), Virtio MMIO и PCI для ARM. Обеспечена поддержка HyperV для x86;
- Реализованы счётчики для мониторинга производительности, позволяющие на лету анализировать производительность ядра и пользовательских приложений. Управление производится через команду tprof. Поддерживаются платформы Armv7, Armv8, и x86 (AMD и Intel);
- Для архитектуры x86_64 добавлен механизм рандомизации адресного пространства ядра (KASLR, Kernel Address Space Layout Randomization), который позволяет увеличить стойкость к некоторым видам атак, эксплуатирующих уязвимости в ядре, за счёт формирования случайной раскладки кода ядра в памяти при каждой загрузке;
- Для архитектуры x86_64 добавлена поддержка KLEAK, техники для выявления утечек памяти ядра, которая позволила найти и исправить более 25 ошибок в ядре;
- Для архитектур x86_64 и Aarch64 реализован отладочный механизм KASan (Kernel address sanitizer), который позволяет выявлять ошибки работы с памятью, такие как обращения к уже освобождённым блокам памяти и переполнения буферов;
- Добавлен механизм KUBSAN (Kernel Undefined Behavior Sanitizer) для выявления случаев неопределённого поведения в ядре
- Для архитектуры x86_64 реализован драйвер KCOV (Kernel Coverage) для анализа покрытия кода ядра;
- Добавлен Userland Sanitizer для выявления ошибок и аномалий при выполнении приложений в пространстве пользователя;
- Добавлен механизм KHH (Kernel Heap Hardening) для защиты кучи от некоторых видов ошибок работы с памятью;
- Проведён аудит безопасности сетевого стека;
- Улучшен отладочный инструментарий ptrace;
- Проведена чистка ядра от старых и оставшихся без сопровождения подсистем, таких как NETISDN (драйверы daic, iavc, ifpci, ifritz, iwic, isic), NETNATM, NDIS, SVR3, SVR4, n8, vm86 и ipkdb;
- Расширены возможности и проведена оптимизация производительности пакетного фильтра NPF, который теперь активирован по умолчанию;
- Обновлена реализация файловой системы ZFS, которая доведена до состояния, пригодного для повседневного использования. Возможности загрузки с ZFS и использования ZFS на корневом разделе пока не поддерживаются;
- Добавлены новые драйверы, включая bwfm для беспроводных устройств Broadcom (Full-MAC), ena для Amazon Elastic Network Adapter и mcx для Ethernet-адаптеров Mellanox ConnectX-4 Lx EN, ConnectX-4 EN, ConnectX-5 EN, ConnectX-6 EN;
- Переработана подсистема SATA, в которой появилась поддержка NCQ и улучшена обработка ошибок, выдаваемых накопителем;
- Предложен новый фреймворк usbnet для создания драйверов для Ethernet-адаптеров с интерфейсом USB;
- Обновлены версии сторонних компонентов, включая GCC 7.4, GDB 8.3, LLVM 7.0.0, OpenSSL 1.1.1d, OpenSSH 8.0 и SQLite 3.26.0.