NetBSD版本更新录(202x)
2022-08-13 07:36:19 阿炯

本站赞助商链接,请多关照。 本文是从NetBSD的产品主页分离出来的,专门用于该发行版本的更新记录,截止到2030年之前。NetBSD是一份免费的、安全的及高度可移植的开源UNIX操作系统,它适合于很多种平台,从64-bit的AlphaServers及桌面系统到手持及嵌入式系统。它在设计上非常整洁,并拥有先进的特性,这使得它在业界和学术界都有口皆碑。用户可通过完整的源代码来获得支持。很多应用程序都可容易地从 NetBSD Packages Collection获得。


最新版本:6.0
主要增加了线程本地存储以及LVM功能,详情请查看发行说明


最新版本:7.0
这是 NetBSD 操作系统的第五个重大版本。此版本包括稳定性改进,数百个 bug 修复,及大量的新特性。值得关注的新特性:
DRM/KMS 支持,使用 Intel 和 Radeon 设备加速 x86 图形化
多处理器 ARM 支持
支持大量的新 ARM 板
重要的 NPF 改进
USB 子系统的多处理器支持
blacklistd(8),新守护进程,集成 packet 过滤器
磁盘块处理方面的大量改进
通过扩展分区菜单在 sysinst 支持 GPT
Lua 内核脚本
epoc32,新端口,支持 Psion EPOC PDAs
GCC 4.8.4,支持 C++11
可选完整的 BSD 许可证下的 C/C++ runtime env:compiler_rt, libc++, libcxxrt

更多改进请看发行说明

最新版本:8.0
此次更新带来了稳定性改进、数百个 bug 修复和许多新功能,带来了稳定性改进、数百个错误修复和许多新的特性。其中亮点如下:详情见发行公告
此版本带来了一些安全与稳定性 bug 修复,并有新特性和功能增强:
x86:缓解 INTEL-SA-00233 (MDS)。
修复了各种本地用户内核数据泄漏。
x86:新的 rc.conf(5) 设置 smtoff 以禁用同步多线程。
一些网络驱动修复与改进。
修复了 PIE 中的线程本地存储(TLS)。
修复了 tmpfs 中的性能回退问题。
DRM/KMS 改进与一些 sh(1) 修复。
新增 Broadcom FullMAC PCI 和 USB 无线驱动 bwfm(4) 。
新增 mfii(4) SAS 驱动。
dhcpcd(8) 更新到 7.2.2。
重制 USB 堆栈,增加了 USB3 支持。
内核中的音频混合器(audio_system(9))。
可重复的构建(MKREPRO,请参阅 mk.conf(5))。
可用的完整用户态调试信息(MKDEBUG,请参阅 mk.conf(5))。虽然大多数安装介质都没有附带(出于大小原因),但之后可根据需要下载和提取 debug 和 xdebug 集。它们为所有基础系统、X 二进制文件(X binaries)和库提供完整的符号信息,并允许更好的错误报告和(用户空间)崩溃分析。
默认情况下,PaX MPROTECT(W^X)内存保护在一些具有细粒度内存保护和合适 ELF 格式的体系结构上强制执行:i386,amd64,evbarm,landisk。
默认情况下启用PaX ASLR(地址空间布局随机化):i386,amd64,evbarm,landisk,sparc64。
默认情况下,为用户空间采用位置无关的可执行文件(Position Independent Executables):i386,amd64,arm,m68k,mips,sh3,sparc64。
添加新的套接字层 can(4) 用于 CAN 总线上的设备通信。
添加了一个特殊的伪接口 ipsecif(4),用于基于路由的 VPN 。
网络堆栈的某些部分已经成为 MP 安全的(MP-safe)。启用此选项需要内核选项 NET_MPSAFE。
总体对网络堆栈进行了强化。
各种 WAPBL(NetBSD 文件系统「日志」选项)的稳定性和性能改进。
特定于 i386 和 amd64 CPU:
对 Meltdown 的缓解措施:默认启用 SVS(Separate Virtual Space,直译作「独立虚拟空间」)。
对SpectreV2 的缓解措施:retpoline(gcc 中的支持),默认用于内核。其他硬件缓解措施也是可用的。
适用于 Intel 和 AMD 的 SpectreV4 缓解措施。
PopSS 解决方法:默认情况下,用户对调试寄存器的访问权限已关闭。
在易受攻击的 Intel CPU(「eagerfpu」)上禁用了 Lazy FUL saving。
支持 SMAP与(U)EFI bootloader。
内存布局的改进和强化:W^X、可写页面更少、一致性更好、性能更好。
大量第三方软件更新。

更多详情请查看更新说明

