FreeBSD 14.3-RELEASE 发行说明(2025 年 6 月 10 日)
概述
FreeBSD 14.3-RELEASE 的发行说明概述了在 14-STABLE 开发分支中对 FreeBSD 基本系统所做的更改。本文档列出了自上一个发行版本以来发布的适用安全公告,以及对 FreeBSD 内核和用户态的重要修改。此外,还简要说明了升级过程中的一些事项。
介绍
本文档是 FreeBSD 14.3-RELEASE 的发行说明,说明了 FreeBSD 最近新增、变更和移除的功能,也提供了从旧版本升级的一些说明。
本文档所对应的“release”发行版代表了自 14-STABLE 创建以来,该开发分支上的最新状态。关于该分支上预构建的二进制“release”发行版的信息,可以在 https://www.FreeBSD.org/releases/ 找到。
本文档所对应的“release”发行版,处于 14-STABLE 开发分支上的一个时间点,介于 14.2-RELEASE 与后续的 15.0-RELEASE 之间。关于该分支上预构建的二进制“release”发行版的信息,可参考 https://www.FreeBSD.org/releases/。
FreeBSD 14.3-RELEASE 是一款“release”发行版,可在 https://www.FreeBSD.org/releases/ 及其镜像站点获取。关于获取本发行版(或其他)FreeBSD “release” 版本的更多信息,请参阅 FreeBSD 手册 中的 获取 FreeBSD 附录。
在安装 FreeBSD 之前,建议所有用户都查阅下发行勘误文档。该勘误文档会在发行周期后期或发行完成后,更新“最新发现”的信息。通常包括已知漏洞、安全公告,以及文档修正。可在 FreeBSD 网站上获取 FreeBSD 14.3-RELEASE 的最新勘误文档。
本文档介绍了自 14.2-RELEASE 以来,FreeBSD 中对用户最为突出的新特性或更改。一般而言,除非特别注明为已合并(MERGED)的功能,否则此处所述的更改仅适用于 14-STABLE 分支。
典型的发行说明内容包括在 14.2-RELEASE 之后发布的安全公告、新增驱动和硬件支持、新命令和命令选项、重大漏洞修复,或第三方软件的升级。有时也会列出对重要 Port/包或发行工程实践的变更。显然,发行说明无法列出两个发行版本之间 FreeBSD 所做的所有更改;本文档主要聚焦于安全公告、用户可见的更改,以及重大的架构改进。
从旧版本的 FreeBSD 升级
可以使用 freebsd-update(8) 工具完成不同 RELEASE 版本之间(二进制形式)的升级(以及各安全分支的快照)。有关特定版本升级的详细信息,请参阅 FreeBSD 14.3-RELEASE 升级信息,更多内容也可见于 FreeBSD 手册中的 二进制升级过程。此工具将更新未被修改的用户态工具,以及作为官方 FreeBSD 发行版一部分的未修改 GENERIC 内核。该工具要求升级主机可以连接互联网。
也可以从源代码升级(即通过重新编译 FreeBSD 基本系统实现的升级),操作方法详见 /usr/src/UPDATING 文件中的说明。
在升级 FreeBSD 之前必须先备份 所有 数据和配置文件。
安全与勘误
本节列出了自 14.2-RELEASE 以来发布的各种安全公告与勘误通知。
安全公告
勘误通知
用户空间
本节包括用户空间应用、外部贡献软件和系统工具的更动与新增内容。
用户空间配置变更
用户空间应用变更
修复了 ps(1) 的标志 -U
,使其按真实用户 ID 选择进程。这是 POSIX 对选项 -U
的强制要求,也可以说是大多数用户在多数情境下所需要的行为。此前,-U
会按有效用户 ID 选择进程(而 POSIX 要求选项 -u
才应使用这种行为)。a2132d91739d。(由 FreeBSD 基金会赞助)
使 ps(1) 的 -O
更加灵活且行为可预期。ps(1) 的显示列列表现在首先在不考虑 -O
选项的情况下构建;第二步中,所有通过 -O
传入的列会按其在 -O
参数中的出现顺序插入到显示列表中第一列 PID 后(若 PID 存在;否则插入最前),形成最终输出。1fc8cb547cd4。(由 FreeBSD 基金会赞助)
去除 ps(1) 中未显式请求的重复列。此前在命令行中堆叠更多显示列时,如果用户请求添加某些“预设”显示(如 -j
、-l
、-u
或 -v
),其中与其他已请求列存在重复(即使用了相同关键字,不论标题是否定制化)的字段最终会被省略。7aa2f4826717。(由 FreeBSD 基金会赞助)
为 sysctl(8) 添加标志以在输出中过滤 jail 和 vnet 变量。这样用户就不必查阅源码来判断某个变量是否为 jail/vnet 变量。615c9ce250ee
现在 grep(1) 在递归搜索时默认不再跟随符号链接。这一行为与手册页中所记录的行为一致。3a2ec5957ea9
第三方软件
llvm、clang、compiler-rt、libc++、libunwind、lld、lldb 和 openmp 已更新至 llvm-project llvmorg-19.1.7-0-gcd708029e0b2(dc3f24ea8a25)。
zfs(8):OpenZFS 已更新至 zfs-2.2-release(2.2.7)(2ec8b6948070)。
xz(1) 已更新至 5.8.1(9679eedea94c)。
less(1) 已更新至 v668(0bb4c188d363)。
file(1) 已更新至 5.46(71c92e6b94f0)。
expat(3) 已更新至 2.7.1(6f7ee9ac036e)。
tzdata
已更新至 2025b(475082194ac8)。
OpenSSH 已更新至 9.9p2(059b786b7db5)。(由 FreeBSD 基金会赞助)
OpenSSL 已更新至 3.0.16(cb29db243bd0)。
googletest
从 1.14.0 更新为 1.15.2(1d67cec52542)。一项值得注意的变更是:GoogleTest 1.15.x 现在正式要求 C++14(1.14.x 仍要求 C++11)。
spleen
已更新至 Spleen 2.1.0(26336203d32c)。
已弃用的应用程序
更新了弃用警告,说明已在 FreeBSD 15.0 中移除 gvinum(8)(dec497a9fcbf)。
新增了对 syscons(4) 的弃用声明。 syscons(4) 不兼容 UEFI,不支持 UTF-8,且被 Giant 锁保护。目前尚无明确的移除时间表,但预计将在未来一到两个主版本周期内移除对 Giant 锁的支持。(8c922db4f3d9)(由 FreeBSD 基金会赞助)。
OpenSSH 计划于 2025 年初移除对 DSA 签名算法的支持。
publickey(5) 功能已被弃用。该功能依赖 DES,加之 2025 年几乎没有人使用它,因而被移除。(9197c04a251b)
运行时库与 API
libcxxrt
已更新至上游的提交版本 6f2fdfebcd62(d9901a23bd2f)。
内核
本节覆盖了未归入其他分类的内核配置、系统调优及系统控制参数的变更。
内核常规变更
为 arm64 架构添加对旧式 PCI 热插拔的支持。355f02cddbf0(由 Arm Ltd 赞助)。
为 mac(3) 中的 jail 参数定义了一个通用的 mac
节点,供 mac_do(4) 使用。66fb52a27279(由 FreeBSD 基金会赞助)。
新增系统调 setcred()
用及相关 MAC 钩子。该系统调用允许一次性设置进程的所有必要凭据:有效、实际与保存的 UID,GID,附加组及 MAC 标签。与传统的 setuid()
、seteuid()
等调用相比,它的优势在于能使 mac_do(4) 等 MAC 模块以更细粒度限制进程可获取的凭据集合。c1d7552dddb5(由 FreeBSD 基金会赞助)。
mac_do(4) 现在支持将多个用户和用户组设为单一规则的目标。支持组目标是让 mac_do(4) 能够限制 setgroups()
所允许的新组集合的前提。此外,这组目标还可依赖于目标 UID,因为在 UNIX 中用户与组密切相关(用户会自动归入 /etc/passwd
中指定的主组和 /etc/group
中指定的附加组)。83ffc412b2e9(由 FreeBSD 基金会赞助)。
现在 sysctl(8) 自身可以附着并运行于 jail 中。这使得父 jail 能够在子 jail 中未安装 sysctl(8)(例如轻量的 OCI 容器或瘦 jail)时获取或设置内核状态。这在操作 jail 的内部或 sysctl vnet 时尤其有用。例如可以运行 sysctl -j foo -Ja
或 sysctl -j foo net.fibs=2
。8d5d7e2ba3a6
允许 sysctl(9) vnet 变量被引导可调参数初始化。在提交 3da1cf1e88f8 中,CTLFLAG_TUN
标志的含义被扩展,可在早期启动期间自动检查是否存在可用于初始化 SYSCTL
的内核环境变量。此机制适用于所有静态或动态创建的 SYSCTL
类型,但 VNET 所属的 SYSCTL
除外。请注意,当前实现存在限制:行为与非 vnet 引导可调参数相同,即内核或模块初始化之后,通过 kenv
修改环境变量不会影响后续创建的 VNET 中对应变量的值。为解决此问题,可使用 TUNABLE_XXX_FETCH
将环境变量在构造 VNET 时读入到相关变量中。894efae09de4
sound(4):按需分配 vchan。重构了 pcm_chnalloc()
并与 vchan_setnew()
(现已移除)及 dsp_open()
中的通道创建部分合并为新的 dsp_chn_alloc()
函数。该函数负责在禁用 vchans
时使用空闲硬件通道,或在启用时分配新的 vchan。hw.snd.vchans_enable
(之前是 hw.snd.maxautovchans
)与 dev.pcm.X.{play|rec}.vchans
现在作为可调参数使用,仅用于启用或禁用 vchans
,而非设定数量或进行(反)分配。由于这些 sysctl 不再触发(反)分配,其效果是即时的;而在过去,若将其设为极大值可能导致系统冻结(例如分配大量 vchan 时)。960ee8094913(由 FreeBSD 基金会赞助)
LinuxKPI:linux_alloc_pages()
现可识别 __GFP_NORETRY
标志。此变更修复了由于物理内存碎片化等因素引起的 drm-kmod 性能持续下降问题。831e6fb0baf6(由 FreeBSD 基金会赞助)
设备与驱动程序
本节介绍自 14.2-RELEASE 以来对设备及其驱动程序的变更与新增内容。
设备驱动程序
mpi3mr(4) 驱动程序版本已更新至 8.14.0.2.0(e6d4b221ba7c)。
mpi3mr(4) 的 MPI 头文件已更新至版本 36,对应最新 MPI 规范。这包括更新的结构体、字段定义以及与更新后的固件兼容所需的常量(60cf1576501d)。
mpi3mr(4) 驱动程序现在已内置于 GENERIC 内核中(e2b8fb2202c2)。
rtw88(4):合并了基于 Linux v6.14 的 Realtek rtw88 驱动(8ef442451791)。(由 FreeBSD 基金会赞助)
rtw89(4):合并了基于 Linux v6.14 的 Realtek rtw89 驱动(b6e8b845aeab)。(由 FreeBSD 基金会赞助)
iwmbtfw(4):新增了对 9260/9560 蓝牙适配器的支持(8e62ae9693bd)。所需固件文件已包含在 comms/iwmbt-firmware Port 中。
ena(4) 驱动程序版本已更新至 v2.8.1(a1685d25601e)。(由亚马逊公司赞助)
ix(4):新增了对 x550 上 1000BASE-BX SFP 模块的支持(24491b4acce5)。
bnxt(4):在 BCM57504 10/25GbE NIC 上启用 NPAR 支持(54f842ed8897)。
bnxt(4):新增了对 5760X(Thor2)PCI ID 的支持,添加了 Thor2 的 PCI ID(45e161020c2d)。
bnxt(4):新增了对 400G 速率模块的支持(32fdad17f060)。
ix(4):新增了对 1000BASE-BX SFP 模块及 1Gbit BiDi 模块的支持(c34817d9aef7)。
igc(4):修复了 I226-K 与 LMVP 设备的附加(attach)问题。这些设备的 ID 已在驱动的 PCI ID 列表中,但 igc_set_mac_type()
函数并未设置这些设备的正确 MAC 类型。此次修复将这些 ID 加入到 switch 分支结构中,从而使驱动能识别这些设备而非返回错误。此修复使 ASRock Z790 PG-ITX/TB4 主板上的 I226-K LOM 能够被识别与使用(f034ddd2fa38)。
从 em(4) 驱动中移除了旧的 sysctl itr 处理程序。此前实现存在多个错误,如单位转换/缩放错误,以及未能正确处理 82574L 或 igb(4) 设备。由于引入了新的 AIM 代码,预计大多数用户无需手动调节此参数(edf50670e215)。(由 BBOX.io 赞助)
在 uftdi(4) 中新增了对 Brainboxes USB 转串口适配器的支持(47db906375b5)。
已废弃与移除的驱动程序
存储
本节包括自 14.2-RELEASE 以来,文件系统及其他本地与网络存储子系统的变更与新增内容。
通用存储
为 mountd(8) 定义了一个新的命令行选项 -a
。当文件系统使用 -alldirs
标志导出时,即使路径并非服务器的文件系统挂载点,导出操作也会成功。ead3cd3ef628
记录了近期文件句柄布局的更改。ca22082c01a7
可在 mountd(8) 中传递 {NGROUPS_MAX} + 1
个组。NGROUPS_MAX
只是允许的附加组数的最小最大值,实际运行时值可能更大。相应地允许指定更多组(在几次提交之前,nmount(2) 也已做出类似更改)。ca9614d8f64a(由 FreeBSD 基金会赞助)
引导加载器变更
本节覆盖了引导加载器、启动菜单及其他引导相关的变更。
loader.efi(8):在 smbios(4) 中优先使用 v3(64 位)入口点。与非 EFI 引导情况下保持一致(但不同之处在于,EFI 在 64 位平台上以 64 位模式运行,因此对 v3 入口点不强制要求位于 4GB 以下)。807d51be8040(由 FreeBSD 基金会赞助)
libsa(3):在非 EFI 引导中,在 smbios(4) 中优先使用 v3(64 位)入口点。当同时存在 32 位与 64 位入口点时,SMBIOS 规范指出,64 位入口点始终至少包含 32 位入口点所引用的所有结构。换言之,32 位入口点仅为兼容而设,因此假设 64 位版本更有可能包含完整有效值。93af0db0d529(由 FreeBSD 基金会赞助)
libsa(3):在非 EFI 引导中,如果表位于 4GB 以下,则使用 64 位入口点。在 amd64 平台上,引导块与非 EFI 加载器是作为 BTX 客户端以 32 位编译的,因此无法访问超过 4GB 的地址。然而,64 位入口点可能引用位于 4GB 以下的结构表,此类情况在 BIOS 未提供 32 位入口点时亦可使用。对于 powerpc64 情况也类似。7b0350b376c0(由 FreeBSD 基金会赞助)
在 BIOS 引导中优先搜索 v3(64 位)入口点(smbios(4))。当从 BIOS(即非 EFI)引导时,也会搜索 SMBIOS 的 64 位入口点版本。这允许在仅提供 v3 表的 BIOS(例如 Hetzner 虚拟机)上正确检测和报告 SMBIOS 版本。对于同时提供两者的系统,优先使用 v3 表,与 EFI 情况保持一致。145ef4af15f0(由 FreeBSD 基金会赞助)
网络
本节说明了影响 FreeBSD 网络功能的变更。
一般网络
对 ip6addrctl(8) 进行改进,使其能够附加并在 jail 中运行。这将简化对 vnet jail 地址选择策略的管理,尤其适用于那些轻量级的 OCI 容器或瘦 jail。b709f7b38cc4
将 PF_DEFAULT_TO_DROP
转换为适用于 pf(4) 的 vnet 引导可调参数 net.pf.default_to_drop
。7f7ef494f11d 引入了一个编译时选项 PF_DEFAULT_TO_DROP
,使 pf(4) 的默认规则为丢弃。而本次更改通过引入一个名为 net.pf.default_to_drop
的 vnet loader 可调参数,使用户无需重新编译 [pf(4)] 模块即可更改默认规则。3965be101c43
无线网络
增强了 LinuxKPI 尤其是针对 802.11 的部分,以支持加密卸载以及 802.11n 与 802.11ac 标准。iwlwifi(4) 无线驱动是首款利用这些新功能的驱动,它支持部分 Intel Wi-Fi 5 硬件及所有 Intel Wi-Fi 6 与 Wi-Fi 7 硬件。 (由 FreeBSD 基金会赞助)
rtw88(4) 驱动得以再次正常工作(完成关联),同时修复了一个内存泄漏问题。 (由 FreeBSD 基金会赞助)
仿照其他驱动,已从基本系统中移除固件 iwlwififw(4),转而采用基于 Ports 的解决方案与 fwget(8) 支持。 (由 FreeBSD 基金会赞助)
硬件支持
本节包含针对物理机器、虚拟机监控器及虚拟化环境的通用硬件支持,以及不适合归入其他章节的硬件变更与更新。
请参见 14.3-RELEASE 支持的硬件列表 以及 平台支持页面,获取受支持的 CPU 架构完整列表。
虚拟化支持
多个修复与配置更改综合实现了对 x86 与 arm64(“Graviton”)EC2 实例的设备热插拔支持。从 FreeBSD 旧版本升级的 EC2 实例用户应在 /boot/loader.conf
中设置:
hw.pci.intx_reroute=0
debug.acpi.quirks="56"
文档
本节涵盖随基本系统发布的手册(man(1))页面及其他文档的更改。
手册页
在 ccdconfig(8) 中不再推荐使用 gvinum(8),转而推荐参考 graid(8) 和 zfs(8)。(55cb3a33d920)
ps(1):记录 -a
/-A
行为的变更。记录 93a94ce731a8 所引入的行为变更:指定 -a
/-A
会导致列出所有进程,而不考虑是否指定了其他进程选择选项(除了 -x
/-X
,它们指令使用筛选器)。(eed005b57895,由 FreeBSD 基金会赞助)
ps(1):选项 -U
的行为变更。4e4739dd0745(由 FreeBSD 基金会赞助)
ps(1):更改当前用户进程的匹配方式。7219648f60d1(由 FreeBSD 基金会赞助)
ps(1):使用有效 UID 匹配当前用户进程,使 FreeBSD 的 ps(1) 行为符合 POSIX 标准。1e8dc267ca91(由 FreeBSD 基金会赞助)
mac_do(4):更改规则语法;提供提示和指引。0c3357dfa18f(由 FreeBSD 基金会赞助)
firewire(4):添加弃用声明。最初作为 FreeBSD 15 计划的一部分讨论,但未能及时实现。现在添加弃用声明,预期将在 FreeBSD 16 发布前移除。fc889167c319(由 FreeBSD 基金会赞助)
以太网交换机控制器 mtkswitch(4)、ip17x(4)、ar40xx(4) 和 e6000sw(4) 已新增了初步的手册页。
mount(8) 现在新增了一个示例,说明如何在单用户模式下将所有文件系统重新挂载为可读写状态。
Lua 版 loader(8) 模块的手册页已重新措辞其说明,以优化 apropos(1) 的搜索结果。
手册页样式指南 style.mdoc(5) 新增了一节,用于列出受支持的硬件。通过这种方式列出的硬件将会被纳入 受支持硬件说明。在本次发行中,许多手册页新增或重写了这一部分内容。
大量工作已投入到将 sysctl(8) 和环境变量的信息添加到手册中。你可以使用 apropos Va=here.is.the.sysctl
和 apropos Ev=here_is_the_environment_variable
进行搜索。
文件格式手册的 intro(5) 已进行了修订,融合了来自 OpenBSD 的改进内容。
Ports 和软件包基础架构
本节涵盖 FreeBSD Ports、软件包基础架构,以及包维护和安装工具的变更。
pkg(8) 默认的配置文件 /etc/pkg/FreeBSD.conf
的中新增了 FreeBSD-kmods
仓库。此仓库中包含专为 14.3-RELEASE 编译的内核模块,而非为 14-STABLE 分支构建的模块。从该仓库安装内核模块,可使内核接口不稳定的驱动(尤其是图形驱动)在主仓库尚基于旧版本构建包时仍可使用。a47542f71511
打包变更
关于后续 FreeBSD 发布版的一般说明
FreeBSD 15.0 预计将不再支持除 armv7 以外的 32 位平台。armv6、i386 和 powerpc 平台将被弃用并移除。64 位系统仍可运行旧的 32 位二进制文件。
FreeBSD 项目预计将继续在 FreeBSD 15.0 和 stable/15 中将 armv7 作为二级架构架构支持。但也预计可能会在 FreeBSD 16.0 中移除 armv7。FreeBSD 项目将在 15.0 发布时更新关于 armv7 在 15.x 与 16.x 中的支持状态。
通过 COMPAT_FREEBSD32
选项在 64 位平台上运行 32 位二进制文件的支持,将至少持续至 stable/15 与 stable/16 分支。同时,通过 cc -m32
编译单个 32 位应用的支持,也将在 stable/15 中继续,并包含必要的头文件(位于 /usr/include)与库(位于 /usr/lib32)。
从 FreeBSD 15.0 起,Ports 将不再支持已弃用的 32 位平台。这些版本将不再为弃用的 32 位平台提供二进制包,也不支持从 Ports 构建包。
FreeBSD stable/14 及更早分支将继续保留对 32 位内核和 world 的支持。在这些分支受到 Ports 支持的期间,Ports 仍支持为 32 位系统构建包和程序。然而,所有 32 位平台均为 Tier-2 或 Tier-3,对个别 Port 的支持将随着上游放弃对 32 位的支持而逐步退化。
根据当前的支持计划,stable/14 将在 FreeBSD 14.0-RELEASE 发布后约 5 年终止支持(EOL)。stable/14 的 EOL 标志着对弃用的 32 位平台的支持终结,包括源代码发布、预编译包和从 Ports 构建应用的支持。由于 14.0-RELEASE 发布于 2023 年 11 月,弃用平台的支持将于 2028 年 11 月终止。
FreeBSD 项目可能会在 15.0 发布时改变这一策略,例如为某些弃用平台在 15.0 或更高版本中延长某种支持。任何更改都将由社区反馈及对这些平台的持续支持承诺所推动。
最后更新于