最新版本:8.2
NetBSD 8.2 现已发布,此版本包括 NetBSD-8 中的所有安全修补程序,以及对稳定性至关重要的其他修补程序。一些重点更新内容如下:
x86:修复了引导旧 CPU 时的回归问题
x86:Hyper-V Gen.2 VM 帧缓冲区支持
httpd(8):修复了各种安全问题
ixg(4):各种修复/改进
x86 efiboot:添加 tftp 支持,修复具有许多内存段的计算机上的问题,改进图形模式逻辑以在更多计算机上工作。
各种内核内存信息泄漏修复程序
将 expat 更新到 2.2.8
修复 ryzen USB 问题并支持 xHCI 版本 3.10。
接受 root 设备规范作为 NAME = label。
向 x86 引导加载程序添加 multiboot 2 支持。
CVE-2019-9506 的修复:“蓝牙的密钥协商”攻击。
nouveau:限制受支持的设备并修复固件加载。
radeon:修复 TAHITI VCE 固件的加载。
named(8):停止使用过时的 dnssec-lookaside。
更多详细信息可参阅发行文档

最新版本:9.1
2020年10月,这是 NetBSD 9 稳定分支的首次更新。作为首个功能和稳定性维护版本,它代表了一些出于安全和稳定性考虑的重要修复,以及引入新特性和增强功能。更新亮点:
使用 cgd(4) 对磁盘进行并行加密
添加 C.UTF-8 语言环境
添加对 Xen 4.13 的支持
改进对 ZFS 的支持以及修复 ZFS 的可靠性问题
升级 NVMM hypervisor,改进虚拟化以及提升性能和稳定性
为 NPF 防火墙增加其他设置项,升级文档以及引入多项关于 npfctl(8) 可用性的改进
改进 X11,默认窗口管理器切换至 ctwm(1),在 xterm(1) 中启用 sixel 支持,针对较旧的 Intel 芯片组进行修复
提升 BSD 日志结构文件系统 (log-structured filesystem) 稳定性
添加对在 raw 模式下使用 USB 安全密钥 (USB security keys) 的支持,支持用于 Firefox 和其他应用程序
在熵的子系统 (entropy subsystem) 支持更多硬件 RNG,包括 Allwinner 和 Rockchip SoC 的 RNG
修复关于音频系统的多项问题,解决了 NetBSD 7 和 OSSv4 兼容性的边缘情况,以及其他问题
添加 Aquantia 10 千兆以太网适配器的驱动程序 aq(4)
添加 Exar 单端口和多端口 USB 串行适配器的驱动程序 uxrcom(4)
改进 ThinkPad 笔记本触控板和“小红帽”的默认输入行为
evbarm GENERIC 内核中内置的 MIDI 音序器和 CGD 支持现在无需加载模块
修复 AArch64 上的 sigaltstack(2),并解决 Go 和 Erlang 所遇到的问题
修复了evbarm AM335xCPU频率缩放问题,并减少了空闲CPU使用率
修复 evbarm AM335x (例如 BeagleBone Black)的 CPU 频率缩放问题(frequency scaling),并减少空闲 CPU 使用率
改进 lastlogin(8), w(1), cal(1) 的输出,并向 hdaudioctl(8) 添加'show'子命令
改进 amd64 在引导过程早期阶段的帧缓冲区控制台性能,从而提升 amd64 引导速度
为 wscons(4) 添加更多内置键盘布局:巴西葡萄牙语、爱沙尼亚语、冰岛语和拉丁美洲西班牙语
升级并修复了集成的第三方组件,包括 GCC, dhcpcd, OpenSSL 和 tzdata
修复多项关于内核内存损坏和信息泄露的问题
其他 bugfix,以及对现有设备驱动程序的补充
更多详情更新内容查看发行公告

v9.2 "Nakatomi Socrates" 已于2021年5月下旬发布,这是 NetBSD 9 发布分支的第二次更新。它代表了自 2020 年 10 月 NetBSD 9.1 发布以来,由于安全或稳定性原因而被认为是重要的修正的子集,以及一些从开发分支回传的改进,它与 NetBSD 9.0 完全兼容。自 NetBSD 9.1 以来的更改如下:

Kernel
netinet:避免信息泄露, NetBSD-SA2021-001:IPv4 和 IPv6 中可预测的 ID 泄露
netinet:修复了"multicast router 发送带有无效 UDP 校验和的 multicast packet"
xen:XSA-362 的修复-后端将授权映射错误视为 bug。恶意的 DomU 可能会触发 Dom0 内核崩溃。
xen:删除了 xennet(4) 和 xvif(4) 中对 rx-flip 模式的支持,作为 XSA-362 修正的一部分(驱动程序已经默认为更快的 rx-copy 模式)。
zfs:各种稳定性修复程序。修复了"在 NFS 提供的 ZFS 上创建目录时出现 panic"的问题。
coda:修复了"coda 客户端打开错误的文件而不是缓存容器"的问题。
hyperv:修复了"无法通过hvn设备进行 ifconfig(8) up/down"的问题。
msdosfs:修复了"BOOTSIG0 和 BOOTSIG1 检查阻止安装 Raspberry Pi Pico 的 USB 大容量存储器"
kern:修复了"在 init(8) 之前加载多个大型 firmware 文件时出现 panic"
fdescfs:修复了"fdescfs 创建的节点有错误的主编号"
procfs:更正了environ节点的权限。
usb:删除了中止路径中的不正确断言,并修复了DIAGNOSTIC启用后的错误断言失败。
sysctl(7):kern.maxfiles默认值现在与系统内存成正比。避免在 hungry 应用程序(例如多进程 Mozilla Firefox)中耗尽资源。
compat_netbsd32(8):对 AArch64 的各种改进:
添加了对 ARMv6 用户空间的支持。现在在 aarch64 服务器上的沙盒中构建 ARMv6 二进制软件包。
添加了对 ptrace(2) 的支持,修复了 clone(2),修复了 core 文件格式。
模拟 ARMv7 中不推荐使用的指令。
compat_linux(8):修复了与使用长于有效的 struct sockaddr_in * 大小的 namelen 的程序的兼容性问题。
threadpool(9):修复了"threadpool_job_cancelthrash测试随机失败"的问题

程序与服务
calendar(1):将 Judaic 日历更新为 2021 年。
ctwm(1):根据用户反馈,调整了默认的窗口管理器配置以提高可访问性。修复了 window focus 问题。
ftp(1):修复了"ftp -q不起作用"的问题。
nl(1):改进的 POSIX 一致性。允许使用-d的一个和两个字符分隔符。
patch(1)::修复了-V none的行为。
progress(1):在写入时处理 EINTR。
httpd(8):从 NetBSD HEAD 更新为 20210227。
在目录索引中添加了README文件支持。
为各种存档和视频格式添加了更多的 MIME 类型。
修复了在 32 位架构上提供大于 4GB 的服务文件。
各种稳定性修复程序。

系统调用和库
kevent(2):修复了kqueue_scan()中的一场 race,它导致了事件的遗漏,以及 Go 计时器的延迟问题。
posix_spawn(3):修复了对POSIX_SPAWN_RESETIDS的处理。
fread(3):优化了对非缓冲 I/O 的缓冲处理, 使该函数的速度提高了几个数量级。

设备驱动程序
pwm_backlight:在用户设置时保存新的亮度水平,防止 Pinebook Pro 的显示亮度在 DPMS 空白后重新设置。
ahcisata(4):各种一致性改进,在 Solidrun Honeycomb LX2K 上支持 SATA。
audio(4):修复了某些硬件上首选环绕声格式的问题,改为首选立体声。
audio(4):: 修复了资源泄漏和锁定问题。
cd(4): 修复了"无法弹出以 sd(4) 连接的 USB 大容量存储器"的问题
ena(4): 修复了"被破坏的 enaevcnts引起 panic"
hilkbd(4):修复了控制台附件中的一个 race condition。

Ports
arm:修复了"Raspberry Pi 4 上 usb_transfer_complete() 的 panic"
arm:sync-lock 和 atomic operations 的修复。
mac68k:添加了MAC68K_MEMSIZE内核选项来解决 Booter 报告大小错误的问题。
mac68k:为 Quadra/Centris 650/800 修正 DJMEMCMAX。
m68k:plugged 内核堆栈的内存泄漏。
sparc:从GENERIC内核中删除DIAGNOSTIC选项。
x68k:修复了 savecore(8)。
zaurus:使 LCD BrightnessUp 和 BrightnessDown 在 C7x0/860 上工作。
修复了在旧架构上的安装问题:
alpha:切换回 .gz sets 以避免 xz extraction 内存耗尽。
miniroot:针对阻止安装问题的各种修复程序,将缺少的设置添加到默认设置。
hp300:删除了 INSTALL 和 RAMDISK 内核中的默认选项,这些选项会导致提取程序时间过长。

构建系统和工具链
build.sh:从工具中删除了通用符号,以允许与较新的编译器进行交叉编译。
build.sh:修复了从 MacOS 与最近的 Clang 交叉构建 NetBSD 的问题。

第三方组件
对 NetBSD 基本系统中的各种第三方组件进行了更新:
openssl(1):更新至 1.1.1k
修复了 CVE-2021-3450, CVE-2021-3449
tmux(1):更新到 3.1c
Xorg(1):对以下内容应用了上游修复程序:
CVE-2021-3472(本地特权升级)。
xdpyinfo(1):修复了"重定向或管道上无xdpyinfo输出"
xterm(1):更新至 366
已修复 CVE-2021-27135:纠正了选择缓冲区的上限,考虑到了组合字符。注意,目前还不清楚这个错误是否适用于 NetBSD。
freetype:更新至 2.10.4
已修复 CVE-2020-15999:处理嵌入式 PNG 位图时的堆缓冲区溢出。注意,这个 bug 不适用于默认配置下的 NetBSD。
tzdata:更新至 2021a
libX11: 修复了 X Input Method 中的 off by one。
xkb:为以下应用了上游修复程序:
CVE-2020-14360 / ZDI-CAN-11572: XkbSetMap 越界访问
CVE-2020-25712 / ZDI-CAN-11839: XkbSetDeviceInfo 基于堆的缓冲区溢出
更多详情可查看发行公告

v9.3 已于2022年8月上旬发布,这是 NetBSD 9 发布分支的第三次更新。它代表了自 2021 年 5 月发布 NetBSD 9.2 以来出于安全或稳定性原因被认为很重要的选定修复子集,以及从开发分支向后移植的一些增强功能,与 NetBSD 9.0 完全兼容。官方强烈建议运行 9.2 或更早版本的用户进行升级。公告指出:NetBSD 社区对 NetBSD 10.0 感到非常兴奋,但开发团队认为有必要在等待解决 NetBSD-current 中有关 FFS 访问控制列表阻止 netbsd-10 发布的一些兼容性问题时,发布这个错误修复版本。除了许多错误修复之外,9.3 还包括:
对 suspend 和 resume 支持的回溯性改进
对现有设备驱动程序的各种新硬件的小规模添加
对 Windows 10 上创建的 UDF 文件系统的兼容性
对较新的英特尔千兆以太网芯片组的增强支持
对新的英特尔和 AMD Zen 3 芯片组的更好支持
对使用安装程序 sysinst (8) 配置连接到 Wi-Fi 网络的支持
对 Commodore Amiga 上基于 wsfb 的 X11 服务器的支持
以及对 Xen hypervisor 的小范围性能改进

在一系列的对各种新硬件的支持之外,还改进了对 Commodore Amiga 的支持。这是 1985 年发布的一种 16 位计算机。甚至其开发商 Commodore 早在 1994 年就倒闭了,但 Amiga 仍然存在少数但狂热的爱好者。如果你能找到一台还能使用的 Amiga,那你就能在上面运行 2022 年的 NetBSD 了。开源就是只要觉得可以就开始做,而不用管是不是有商业价值,也不用那么一本正经。更多详情可查看此处

v10.0 已于2024年4月初发布,其中包含了过去几年中积累的一长串改进和其他增强功能。对于那些尚未升级到 v10.0 的用户来说,v9 系列于2024年4月下旬已更新至 9.4。v9.4 带来了各种稳定性增强和安全修复。v9.3 早在 2022 年就已发布,因此v9.4 的修复内容非常丰富。还包括一些更新的硬件支持,如在各种驱动程序中支持英特尔 600 和 700 系列芯片组,在温度驱动程序和相关组件中支持 AMD Zen 3 和 Zen 4,在 tprof 中支持更新的 CPU,以及为不同的有线/无线网络适配器和其他设备 ASIC 添加各种支持。

v9.4 还针对过去两年中发现的所有安全漏洞更新了 X.Org 服务器,更新了 OpenSSL 以及其他软件包更新。更多信息可参考发行公告

v10.0 首发 Beta,提升性能与硬件支持

v10 的开发工作于 2019 年底启动,经过将近 3 年的开发,NetBSD 10.0 于2022年12月下旬发布了首个 Beta 版本。其公告写道,v10 在性能提升方面将会是一个重要里程碑,尤其是在多核操作系统性能比以前的版本要快许多。不过目前的 Beta 版本启用了一些额外的内核诊断,这可能会稍微降低性能。主要变化如下:
兼容 WireGuard
支持自动为 SWAP 分区进行加密
引入新的磁盘加密方法
在内核实现 CPU 加速
支持更多采用 Arm 架构的硬件,包括 Rockchip RK356X, NXP i.MX 8M, Amlogic G12, Apple M1 和 Raspberry Pi 4
支持最新 ARM CPU 中的新安全功能
支持新的网络适配器,包括 Realtek 2.5 千兆以太网和新的 Intel 10/25/40 千兆以太网适配器
将 compat_linux 移植到 AArch64 架构
将 DTrace 移植到 MIPS
改进对多处理器的支持,提供更多的 iMac G5 支持
对 Xen 虚拟机管理程序支持进行重大修改
为用户空间引入新的程序,包括用于手动修剪磁盘空间的 blkdiscard (8)、用于控制音频音量的 aiomixer (1)、realpath (1) 和 fsck_udf (8)……

最新版本:10
NetBSD v10.0 已经于2024年4月上旬正式发布,这是该操作系统的第18个主要版本。代表了自 NetBSD 9.x 于 2019 年最初分支以来对操作系统的累积改进。

发行公告指出,与之前的 9.3 版本相比,10.0 版本带来了许多改进、新功能和修复。首先也是最重要的,当涉及多核和多处理器系统上的计算和文件系统绑定应用程序时,性能得到了巨大的改进。 NetBSD 10.0 还带来了与其他系统上的实现兼容的 WireGuard 支持,不过目前尚处于实验阶段。此外还增加了对各种 ARM SoC 和主板的支持,包括 Apple 的 M1 芯片,以及新增的对 AArch64 上的 compat_linux 的支持,用于运行 Linux 程序。还有大量新的和更新的驱动程序,尤其是现在已同步到 Linux 5.6 的图形驱动程序,带来了大量的改进。

其他更新内容还包括:
新的 Intel 以太网驱动器、SMP 性能改进
对 Realtek 2.5GbE 网络适配器的支持
自动交换加密,以及过去 4 年多来积累的大量其他硬件支持改进
改进了混合系统的调度程序性能,各种系统调用优化、更快的启动性能、增强的虚拟化支持等等

更多详细信息可查看发布说明

最新版本:11
v11.0 现已于2026年8月上旬正式发布,这是 NetBSD 的第十八个主要版本。自 NetBSD 10.1 以来的变化与更新亮点如下:
新增对 RISC-V 处理器架构的支持。v11.0 是首个支持 64 位 RISC-V 平台的稳定版本,涵盖一系列基于 StarFive JH71XX 的设备,例如 VisionFive 2、PINE64 STAR64,以及 QEMU。
增强了对 POSIX.1-2024 和 C23 编程接口标准的兼容性。
compat_linux(8) 增强了对 Linux 系统调用的支持,包括 epoll(围绕 kqueue 实现)、POSIX 消息队列、statx、readahead、close_range、waitid、renameat2、clone3、sync_file_range、syncfs 和 inotify。
初步支持高通骁龙 X Elite 平台。
对 npf(7) 防火墙进行了改进,包括 layer 2 以及 user/group 过滤。
面向 x86 的新 MICROVM 内核,同时支持 i386 和 amd64。NetBSD 11.0 引入了一个专为极快虚拟机启动而设计的专用 MICROVM 内核,利用 PVH 启动、VirtIO MMIO 以及多项内核优化,可在 2020 年代的 x86 CPU 上约 10 毫秒内完成启动。
新增 virt68k port,用于在 QEMU 中使用半虚拟化设备运行 Motorola 68000 port。

更多详情可查看此处

本次更新带来了对新平台的支持、内核增强以及安全升级,对于开发者和嵌入式系统爱好者而言,这是一个重要的里程碑。v11.0 发布的一大亮点是正式增加了对 RISC-V 64 位 (riscv64) 架构的支持。为 RISC-V 硬件提供全面的“一级(Tier-1)”支持,其中包括对称多处理 (SMP) 功能和更新的驱动程序栈。

内核层面的改进显著提升了受支持硬件平台的性能。内存管理机制经过优化,提高了高核心数 x86_64 机器上的吞吐量;同时,线程调度机制的改进使得系统在进行密集多任务处理和应对繁重服务器负载时,响应速度更快。网络功能在此次发布中也得到了大幅增强。v11.0 引入了更新的网络栈驱动程序,提升了 10GbE 和 40GbE 接口的性能。

此外,现代化的 Wi-Fi 驱动程序增强了对新型无线芯片组的兼容性,从而更好地满足了笔记本电脑部署的需求。安全性始终是 NetBSD 理念的核心,而 11.0 版本进一步强化了这一承诺。此次发布增强了 ASLR(地址空间布局随机化)的覆盖范围,针对现代推测执行漏洞(speculative execution vulnerabilities)加固了内核内存,并将更新后的加密库直接集成到了基础系统中。

作为 NetBSD 灵活且可移植的软件包构建框架,pkgsrc 的软件包管理功能也同步进行了更新。用户可以使用数千个更新后的软件包,包括桌面环境、开发工具链、数据库引擎和 Web 服务器的最新版本,这些软件均可直接部署。

对于使用跨平台工具的开发者和系统管理员而言,Linux 二进制兼容性(compat_linux)功能得到了进一步的现代化改进。该兼容层现已支持更广泛的现代 Linux 系统调用,使得 x86_64 架构的 NetBSD 系统能够无缝运行更多种类的原生 Linux 二进制程序。

对旧架构硬件的支持依然是该项目引以为豪的特色。v11.0 在扩展对现代 ARM64 和 RISC-V 开发板支持的同时,依然保留了对传统架构的支持,有力证明了向后兼容性与前沿功能开发完全可以相辅相成、和谐共存。

v11.0 的安装镜像现已提供,涵盖了适用于 x86_64 和 ARM 架构的 ISO 镜像,以及针对嵌入式平台的可引导磁盘镜像。无论是希望部署极简服务器、探索 RISC-V 开发,还是在老旧硬件上运行 Unix,它都能提供一个稳健可靠且表现可预测的操作系统平台。下面将对其中各项更新要点展开说明。

特色亮点:RISC-V 原生支持、10ms 微虚拟机启动与 Linux 兼容层大升级

NetBSD 项目于2026 年 8 月 1 日正式发布了其第19个重大版本——v11.0。这是拥有近 30 年历史的开源 BSD 操作系统的一次重要跃升:首次原生支持 64 位 RISC-V 架构,新增可在 10 毫秒内启动的 MICROVM 内核,compat_linux 兼容层新增 12 个 Linux 系统调用,并对 POSIX.1-2024 和 C23 标准提供了更好的支持。本节将深入拆解这些核心特性的技术细节,分析它们对开发者和服务端场景的实际影响,并给出上手避坑指南。

1、NetBSD 是什么?为什么 v11.0 值得关注
NetBSD 是三大开源 BSD 操作系统之一(另外两个是 FreeBSD 和 OpenBSD),以极致的可移植性著称——它的官方口号是 "Of course it runs NetBSD"。从 64 位服务器到嵌入式设备,从 x86 到 SPARC、MIPS、ARM,NetBSD 支持的架构数量在所有开源操作系统中名列前茅。

v11.0 的开发周期跨度超过 18 个月,经历了 7 个候选版本(RC)才最终发布。这个版本的核心主题可以概括为三个方面:新架构扩展(RISC-V、Snapdragon X1 Elite)、标准与兼容性提升(POSIX.1-2024、C23、compat_linux)、虚拟化与性能优化(MICROVM、virt68k)。

2、RISC-V 64 位原生支持:首个稳定 BSD 移植
2.1 为什么 RISC-V 支持意义重大
RISC-V 是在加州大学伯克利分校开发的开放指令集架构(ISA),由 RISC-V International(瑞士标准组织,拥有 70 多个国家 4500+ 成员)管理。与 x86(Intel)或 ARM 不同,RISC-V 免版税、无设计许可费——任何公司或开发者都可以设计、制造和销售 RISC-V 芯片,无需支付许可费。

v11.0 是首个提供官方稳定版 RISC-V 64 位移植的 BSD 操作系统。这意味着什么?从硬件到操作系统的全栈无专有许可——RISC-V 开放硬件 + NetBSD BSD 许可证 = 整个技术栈没有任何专有许可要求。

2.2 支持的硬件
v11.0 的 RISC-V 移植主要围绕 StarFive JH7110 SoC 展开:

| 硬件平台 | SoC | 支持程度 | |---------|-----|---------| | VisionFive 2 | StarFive JH7110 | 完整支持(PCIe、TRNG、温度传感器、crash 调试器) | | PINE64 STAR64 | StarFive JH7110 | 完整支持 | | MangoPi MQ Pro | Allwinner D1 | 基础支持(GPIO + UART 串口控制台) | | QEMU 虚拟机 | — | 完整支持(Goldfish RTC、VirtIO 网络/磁盘/音频) |

值得注意的是,JH7110 的实现远不止基础启动——它支持 PCI/PCIe 设备、真随机数生成器(TRNG)、引脚控制(pin control)、温度传感器,以及内核内的 crash(8) 调试器。最后一个功能的存在,表明项目团队将这个移植视为开发就绪目标,而非技术预览。

2.3 Allwinner D1 的局限
Allwinner D1(用于 MangoPi MQ Pro)的支持目前较为有限,只有 GPIO 和 UART 串口控制台。这反映了该 SoC 在 Linux 生态中的成熟度本身就不足,NetBSD 的适配工作目前只复制了其中一部分。

3、MICROVM 内核:10 毫秒启动一台完整虚拟机
3.1 10ms 是什么概念
v11.0 为 x86/amd64 引入了专用的 MICROVM 内核变体,在 2020 年代的 x86 处理器上,可以在约 10 毫秒内启动一台完整的 NetBSD 虚拟机。这个数字把它推到了专用 unikernel 风格系统的领域——但 MICROVM 是一个完整的 NetBSD 环境,不是剥离过的单应用运行时。

MICROVM 10ms 启动原理对比

3.2 传统 VM 启动为什么慢
传统虚拟机启动需要 hypervisor 模拟完整的 PC 固件路径:
1. BIOS 初始化 — 固件自检、硬件初始化
2. PCI 总线枚举 — 扫描每个可能的设备插槽,这个过程可能增加 100ms 以上
3. ACPI 表解析 — 解析高级配置与电源接口表
4. 操作系统内核加载 — 上述步骤完成后才开始

3.3 MICROVM 如何做到 10ms
MICROVM 通过组合三项技术来消除上述开销:

PVH(Para-Virtual Hardware)启动:最初在 Xen 虚拟化项目中开发的协议,完全绕过 BIOS/ACPI 固件层,直接将控制权交给操作系统内核,附带最小化的硬件描述。

VirtIO MMIO(内存映射 I/O):用于设备发现,替代 PCI 总线枚举。VirtIO 是半虚拟化 VM I/O 的事实标准,由 OASIS 维护。MMIO 方式直接将设备映射到内存地址空间,无需总线扫描。

多项内核优化:针对快速启动场景对内核进行裁剪和优化,去除不必要的初始化路径。

3.4 适用场景
MICROVM 极快的启动速度使其非常适合以下场景:

- 云计算:弹性伸缩中频繁创建和销毁虚拟机
- 自动化测试:CI/CD 流水线中每个测试用例启动独立 VM
- 持续集成:需要隔离环境但启动延迟敏感的场景
- Serverless:按需启动的函数计算运行时

4、compat_linux 大升级:12 个新系统调用
4.1 compat_linux 是什么
NetBSD 内置了一个名为 compat_linux(8) 的兼容层,允许在 NetBSD 上直接运行未修改的 Linux 二进制程序。这通过在内核中模拟 Linux 系统调用来实现——当 Linux 程序发出系统调用时,NetBSD 内核识别并翻译为对应的本地实现。

4.2 新增的 12 个系统调用
v11.0 在 compat_linux 中新增了对以下 Linux 系统调用的支持:
| 系统调用 | 用途 | 技术实现要点 |
|---------|------|------------|
| epoll | I/O 多路复用(事件驱动) | 基于 NetBSD 原生 kqueue 机制实现 |
| inotify | 文件系统事件监控 | 文件变化通知 |
| POSIX 消息队列 | 进程间通信 | 消息队列接口 |
| statx | 获取文件状态(增强版) | 比 stat 提供更多字段 |
| readahead | 预读文件数据到页缓存 | 性能优化 |
| close_range | 批量关闭文件描述符 | 简化清理逻辑 |
| waitid | 等待子进程状态变更 | 比 waitpid 更灵活 |
| renameat2 | 原子重命名(增强版) | 支持交换和禁止覆盖标志 |
| clone3 | 创建子进程(新版) | 比 clone 更多的控制选项 |
| sync_file_range | 同步文件指定区间 | 精细控制刷盘 |
| syncfs | 同步整个文件系统 | 比 sync 更精确 |
| — | — | — |

4.3 对开发者的实际影响
这些新增系统调用大幅扩展了 NetBSD 可直接运行的 Linux 二进制程序范围。特别是:

- epoll + inotify 是现代 Linux 服务端程序的标配(nginx、Redis、Node.js 等都依赖它们),它们的加入意味着大量 Linux 服务端软件可以在 NetBSD 上更顺畅地运行
- clone3 改善了对使用新版 glibc 编译的程序的兼容性
- statx / close_range 等较新的系统调用支持,意味着使用最新 Linux SDK 编译的程序也能兼容

5、POSIX.1-2024 与 C23 标准支持
5.1 POSIX.1-2024
POSIX.1-2024 是 IEEE 1003.1 标准的最新版本,v11.0 提升了对该标准的兼容程度。这意味着:
- 遵循 POSIX 标准编写的跨平台代码,在 NetBSD 上的可移植性更好 - 新的标准接口和行为规范得到实现 - 对应用开发者而言,从 Linux 迁移到 NetBSD 的摩擦更小

5.2 C23 标准
C23 是 C 语言的最新标准版本(ISO/IEC 9899:2024),引入了多项新特性:
- `nullptr` 常量 - `true` / `false` 关键字 - `typeof` 运算符标准化 - `#embed` 指令 - 更好的属性语法(`[[attribute]]`) - 位精度整数类型 `_BitInt`

v11.0 对 C23 的支持意味着系统头文件和 API 已适配新标准,开发者可以使用 C23 特性编写 NetBSD 原生程序。

6、其他重要更新
6.1 Qualcomm Snapdragon X1 Elite 初步支持
v11.0 首次对高通骁龙 X1 Elite 平台提供初步支持,包括 Oryon CPU 内核及周边硬件的启用。骁龙 X1 Elite 是高通面向 PC 市场的旗舰 Arm SoC,这意味着未来在搭载此平台的新一代 Arm 笔记本或开发设备上,NetBSD 有望获得运行能力。

6.2 NPF 防火墙增强
NetBSD 自带的 NPF(NetBSD Packet Filter)防火墙获得了重要改进:
- 二层(Layer 2)过滤:可以基于以太网帧头信息进行过滤
- 用户/用户组过滤:可以按本地用户或用户组进行包过滤规则匹配

这使得 NPF 在多租户环境和细粒度访问控制场景中更加实用。

6.3 virt68k 端口
新增 virt68k 端口,可在 QEMU 中通过半虚拟化设备运行 Motorola 68000 端口。这不是一个"怀旧"功能——许多嵌入式系统和工业控制软件仍然运行在 68k 平台上,virt68k 使得在现代环境中高效承载传统 68k 软件生态成为可能。

6.4 图形与驱动
- 为部分 Intel 和 AMD 硬件引入了新的驱动支持 - 在 AArch64 平台上对 X.Org Server 引入了基于 SIMD 的加速优化 - 多项内核层面的性能优化

7、注意事项
7.1 RISC-V 硬件选择
不是所有 RISC-V 开发板都能跑 NetBSD v11.0。
优先选择 VisionFive 2 或 PINE64 STAR64(均基于 StarFive JH7110)。MangoPi MQ Pro(Allwinner D1)只有基础 GPIO + UART 支持,不适合实际使用。如果没有 RISC-V 硬件,QEMU 完全支持 RISC-V 虚拟化,包括 VirtIO 网络/磁盘/音频。

7.2 compat_linux 不是万能的
它虽然新增了 12 个系统调用,但并不意味着所有 Linux 程序都能直接运行。
compat_linux 模拟的是系统调用层,不提供 Linux 用户空间库(glibc、systemd 等)。程序必须是静态链接的,或者你需要手动提供所需的 Linux 共享库 - 依赖 systemd、cgroups、namespace 等较新 Linux 特性的程序仍无法运行 - Docker 容器无法在 compat_linux 中运行(需要 Linux 内核特性) - 建议在 pkgsrc 中查找是否有对应的 NetBSD 原生包

7.3 MICROVM 内核的限制
MICROVM 内核为速度做了裁剪,不是所有功能都可用:
其专为快速启动优化,去除了部分硬件驱动和初始化路径
它使用 PVH 启动和 VirtIO MMIO,需要 hypervisor 支持(如 Xen 或支持 PVH 的 KVM)
不适合需要完整硬件支持的桌面或服务器场景
适合 CI/CD、测试、Serverless 等频繁创建销毁 VM 的场景

7.4 从 v10 升级
跨大版本升级可能有兼容性问题。
仔细阅读 /usr/src/UPDATING 文件中的升级注意事项
建议全新安装而非原地升级,特别是跨架构迁移
注意检查第三方软件包(pkgsrc)的兼容性
备份重要数据后再操作

7.5 Snapdragon X1 Elite 支持是"初步"的
看到"支持 Snapdragon X1 Elite"就以为可以在骁龙笔记本上日常使用。
目前只是初步支持(initial support),包括 Oryon CPU 内核的基本启用。GPU、Wi-Fi、蓝牙、电源管理等外围功能可能还不完善。不适合作为日常主力系统,但适合内核开发者参与适配工作。

8、总结
NetBSD v11.0 是一次以架构扩展和兼容性提升为核心的重要发布。三个最值得关注的技术亮点:
1. RISC-V 64 位稳定移植——首个提供官方稳定版 RISC-V 支持的 BSD 操作系统,实现了从硬件到操作系统的全栈无专有许可。VisionFive 2 和 STAR64 获得完整支持,包括 PCIe、TRNG 和内核调试器。

2. MICROVM 10ms 启动——通过 PVH 启动 + VirtIO MMIO + 内核优化,在 2020 年代 x86 处理器上实现约 10 毫秒启动完整 NetBSD 虚拟机,为云计算和 CI/CD 场景提供了新的可能性。

3. compat_linux 12 个新系统调用——epoll、inotify、clone3 等关键系统调用的加入,大幅扩展了可在 NetBSD 上直接运行的 Linux 二进制程序范围。

对于操作系统爱好者、嵌入式开发者、以及需要在 RISC-V 上运行类 Unix 系统的团队来说,v11.0 值得一试。虽然它在桌面易用性上不如 Linux 发行版,但在可移植性、代码整洁度和许可证自由度上,它有着不可替代的价值。