FreeBSD 15.0-RELEASE 发行说明(2025 年 12 月 2 日)

摘要

FreeBSD 15.0-RELEASE 的发行注记是对在 15-STABLE 开发线上对 FreeBSD 基本系统所做的变动总结。本文档列出了适用于自上个 RELEASE 发布以来的安全公告,以及对 FreeBSD 内核和用户态的重要变动。同时也简要给出了一些关于更新的说明。

简介

本文件是 FreeBSD 15.0-RELEASE 的发行说明。它涉及了 FreeBSD 最近新增、变动及删除的特性,并提供了旧版本 FreeBSD 进行更新时的若干说明。

这些发行注记所对应的 “RELEASE” 发布版本,这些发行说明所针对的“RELEASE”发行版,代表开发分支 15-STABLE 于 14.0-RELEASE 与后续 15.1-RELEASE 之间的最新进展节点。可在 https://www.FreeBSD.org/releases/ 找到关于 15-STABLE 分支上预构建二进制 “RELEASE” 发布版本的信息。要获取此(或其他) FreeBSD “RELEASE”发布版本的更多信息,可参阅 FreeBSD 手册 的附录获取 FreeBSD

强烈建议所有用户在安装 FreeBSD 之前查阅发行勘误。发行勘误文档会随着发行周期末期或发行之后发现的“最新”信息而更新。通常它包含了已知缺陷、安全公告以及文档修正。可在 FreeBSD 网站上找到 FreeBSD 15.0-RELEASE 的最新发行勘误。

本文档包含自 14.0-RELEASE 以来,在 FreeBSD 中对用户最为可见的新特性或变动。通常除非特别标记为特性“[已合并]”,此文档所述变动均为 15-STABLE 分支所独有。

典型的发行说明项目有:在 14.0-RELEASE 之后发布的近期安全公告、新的驱动/硬件支持、新的命令/选项、主要缺陷修复/第三方软件更新。它们也可能列出对主要 Ports / 软件包,发行工程实践的变动。当然,发行注记不可能列出 FreeBSD 在两个发行版本之间的每一项变动;本文主要聚焦安全公告、用户可见变动以及主要架构改进。

从旧版本的 FreeBSD 进行更新

在 RELEASE 版本之间(以及各安全分支的快照之间)进行二进制更新,可使用 freebsd-update(8) 工具。请参阅与发行版本相关的更新流程 —— FreeBSD 15.0-RELEASE 更新信息,并结合 FreeBSD 手册中的 二进制更新流程 了解更多细节。该方式会更新未修改的用户态工具,以及作为官方 FreeBSD 发行版一部分提供的未修改 GENERIC 内核。freebsd-update(8) 工具要求进行更新的主机有网络连接。

也可选择基于源代码的更新(即通过重新编译 FreeBSD 基本系统进行更新),其步骤可参阅 /usr/src/UPDATING 中的说明。

警告

应在备份 所有 数据和配置文件之后再更新 FreeBSD。

从已有的预发行基本系统包安装(pkgbase)进行更新

警告

对于那些使用 FreeBSD 15.0 的 PRERELEASE、ALPHA 和 BETA 构建版本的用户,由于 FreeBSD.org 基础设施在后期发生变动,无法直接使用工具 pkg-upgrade(8) 进行更新。

用户应手动从源码树检出标签 15.0-RELEASE,或从 STABLECURRENT 分支更晚的提交中复制所需文件;也可以从官方发行版基本系统包中强制安装软件包 FreeBSD-pkg-bootstrap

推荐且最稳妥的方式,是从 UTC 时间 2025 年 11 月 27 日 22:00(北京时间 2025 年 11 月 28 日 06:00)之后的 head、stable/15 或 releng/15.0 分支的源码树检出。

# cp /usr/src/usr.sbin/pkg/FreeBSD.conf.quarterly-release \
       /etc/pkg/FreeBSD.conf
# cp -R /usr/src/share/keys/pkgbase-15 /usr/share/keys/pkgbase-15

未安装最新源码的用户,可采用安全性稍低但更简单的方式:在安装后验证校验和。由于这些文件与架构无关,因此其校验和在所有平台上均一致。在使用 pkg(8) 进行更新前,需要启用软件包仓库 FreeBSD-base 。

# pkg add -f https://pkg.freebsd.org/FreeBSD:15:$(uname -p)/base_release_0/FreeBSD-pkg-bootstrap-15.0.pkg
# sha256 -r /etc/pkg/FreeBSD.conf /usr/share/keys/pkg/trusted/pkg.freebsd.org.2013102301 \
  /usr/share/keys/pkgbase-15/trusted/awskms-15 /usr/share/keys/pkgbase-15/trusted/backup-signing-15
ab261a3b84ffc11654ac0bafbb7d6b3f1b6afc30bfabab3bcff64259678eac26 /etc/pkg/FreeBSD.conf
036ae4f9c441a3febb41734bbb37227ec3374edd3c6c687e5cb70d580efbea30 /usr/share/keys/pkg/trusted/pkg.freebsd.org.2013102301
529c79e85a6ca152faa9d57ead85fe0111ffada8d0a0fa2f11fc510999fa50df /usr/share/keys/pkgbase-15/trusted/awskms-15
c368ec8d05654bdaad34742c1d75b9b150bfc3892838cef32f6e5b036b0c0605 /usr/share/keys/pkgbase-15/trusted/backup-signing-15
# mkdir -p /usr/local/etc/pkg/repos
# echo "FreeBSD-base: { enabled: yes }" > /usr/local/etc/pkg/repos/FreeBSD.conf

警告

应在备份 所有 数据和配置文件之后再更新 FreeBSD。

内置的安全修复与勘误补丁

本节列出了自 14.0-RELEASE 以来发布,已在 15.0-RELEASE 中修复的各类安全公告与勘误通知。

安全公告(已修复)

公告
日期
主题

2023 年 12 月 05 日

pf(4) 中的 TCP 欺骗漏洞

2023 年 12 月 12 日

NFS 客户端数据损坏与内核内存泄漏

2023 年 12 月 19 日

SSH 协议中的前缀截断攻击

2024 年 02 月 14 日

bhyveload(8) 主机文件访问

2024 年 02 月 14 日

jail(2) 信息泄漏

2024 年 03 月 28 日

unbound 中的多个漏洞

2024 年 07 月 01 日

OpenSSH 身份验证前远程代码执行

2024 年 08 月 07 日

pf 在状态表中错误匹配不同 ICMPv6 状态

2024 年 08 月 07 日

ktrace(2) 在执行 setuid 二进制时未能分离

2024 年 08 月 07 日

NFS 客户端接受包含路径分隔符的文件名

2024 年 08 月 07 日

OpenSSH 身份验证前异步信号安全性问题

2024 年 09 月 04 日

libnv 中的多个漏洞

2024 年 09 月 04 日

bhyve(8) 通过 TPM 设备直通导致的特权 Guest 逃逸

2024 年 09 月 04 日

ctl(4) CAM Target Layer 中的多个问题

2024 年 09 月 04 日

bhyve(8) 通过 USB 控制器导致的特权 Guest 逃逸

2024 年 09 月 04 日

OpenSSL 中 X.509 名称检查可能导致 DoS

2024 年 09 月 04 日

umtx 内核崩溃或使用已释放内存

2024 年 09 月 19 日

bhyve(8) 通过 XHCI 仿真读取越界数据

2024 年 09 月 19 日

libnv 中的整数溢出

2024 年 10 月 29 日

bhyve 虚拟机管理程序中的多个问题

2024 年 10 月 29 日

ctl(4) CAM Target Layer 中的未限制分配

2024 年 10 月 29 日

证书吊销列表 fetch (1) 选项失效

2025 年 01 月 29 日

OpenSSH 按键混淆绕过

2025 年 01 月 29 日

通过 NFS 在某些文件系统中发生缓冲区溢出

2025 年 01 月 29 日

非特权用户访问系统文件

2025 年 01 月 29 日

通过 ktrace(2) 的未初始化内核内存泄漏

2025 年 02 月 21 日

OpenSSH 中的多个漏洞

2025 年 07 月 02 日

多线程 xz 解码器中的 UAF(释放后重用)

2025 年 08 月 08 日

libarchive 中的整数溢出导致双重释放(double free)

2025 年 09 月 30 日

OpenSSL 中的多个漏洞

2025 年 10 月 22 日

SO_REUSEPORT_LB 破坏了 UDP 套接字的 connect(2)

2025 年 11 月 26 日

local-unbound 服务中的缓存投毒

勘误通知(已修补)

勘误
日期
主题

2023 年 12 月 1 日

启用 ASLR 时 Clang sanitizer 出错

2023 年 12 月 1 日

OpenZFS 数据损坏

2023 年 12 月 5 日

ossl(4) 的 AES-GCM 实作可能产生错误结果

2023 年 12 月 5 日

ZFS 内核线程 CPU 占用过高

2023 年 12 月 5 日

FreeBSD 14.0-RELEASE 的 pkgbase 版本号错误

2023 年 12 月 5 日

内核实体内存配置器产生错误结果

2023 年 11 月 24 日

tty(4) 的 IUTF8 造成内核 panic

2023 年 12 月 5 日

ZFS 快照目录无法通过 NFS 访问

2024 年 2 月 14 日

时区数据库信息更新

2024 年 2 月 14 日

登录类别资源限制与 CPU mask 绕过

2024 年 2 月 14 日

使用 rfork(2) 退出时,kqueue_close(2) 页面错误

2024 年 2 月 14 日

bind(2) 触发内核 panic

2024 年 3 月 28 日

TTY 内核 panic

2024 年 3 月 28 日

WireGuard if_wg(4) 的屏障不足

2024 年 3 月 28 日

某些优化启用时 Clang 崩溃

2024 年 3 月 28 日

使用弱加密时 Kerberos segfault

2024 年 4 月 24 日

ZFS 相关内核线程 CPU 占用过高

2024 年 6 月 19 日

ZFS 内核内存泄漏

2024 年 6 月 19 日

LDNS 使用 resolv.conf 中被注释掉的 nameserver

2024 年 6 月 19 日

killpg 的锁顺序反转导致活锁

2024 年 6 月 19 日

删除 heap 分配的 std::string 时传递的大小错误

2024 年 8 月 7 日

ifconfig netmask 设定错误

2024 年 9 月 4 日

cron(8) / periodic(8) 会话登录问题

2024 年 9 月 19 日

pf 对 ICMPv6 状态处理错误

2024 年 10 月 20 日

XDG runtime directory 的文件描述符泄漏

2025 年 1 月 29 日

NFSv4 客户端中 NULL 指针解引用

2025 年 1 月 29 日

DTrace 导致系统调用审计被禁用

2025 年 1 月 29 日

时区数据库信息更新

2025 年 4 月 10 日

时区数据库信息更新

2025 年 4 月 10 日

更新 expat 至 2.7.1

2025 年 4 月 10 日

daemon(8) 缺失信号

2025 年 4 月 10 日

更新 OpenSSL 至 3.0.16

2025 年 4 月 10 日

根证书包更新

2025 年 7 月 2 日

动态载入的 C++ 程序库在退出时崩溃

2025 年 7 月 2 日

来自加密数据集的 ZFS 复制流损坏

2025 年 7 月 2 日

ena 在 Nitro v4 或更新的实例上重置并触发内核 panic

2025 年 8 月 8 日

bsdinstall(8) 在 IA32 UEFI 固件系统上未复制正确的 loader

2025 年 8 月 8 日

net80211 TKIP 加密在某些驱动上失效

2025 年 8 月 8 日

route(8) 重定向到文件时缓冲过多

2025 年 9 月 16 日

arm64 syscall(2) 允许无特权用户触发内核 panic

2025 年 9 月 16 日

copy_file_range(2) 未设置输出参数

2025 年 9 月 16 日

bnxt(4) 在部分情况下无法设定 media type

2025 年 9 月 30 日

freebsd-update(8) 以错误顺序安装程序库

架构

久经考验的 32 位硬件平台 i386、armv6 以及 32 位 powerpc 已经退役。对 32 位应用的支持仍然存在,以它们各自 64 位平台的 32 位兼容模式提供。armv7 平台仍是最后支持的 32 位平台。我们感谢这些平台多年来的服务。

用户空间

本节包含用户空间应用程序、第三方软件以及系统工具的变动和新增内容。

用户空间配置变动

Kerberos v5 认证服务 krb5kdc(8)daemon(8) 下增加了新变量 kdc_restart。在 rc.conf(5) 中设置 kdc_restart="YES" 可在 kdc 异常终止时自动重启。设置 kdc_restart_delay="N" 可指定重启 kdc 前的延迟秒数。abc4b3088941

减少 periodic(8) daily 脚本默认在邮件中显示的上下文,以减小输出量。此行为可通过 periodic.conf(5) 中的变量 daily_diff_flags 控制。同样,安全脚本显示的变动上下文也比以前少,可通过变量 security_status_diff_flags 控制。538994626b9f, 37dc394170a5, 128e78ffb084

守护进程 bsnmpd(1) 不再支持传统 UDP 传输。未从 12.0-RELEASE 或更旧版本更新 /etc/snmpd.config 的用户,需要合并新的配置。特别是,传输定义需从 OID begemotSnmpdPortStatus 改为 begemotSnmpdTransInetStatus9ba51cce8bbd

FreeBSD-base 仓库现在定义在 /etc/pkg/FreeBSD.conf 中,默认禁用。在 15.0-RC1(如果运行 releng/15.0)或 11 月 15 日之前使用 pkgbase 安装(如果使用 stable/main 快照)的系统,需要删除定义在 /usr/local/etc/pkg/repos/FreeBSD-base 仓库,并替换为这行:FreeBSD-base: { enabled: yes }5d832135a971

在 arm64 树莓派镜像(arm64-aarch64-RPI 文件)中,默认在 /etc/rc.conf 启用了工具 powerd(8) 。这能避免 CPU 始终以过低的主频运行。4347ef60501f

用户空间应用程序的变动

现在工具 adduser(8)(由 bsdinstall(8) 调用)会为新用户的 home 目录创建 ZFS 数据集(若父目录位于 ZFS 数据集上)。命令行选项可用于禁用单独数据集。同时支持 ZFS 加密。516009ce8d38

现在程序 date(1) 支持纳秒精度。例如:date -Ins 将输出 "2024-04-22T12:20:28,763742224+02:00"date +%N 将输出 "415050400"eeb04a736cb9 (由 Klara, Inc. 赞助)

现在工具 dtrace(1) 可通过 libxo(3) 生成机器可读的 JSON、XML 和 HTML 输出。aef4504139a4 (由创新英国赞助)

现在工具 lastcomm(1) 显示的时间戳精确到秒。692c0a2e80c1 (由 DSS GmbH 赞助)

现在工具 ldconfig(8) 支持任意字节序的 hints 文件。默认格式为主机的本地字节序。fa7b31166ddb

现在,在可用时工具 usbconfig(8) 能从 /usr/share/misc/usb_vendors 读取 USB 厂商和产品的描述信息,类似于 pciconf(8) 的做法。7b9a772f9f64

工具 env(1) 新增了变动目录的选项,这类似于 GNU 版 env 的功能,但不支持长选项。08e8554c4a39 (由 Klara, Inc. 赞助)

现在工具 ps(1) 能自动移除“预设显示”中与显式请求的列重复的数据列。在此之前,如果用户请求添加某个“预设显示”(选项 -j-l-u-v),与命令行前面显式请求列重复的列会被省略,但反向情况(预设显示出现在显式请求列之前)不会生效。此外,不同关键词但作为同一关键词别名的列也被视为持有相同数据,而不仅限于相同关键词的列。cd768a840644 (由 FreeBSD 基金会赞助)

工具 ps(1) 的选项 -O 现在更加灵活和可预测。 ps(1) 显示的列列表现在会首先在不考虑 -O 选项的情况下构建。然后,所有通过 -O 传入的列将最终插入到已构建的显示列中——如果存在第一列 PID 列,则插在其后;否则插入到开头,并保持它们作为 -O 选项参数的出现顺序。5dad61d9b949 (由 FreeBSD 基金会赞助)

现在工具 [ps(1)] 的选项 -a-A 总会显示所有进程。之前,当与影响进程选择的其他选项组合使用时,除了 -X-x-a 选项不会生效(-A 会退化为仅 -x),这与其他选择选项的规则相矛盾——若指定了任何选择选项并选择了某个进程,该进程应被列出,这是 POSIX 所要求的,也是用户的自然预期。现在,指定 -a-A 可列出所有进程,而不受诸如 -U-p-G 等其他选择选项影响,但 -X-x 过滤选项仍然有效。特别地,如果只想列出特定 jail 的进程,不应将 -a-J 一起使用。实际上,-J 从未像其初衷那样作为过滤器起作用,之前只是由于 bug 与 -a 的偶然结合才生效。93a94ce731a8 (由 FreeBSD 基金会赞助)

现在工具 [ps(1)] 会使用有效用户 ID 匹配当前用户的进程。此前使用的是真实用户 ID。这一变动使 [ps(1)] 在此行为上符合 POSIX 标准。1aabbb25c9f9 (由 FreeBSD 基金会赞助)

现在工具 [ps(1)] 的标志 -U 会按真实用户 ID 选择进程。这符合 POSIX 对 -U 的规范,也是大多数用户在大多数情况下真正需要的行为。此前,-U 会按有效用户 ID 选择进程(这是 POSIX 对 -u 选项的要求)。995b690d1398 (由 FreeBSD 基金会赞助)

工具 sysctl(8) 新增了标志,可用于过滤变量 jail、prison 和 vnet,使用户无需查看源代码即可判断变量是否属于 jail/prison/vnet。615c9ce250ee

在递归搜索时,工具 grep(1) 默认不再跟随符号链接,这与手册页中的文档行为一致。fc12c191c087

现在工具 mdo(1) 能在目标凭据中完全指定所有用户和组。作为便捷功能,除了完全显式指定外,还能以基线开始,为所有属性提供默认值(可以是密码数据库中某个用户的登录凭据或当前凭据),然后选择性修改这些属性。对手册页进行了更新,描述了新选项及其相互作用。4ffcb1a4a99c 【由 FreeBSD 基金会和谷歌(2025 谷歌编程之夏)赞助】

在单用户模式下启动时,现在 init(8) 会将工作目录修改为 /root,仅在回退情况下使用 /。不再安装 /.profile 指向 /root/.profile 的链接。b4b91207ab6f, ca771d7ae527

已从基本系统中移除弃用的 ftpd(8)。仍有需求的用户可以安装 Port ftp/freebsd-ftpd259bb93b80c0

Kerberos v5 数据库管理程序现在可以以一种格式导出 Heimdal KDC 数据库,使其可被 MIT KDC 导入。有关如何使用 kadmin -l dump -f 转移/转换 KDC 数据库,请参阅 https://wiki.freebsd.org/Kerberos/Heimdal2MIT_KDC_Migration9fd3b28d4e0d, 23fbea8cf2f3

现在工具 bsdconfig(8)bsdinstall(8) 使用 bsddialog(1) 代替了 GNU dialog。c36b3dbc99d1, 04b465777a09

现在命令 jail(8) 支持了参数 zfs.dataset,可将 ZFS 数据集列表附加到 jail。e0dfe185cbca

现在命令 [jail(8)] 支持了参数 meta 和 env,它们是与 jail 关联的任意字符串。这些参数可用于给 jail 添加特定元数据,或在 jail 内安全传递信息。可以在创建 jail 时添加,也可以稍后使用 [jail(8)] 进行修改。30e6e008bc06 (由 SkunkWerks, GmbH 赞助)

现在启动脚本 rc.d/jail 拥有了兼容变量 jail_${jailname}_zfs_dataset,能让像 ezjail 这样缺乏维护的 jail 管理器使用新的 zfs.dataset 功能(见上文)。0b49e504a32d

现在工具 newsyslog(8) 能在文件 newsyslog.conf 开头直接指定全局压缩方法。所有既往压缩标志 (JXYZ) 现在表示“将文件视为可压缩”,而不再代表“使用特定方法压缩文件”。可用的方法如下:

  • none:永不压缩。

  • legacy:既往行为(J=bzip2,X=xz,Y=zstd,Z=gzip)。

  • bzip2xzzstdgzip:使用指定的压缩方法。

61174ad88e33, 906748d208d3, 39d668f1e09e

第三方软件

One True Awk (awk(1)) 已更新至第二版,新增了 -csv 支持和 UTF-8 支持。使用的快照版本为 2025-08-04。b45a181a74c8 (由奈飞赞助)

系统参考手册工具链 mandoc(1) 已更新至 1.14.6 版本,使用快照 2025-09-26。该版本改进了与 groff 和 DocBook 的兼容性,增强了 HTML 和 Markdown 输出,并弃用了 LIBRARY 部分。c1c95add8c80, 80c12959679a, 4c07abdbacf4, 06410c1b5163, 59fc2b0166f7

jemalloc(3) 库已更新至 5.3.0 版本。c43cad871720

构建系统 bmake(1) 已更新至 2025-08-04,提供了多项调试改进、修复了如检测并拒绝 gmake 语法的 bug,以及功能改进,例如 -j 接浮点数参数时作为可用 CPU 数量的倍数。

套件 sendmail(8) 已更新至 8.18.1 版本,修复了 CVE-2023-51765。58ae50f31e95

bc(1) 计算器已更新至 7.1.0 版本。fdc4a7c8012b

套件 blacklist 在上游已被改名为 blocklist。现有配置仍可使用,但会发出警告。使用的快照版本为 2025-10-26。4afb96fdd272

bsddialog(1) 工具已更新至 1.0.5。0595e10ec773

解析器生成器 byacc(1) 已更新至 2024-01-09。822ca3276345

libarchive 库已更新至 3.8.2。8a0b57ba54f0

libcbor 库已更新至 0.11.0。1755b9daa693 (由 FreeBSD 基金会赞助)

libcxxrt 库已更新至供应商快照 6f2fdfebcd62。d0dcee46d971

libfido2 库已更新至 1.14.0。128bace5102e (由 FreeBSD 基金会赞助)

libpcap 库已更新至 1.10.5。26f21a6494b4 (由 FreeBSD 基金会赞助)

ncurses(3) 库已更新至 6.5。21817992b331

工具 tcpdump(1) 已更新至 4.99.5。ec3da16d8bc1 (由 FreeBSD 基金会赞助)

DNS 验证解析器 unbound 已更新至 1.24.1。a988846174e0

编译器基础设施 llvm 已更新至 19.1.7-0-gcd708029e0b2。dc3f24ea8a25

文件系统 OpenZFS 已更新至 zfs-2.4.0-rc4。7b5b0f43eb06

数据压缩工具 xz(1) 已更新至 5.8.1。128836d304d9

分页器 less(1) 已更新至 v679。76bafc906926

文件识别工具 file(1) 已更新至 5.46。ae316d1d1cff

数据压缩库 zlib(3) 已更新至 1.3.1。6255c67c3d1a

时区数据库 tzdata 已更新至 2025b。475082194ac8

OpenSSH 已更新至 10.0p2。8e28d84935f2 (由 FreeBSD 基金会赞助)

OpenSSL 已更新至 3.5.4。c0366f908ff4

Lua 已更新至 5.4.8。3068d706eabe (由奈飞赞助)

Google Test C 测试框架已更新至 1.15.2。值得注意的是,GoogleTest 1.15.x 现在正式要求 C++14(1.14.x 版本要求 C++11)。1d67cec52542

vt(4) 控制台字体 spleen 已更新至 2.1.0。26336203d32c

MIT KRB5 1.22.1 Kerberos 替代了原有默认的 Heimdal 1.5.2。仍可通过 WITHOUT_MITKRB5 标志编译 Heimdal 1.5.2。将在 FreeBSD 16 中彻底移除 Heimdal Kerberos 。另请参考 用户空间应用变动 中关于标志 kadmin -l dump -f 的说明。ee3960cba106, 0b9a631e0724, 60f970b85e44, 0d1496f0f1e7, cbb6e747af98, 0559f30a882d, ae07a5805b19, f58febc4cefa, 805498e49ae4, 4cb1baa7d85c, 188138106b9f, 4680e7fcc70a, e447c252d0ec, 5f8493bbf479, 110111a6cca1, 2a454b05f2c1, 98d46e05ab08, 6b28571cb6ba, ca9ccf0ce9ad, b98d0566b2bd, fb1ccc04adfe, dd0ec030f8fd, 6c4771c73470, 7b68893ffa9b, 624b7beed5ac, 04764f21855a, 73ed0c7992fd, 40a5abfc3f66, 543b875a8ee4, c791ea80b5f7, 383e7290c0b5, 9a726ef24134, a245dc5d68c7, e26259f48afe, 7d2cfb27d62f, 619feb9dd00e, 10eecc467f32, 0c13e9c3c464, 89c82750da1, 18a870751b03, ce9c325a2e92, cb3eac927b5d, 5105e1ebecc7, b9b0e105c357, 929f5966a9fd (由 FreeBSD 基金会赞助)

驱动 rtw88(4) 已更新至 Linux v6.17。导致设备可能无法认证(译注:指无法连接带密码的 WiFi)的问题仍在研究中。c1d365f39e08 (由 FreeBSD 基金会赞助)

驱动 rtw89(4) 已更新至 Linux v6.17。该驱动尚未充分测试,仍可能存在问题。b35044b38f74 (由 FreeBSD 基金会赞助)

驱动 iwlwifi(4) 已更新至 Linux v6.17。基于 BE200 的芯片组需要更新固件,尚需额外驱动修复,这些修复未包含在本版本中。69caa1cf3ce5 (由 FreeBSD 基金会赞助)

运行时库与 API

现在 libutil 中的例程 setusercontext(3) 会在适当条件下,从用户主目录下的 .login.conf 文件以及系统文件 login.conf(5) 设置进程优先级(nice,优)。优先级现在可以设为 inherit(继承),表示保持与父进程相同的优先级。类似地,也可以将 umask 设为 inherit(继承)。c328e6c6ccaa, d162d7e2ad32, f2a0277d3e51 (由 Kumacom SAS 赞助)

现在,在 amd64 系统上可利用 SIMD(单指令多数据)扩展来提高 C 库中的许多字符串和内存的操作性能;参见 simd(7)(由 FreeBSD 基金会赞助)

在支持的平台上,数学库 math(3) 中 128 位 tgammal 函数有了更好的实现。8df6c930c151

现在,fma(3) 在处理某些小输入时,可返回符号正确的零值(在 Python 测试套件中观察到)。dc39004bc670 (由 FreeBSD 基金会赞助)

新增函数 cap_rights_is_empty,用于判断 cap_rights_t 是否未设置任何权限。e77813f7e4a3 (由 FreeBSD 基金会赞助)

libcxxrt 已更新至上游版本 6f2fdfebcd62。d9901a23bd2f

改进了 asinf(3)acosf(3) 的精度。33c82f11c267

系统调用 setgroups(2)getgroups(2) 及库函数 initgroups(3) 发生了变动,不再设置或报告有效组 ID,仅处理辅助组。此变动旨在避免安全问题,并与 Linux/glibc、OpenBSD、NetBSD 及基于 illumos 的系统兼容。几乎所有可移植应用程序应已兼容新行为并继续正常工作(例如见 239e8c98636a 对 OpenSSH 的影响)。出于谨慎起见,移植者、系统管理员和用户仍应审查那些使用 setgroups(2)getgroups(2)initgroups(3) 的应用程序。应用程序必须结合 setgid(2)setegid(2) 使用 setgroups(2)initgroups(3) 来设置有效组 ID;不应将 getgroups(2) 返回数组的第一个元素特殊化处理,而应视作普通辅助组。兼容性系统调用和库函数确保在 FreeBSD 14 或更早版本编译的二进制文件和库继续正常工作。9da2fe96ff2e, 8878569103a3, 7132fb5edbc9, 2932e6f59bff, 8878569103a3 (由 FreeBSD 基金会赞助)

libc 中的兼容性函数已修复,使得使用旧版本 FreeBSD 编译的可执行文件/库在运行时正确引用系统调用,不会出现异常。47f5f89dbd27 (由 FreeBSD 基金会赞助)

已弃用函数 readdir_r(3),可能在后续版本中移除。现在在程序中使用它将导致编译时和链接时警告。2bd157bc732a (由 Klara, Inc. 赞助)

运行时链接器 rtld(1) 现已支持由 -z initfirst 指定的静态链接标志。78aaab9f1cf3 (由 FreeBSD 基金会赞助)

杂项

vt(4) 的 Gallant 字体已更新,新增 4300 余个字形,包括对希腊字母、西里尔字母、国际音标扩展、扩展拉丁字符、Zapf Dingbats、大量箭头、大量数学符号、类字母符号及带圈字母数字、像素级完美方框绘制、货币符号、更多标点符号、足以表示“コンニチハ”(你好)的片假名,以及在 U+e0a0 私有使用区的 Powerline 字形。9e8c1ab0976c

Unicode 支持已更新至 16.0.0,CLDR 更新至 45.0.0。ddfc6f84f242

弃用的应用程序

fdisk(8) 已被弃用许久但尚未移除,建议使用 gpart(8)。运行 fdisk(8) 将显示迁移至 gpart(8) 的警告。3958be5c29da (由 FreeBSD 基金会赞助)

已添加 syscons(4) 的弃用通知。syscons(4) 与 UEFI 不兼容,不支持 UTF-8,并且使用 Giant 锁。目前尚无具体移除时间表,但对 Giant 锁的支持预计将在一到两个主要版本周期内取消掉。8c922db4f3d9 (由 FreeBSD 基金会赞助)

已移除工具 shar,但仍可通过 Ports sysutils/freebsd-shar 使用。3fde39073c72

由于安全性不足,OpenSSH 已移除 DSA 签名算法,遵循上游更新。

已移除数据库 publickey(5),该数据库使用 DES 加密,我们希望 2025 年没人会再使用它。9197c04a251b

云平台

本节介绍针对云环境的变动。

15.0-RELEASE 支持 cloudinit,包括对 nuageinit 启动脚本和对 config-drive 分区的支持。它兼容 OpenStack 及许多托管服务。详情请参见 cloud-init 网站及提交记录 16a6da44e28d 227e7a205edf (由 OVHcloud 赞助)

基本 Cloudinit 镜像默认不再生成用于 SSH 的 RSA 主机密钥。b22be3bbb2de

FreeBSD 项目现已发布兼容 OCI 的容器镜像。8a688fcc242e

FreeBSD 项目现已发布 Oracle Cloud Infrastructure 镜像。更多信息请参见 Oracle Cloud Infrastructure FreeBSD 列表77b296a2582b

Amazon EC2 云中的 API “shutdown”(关机)和 “reboot”(重启)现可用于 arm64(“Graviton”)实例。28b881840df7 (由亚马逊赞助)

若干错误修复和配置调整使 x86 与 arm64(“Graviton”)EC2 实例均支持设备热插拔。ce9a34b1614e 55c3348ed78f d70bac252d30 (由亚马逊赞助)

将 EC2 实例更新至 FreeBSD 新版本的用户,应在 /boot/loader.conf 中设置 hw.pci.intx_reroute=0debug.acpi.quirks="56"

FreeBSD 项目现已发布 “small” EC2 镜像;这些是去掉调试符号、测试程序、32 位库、LLDB 调试器、Amazon SSM Agent 和 AWS CLI 的 “base”(基本)镜像。953142d6baf3 (由亚马逊赞助)

FreeBSD 项目现已发布 “builder” EC2 镜像;这些镜像启动后进入内存盘,将干净的 “base”(基本)镜像提取到根磁盘(挂载在 /mnt)上,以便在创建 AMI 之前进行自定义。584265890303 (由亚马逊赞助)

FreeBSD “base” EC2 镜像启动速度比对应的 14.0-RELEASE 镜像快 76%,在 arm64(“Graviton”)实例上提升最明显。

EC2 AMI 默认不再生成用于 SSH 的 RSA 主机密钥。如需支持非常旧的 SSH 客户端,可通过在 /etc/rc.conf 中设置 sshd_rsa_enable="YES" 重新启用 RSA 主机密钥生成。0aabcd75dbc2 (由亚马逊赞助)

FreeBSD 15.0-RELEASE 现支持 Google Cloud Compute Engine C4 机器。7b32f4f0a7fe (由谷歌赞助)

内核

本节介绍内核配置、系统调优以及未归类的系统控制参数的变动。

通用内核变动

ktrace(2) 现在会记录有关 capability(能力)模式违规的详细信息。更新了工具 kdump(1),可显示这些信息。9bec84131215, 96c8b3e50988, 05296a0ff616, 6a4616a529c1, 0cd9cde767c3, aa32d7cbc92c

FreeBSD 现原生实现了 Linux inotify(2) 接口。系统调用本身并非 API 兼容,但 libc 提供了兼容接口,因此依赖 inotify 的软件可无需修改直接运行。f1f230439fa4 (由 Klara, Inc. 赞助)

已在 powerpc 上实现例程 fpu_kern_enterfpu_kern_leave,可在内核中使用依赖浮点和向量寄存器的加密函数 ossl(4)91e53779b4fc

arm64 上的传统 PCI 热插拔得到支持。355f02cddbf0 (由 Arm Ltd 赞助)

Jails 现在可以通过 jail_set(2)jail_get(2) 中的 jail 描述符访问,也可以通过新的系统调用 jail_attach_jd(2)jail_remove_jd(2) 操作。它们可通过文件描述符接口管理 jail,从而避免 jail ID 固有的竞态条件,并可选择控制 jail 生命周期。851dc7f859c2

Jails 和 jail 描述符现在有关联的过滤器 kevent(2),可跟踪 jail 的创建、变动、附加和移除。1bd74d201a53 9d7f89ef2607

为 MAC 模块的 jail 参数创建了新的通用 mac 节点。后续所有 MAC 模块的 jail 参数都会显示在该节点下。有关 MAC 的介绍,请参见 mac(4)。首个使用该节点的模块是 mac_do(4)5041b20503db, f3a06ced2568 (由 FreeBSD 基金会赞助)

在经过多项重要修复后,mac_do(4) 现在被认为可以用于生产环境。bbf8af664dc9, 292c814931d9, 53d2e0d48549, add521c1a5d2, 2a20ce91dc29, fa4352b74580, 3d8d91a5b32c, 8f7e8726e3f5, 89958992b618 (由 FreeBSD 基金会赞助)

mac_do(4) 现在支持通过 sysctl(8) 控件 security.mac.do.rules 在 jail 内修改规则。b3f93680e39b (由 FreeBSD 基金会赞助)

引入 setcred(2) 系统调用及相关 MAC 钩子。该系统调用能一次性设置进程所需的所有凭证:有效、真实及保存的用户 ID,有效、真实及保存的组 ID,辅助组以及 MAC 标签。除了提供原子性之外,它相较于标准凭证设置系统调用(如 setuid()seteuid() 等)的优势在于,使 MAC 模块(如 mac_do(4))能够以更精细的方式限制进程可能获得的凭证集合,因为它们现在可以看到最终期望状态并与初始状态进行比较。ddb3eb4efe55 (由 FreeBSD 基金会赞助)

mac_do(4) 中支持将多个用户和组作为单条规则的目标。支持组目标是 mac_do(4) 能够在目标凭证中强制执行有限的有效新组集并允许仅限组的凭证转换的前提条件。允许的组与一个或多个用户 ID 关联。规则目标部分的多个用户和组被视为可选项(包含或关系),但表达辅助组的强制存在或缺失的子句除外。规则语法发生了不兼容变动,但迁移现有规则仅需在目标部分前添加 uid=,将逗号(,)替换为分号(;),冒号(:)替换为大于号(>)。详情请参见手册页 mac_do(4)83ffc412b2e9, 8f7e8726e3f5, f01d26dec67f (由 FreeBSD 基金会赞助)

现在 sysctl(8) 可在 jail 中附加并运行自身。这能让父 jail 在子 jail 未安装 sysctl(8) 的情况下(例如轻量级 OCI 容器或精简 jail)获取或设置内核状态。这在操作 sysctl jail prison 或 vnet 时尤为有用。例如,sysctl -j foo -Jasysctl -j foo net.fibs=28d5d7e2ba3a6

使 sysctl(9) 变量 vnet 可通过 loader 调整。在 3da1cf1e88f8 中,标志 CTLFLAG_TUN 的含义被扩展为自动检查是否存在用于在早期启动时初始化 SYSCTL 的内核环境变量。该功能适用于所有静态和动态创建的 SYSCTL 类型,但不包括属于 VNET 的 SYSCTL。需要注意的是,该实现有限制:它的行为与非 vnet loader 调整项相同,即内核或模块初始化后,通过 kenv 等方式修改内核环境变量不会影响随后创建的 VNET 的对应变量。为解决此问题,可在 VNET 构建过程中使用 TUNABLE_XXX_FETCH 将内核环境变量提取到这些 vnet 变量中。894efae09de4

sound(4):按需分配 vchans。重构了 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,而不是设置数量或分配/释放 vchans。由于这些 sysctl 不再触发分配/释放操作,其效果是即时的,而之前在将 dev.pcm.X.{play|rec}.vchans 设置为非常大值时可能导致系统卡住。960ee8094913 (由 FreeBSD 基金会赞助)

移除了 sysctl(8) 控件 hw.snd.version7398d1ece5cf (由 FreeBSD 基金会赞助)

已废弃 sound(4) 中的 unit.* 代码,作为其中一部分,还移除了 loader(8) 可调项 hw.snd.maxunit25723d66369f (由 FreeBSD 基金会赞助)

修复了部分 AMD GPU 用户使用 Port drm-kmod 中 amdgpu DRM 驱动(自 v5.15 起,graphics/drm-515-kmod Port)时出现的运行变缓和卡死问题。尤其是搭载 Green Sardine、Polaris 10/20 和 Vega 芯片的显卡用户受到影响。近期 Intel GPU(13 代及以上)用户可能也受到影响。718d1928f874, 4ca9190251bb, 986edb19a49c, 9d1f3ce79d85, da257e519bc0 (由 FreeBSD 基金会赞助)

改进并修复了内存域(NUMA)迭代代码,特别是降低了部分 DRM 驱动的图形操作延迟。da257e519bc0, 83ad6d8d8eee, b15ff7214020 (由 FreeBSD 基金会赞助)

有效组 ID 现在存储在 struct cred 的新字段 cr_gid 中,并已从 cr_groups[] 的第一个元素移除,cr_groups[] 现在仅包含辅助组。所有使用 cr_groups[0] 的下游及外部模块必须修改为使用 cr_gid,而循环遍历 cr_groups[] 元素(排除 cr_groups[0],即仅处理辅助组)的相关代码也需调整,因为辅助组现在从 &cr_groups[0] 开始,而非 &cr_groups[1]。需要同时兼容 15.0 及更早版本的代码可以继续使用宏 cr_gid,并可通过测试 &cr_groups[0] != &cr_gid 来正确遍历辅助组。be1f7435ef21 (由 FreeBSD 基金会赞助)

架构相关的变动

在 amd64 平台上,FreeBSD 现在支持在具有 LA57 CPU 特性的现代机器上使用超过 4TB 的内存。d390633cf8cf (由 FreeBSD 基金会赞助)

在 amd64 平台上,重新设计了 %fsbase/%gsbase 寄存器及 TLS 基址的处理,使其对直接操作 CPU 上下文的应用程序更为有用。68ba38dad3 (由 FreeBSD 基金会赞助)

设备与驱动

本节包含自 14.0-RELEASE 以来的设备和设备驱动的变动与新增内容。

设备驱动

终端接口 tty(4) 现支持标志 IUTF8,可启用正确的 UTF-8 退格处理,默认启用,适用于默认 UTF-8 本地化环境。bb830e346bd5

提供了适用于 Intel E800 系列 Ethernet 网络控制器的 ice(4) 驱动,支持 100 Gb/s 操作,并更新到 1.43.2-k 版本。38a1655adcb3 (由英特尔赞助)

针对 Intel WiFi 设备的 iwlwifi(4) 驱动进行了大量稳定性改进。(由 FreeBSD 基金会赞助)

amd64 平台现在支持多个 PCI MCFG 区域,可访问非 0 域(segment)的 PCI 配置空间。4b5f64408804

现在,以太网驱动 smsc(4) 可以获取部分树莓派型号传入的 smsc95xx.macaddr 值,并将其用于 MAC 地址。哪怕 EEPROM 中没有地址,也能始终使用固定的 MAC 地址。028e4c6548e4

已从声卡子系统中移除了 snd_clone 框架,包括相关 sysctl,让系统更简化。不再创建每通道节点(/dev/dspX.Y),仅保留主设备节点(/dev/dspX)。e6c51f6db8d7 (由 FreeBSD 基金会赞助)

音频现已支持异步设备拔出。这大大简化了热插拔操作,例如 USB 耳机,同时在需要操作系统休眠和唤醒(挂起和恢复)的情况下,也便于 PulseAudio 的使用。d692c314d29a (由 FreeBSD 基金会赞助)

ice_ddp 已更新到 1.3.41.0。a9d78bb714e3 (由英特尔赞助)

hda(4) 驱动增加了对 Tiger Lake-H 的支持。dbb6f488df6e

ichsmb(4) 驱动增加了对 Meteor Lake 的支持。14c22e28e4ee (由 Framework Computer Inc 赞助) (由 FreeBSD 基金会赞助)

ig4(4) 驱动增加了对 Meteor Lake 的支持。56f0fc0011c2

Realtek 8156/8156B 的支持已从 cdce(4) 移至 ure(4),提高了性能和可靠性。630077a84186 (由 FreeBSD 基金会赞助)

增加了对 ACPI GPIO_AEI 对象的支持。1db6ffb2a482 (由亚马逊赞助)

已在所有架构上启用了 nvme(4)nvmecontrol(8)24687a65dd7f, aba2d7f89dcf (由 Chelsio Communications 和奈飞赞助)

驱动 mpi3mr(4) 版本已更新至 8.14.0.2.0。e6d4b221ba7c

mpi3mr(4) 的 MPI Header 已更新至版本 36,与最新的 MPI 规范保持一致,包括更新的结构、字段定义和与最新固件兼容所需的常量。60cf1576501d

现将 mpi3mr(4) 驱动集成到了 GENERIC 配置中。e2b8fb2202c2

iwmbtfw(4):增加了对 9260/9560 蓝牙适配器的支持。所需固件文件已包含在 comms/iwmbt-firmware Ports 中。8e62ae9693bd

ena(4) 驱动版本已更新至 v2.8.1。a1685d25601e (由亚马逊赞助)

bnxt(4):在 BCM57504 10/25GbE 网卡上启用了 NPAR 支持。54f842ed8897

bnxt(4):增加了对 5760X(Thor2)PCI ID 的支持。45e161020c2d

bnxt(4):增加了对 400G 速率模块的支持。32fdad17f060

ix(4):增加了对 1000BASE-BX SFP 模块的支持,支持 1Gbit 双向模块,并增加了对 Intel 以太网适配器 E610 的支持。89d4096950c4 dea5f973d0c8

igc(4):修复了 I226-K 和 LMVP 设备的附加问题。这些设备的 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

新增驱动 iwx(4),支持 Intel WiFi 6 系列 M.2 无线网卡。2ad0f7e91582 (由 FreeBSD 基金会赞助)

新增蜂窝调制解调器驱动,支持实现了 Mobile Broadband Interface Model(MBIM,移动宽带接口模型)的 USB 网络设备:umb(4)。配套工具 umbctl(8) 用于显示或设置 MBIM 蜂窝调制解调器接口参数(4G/LTE)。0f1bf1c22a0c (由 FreeBSD 基金会赞助)

现在,即使在 BIOS 启动时 smbios(4) 也将优先搜索 SMBIOS v3(64 位)入口点。这能在仅提供 v3 表的 BIOS(如 Hetzner 虚拟机)上检测,报告正确的 SMBIOS 版本。对于同时提供 v2 和 v3 表的机器,也会优先使用 v3 表,与 EFI 启动情况一致。bc7f6508363c (由 FreeBSD 基金会赞助)

现已默认启用驱动 usbhid(4),并优先于其他 USB HID 驱动如 ukbd(4)ums(4)uhid(4) 的使用。支持的设备类型包括:

  • 使用 hms(4) 在虚拟化环境中的绝对定位鼠标

  • 使用 hpen(4) 的数字化仪和触控笔设备

  • 复合 HID 设备,例如共享单个 USB 接口的键盘和鼠标

  • 使用 hcons(4)hsctrl(4) 的特殊键盘功能键(音量、亮度等)

  • 游戏手柄,包括 Xbox 360 和 PS4 手柄(使用 xb360gp(4)ps4dshock(4))以及通用手柄(使用 hgame(4)

  • 使用 hidraw(4) 的原始 HID 设备

FIDO/U2F 安全令牌将继续由自动加载的 u2f(4) 驱动得到支持。这些设备的名称和协议处理保持不变。74072e9f16c1 (由 FreeBSD 基金会赞助)

新增驱动 udbc(4),可用于通过 xHC 调试进行主机端调试目标设备。d566b6a70bcb (由 FreeBSD 基金会赞助)

新增驱动 ufshci(4),支持 Universal Flash Storage (UFS) 主控器。1349a733cf28 (由 Samsung Electronics 赞助)

mlx5(4) 驱动现已支持 Nvidia ConnectX-6+ 网卡的内联 IPSEC 卸载,这利用了内核 IPSEC 卸载基础设施。e23731db48ef (由 NVIDIA networking 赞助)

ichwd(4) 驱动中加入了对 Intel 6300ESB I/O 控制器集线器看门狗定时器的支持。这主要面向 QEMU 用户,其中该看门狗定时器作为 x86 虚拟机的默认且唯一定时器。2b74ff5fceb6

qat(4) 驱动新增了对 402xx 设备(ID 0x4944/0x4945)的支持。138e36514fe8 (由英特尔赞助)

已弃用和移除的驱动

已弃用总线驱动 agp(4),并计划在 FreeBSD 16.0 中移除。92af7c97e197 cadadd1a0398

已弃用 IBM PC 软盘控制器 fdc(4) 及相关工具,并计划在 FreeBSD 16.0 中移除。4c736cfc69a7 (由 FreeBSD 基金会赞助)

已弃用 firewire(4) 总线及相关驱动,并计划在 FreeBSD 16.0 中移除。fc889167c319 (由 FreeBSD 基金会赞助)

已弃用以太网驱动 le(4),并计划在 FreeBSD 16.0 中移除。e4d6433e9c03 (由 FreeBSD 基金会赞助)

已计划在后续版本中移除 syscons(4),并在手册页中标记为已弃用,以提示用户迁移到 vt(4)2bc5b1d60512 (由 FreeBSD 基金会赞助)

已弃用 USB 802.11g 驱动 upgt(4),并计划在 FreeBSD 16.0 中移除。7f8a5c5a1585 (由 FreeBSD 基金会赞助)

存储

本节是文件系统及其他存储子系统(本地和网络)的变动与新增功能。

通用存储

新增 Solaris 风格的扩展属性(在 NFSv4 中称为 named attributes)。目前,只有 ZFS(且文件系统数据集的 xattr 属性设置为 dir)和 NFSv4 支持它们。这些属性在目录中以普通文件形式呈现。详情参见 named_attribute(7)2ec2ba7e232d, df58e8b1506f, f61844833ee8, b1b607bd200f, ee95e4d02dbd

新增对通过 TCP 传输访问远程 NVMe over Fabrics 控制器的支持。可通过 nvmecontrol(8) 中的新命令建立与远程控制器的连接。连接建立后,由内核模块 nvmf(4) 处理,创建 nvmeX 设备并将远程命名空间导出为 nda(4) 磁盘。a1eda74167b5, 1058c12197ab (由 Chelsio Communications 赞助)

新增将命名空间导出到远程 NVMe over Fabrics(NVMe-oF)主机(通过 TCP 传输)的支持。内核模块 nvmft(4) 为 CAM target 层增加了新的前端,可将 ctl(4) LUN 导出为 NVMe 命名空间到远程主机。守护进程 ctld(8) 现已支持 NVMe 控制器,负责接受连接请求并将连接的队列对交给 nvmft(4) 处理。a15f7c96a276, 66b5296f1b29 (由 Chelsio Communications 赞助)

新增对 NVMe 命名空间动态调整大小的支持。nvd(4)nda(4) 驱动现已能够实时通知 geom 设备大小的变化。86d3ec359a56 (由奈飞赞助)

NFS

rc.conf(5) nfs_reserved_port_only 设置的默认值已变动。FreeBSD NFS 服务器现在要求请求的源端口必须位于特权端口范围内(即 ≤ 1023),这通常要求客户端在本地系统上具有提升权限。欲恢复以前的行为,可在 rc.conf(5) 中设置 nfs_reserved_port_only=NO6d5ce2bb6344 (由 FreeBSD 基金会赞助)

mountd(8) 定义了新的命令行选项 -a,如果目录路径不是服务器文件系统的挂载点,该选项可阻止使用标志 -alldirs 导出文件系统。07cd69e272da

文件系统 tarfs(4)tmpfs(4)cd9660(4)ext2fs(4) 的 NFS 文件句柄布局已变动。导出这些文件系统的 NFS 服务器,其客户端需要先卸载然后重新挂载这些导出。4db1b113b151, 1ccbdf561f41, 205659c43d87, cf0ede720391, 8ae6247aa966 (由 FreeBSD 基金会赞助)

mountd(8) 服务器已修改为使用 strunvis(3) 来解码 exports(5) 文件中的目录名,从而允许目录名中包含空格等特殊字符。可使用 vis -M 对这些目录名进行编码;详情参见 vis(1)2c83f1ada435

可在 exports(5)-maproot-mapall 选项中指定系统配置支持的任意数量的组。此前的上限为 NGROUPS_MAX + 1,其中 NGROUPS_MAX 仅表示允许的辅助组数量的最小最大值。现在改为使用正确的 {NGROUPS_MAX} + 1 值,可在运行时通过 sysconf(3) 获取 {NGROUPS_MAX}e87848a8150e (由 FreeBSD 基金会赞助)

新增了 sysctl(8) 变量于 kern.rpc.unenckern.rpc.tls 下,使 NFS 服务器管理员能够监控 NFS-over-TLS 的使用情况。大量握手失败可能表明 NFS 配置存在问题。b8e137d8d32d

当使用挂载选项 nocto 时,NFSv4.1/4.2 的 delegations(委托)利用率有所提升。这需要启用了 delegations 的最新 NFSv4.1/4.2 服务器。例如,在构建同时挂载 srcobj 的 FreeBSD 内核时,总 RPC 调用次数从 5461286 降至 945643,整体耗时降低约 20%。171f66b0c2ca, 50e733f19b37

新增了对 NFSv4.2 Clone 操作的支持,该操作使用块克隆在 NFS 服务器上进行“写时复制(COW)”文件。当前仅适用于已启用块克隆的导出 ZFS 文件系统。cce64f2e6851

UFS

在创建新的 UFS 文件系统时,newfs(8) 将默认启用软更新(soft updates)。6b2af2d88ffd

对于那些超过 2G inode 的卷,UFS 的可靠性显著提升。根本问题在于 32 位 inode 编号被错误地解释为有符号值,导致符号扩展到 ino_tc069ca085bd1, e36f069ecb47 (由 FreeBSD 基金会赞助)

UFS1 文件系统的 2038 年 1 月 19 日日期限制已延迟至 2106 年 2 月 7 日。仅影响旧 UFS1 格式的文件系统。详情请参阅提交说明。1111a44301da

ZFS

VOP_COPY_FILE_RANGE() 新增块克隆支持。目前,仅有启用块克隆的 ZFS 文件系统支持此功能,NFSv4.2 也支持。详细信息请参见 pathconf(2)copy_file_range(2)37b2cb5ecb0f

GEOM

已移除对 vinum 卷的支持。f87bb5967670, e51036fbf3f8

启动加载器变动

现在,可在图形系统上通过 loader.conf(5) 中的可选变量 loader_gfx 再次启用 ASCII loader(8)bef6d85b6de5

现在,loader(8) 在读取其他配置文件后,会读取 local_loader_conf_files 变量中列出的本地配置文件,默认值为 /boot/loader.conf.locala25531db0fc2

现在,loader(8) 可以根据 SMBIOS 中的变量 planar makerplanar productsystem productuboot m_product 来读取特定配置文件。当前最详细的文档是 git 提交信息,3eb3a802a31b

在 EFI 系统上,改进了 loader(8) 的控制台检测。如果没有 ConOut 变量,则检查 ConIn;如果发现多个设备,则优先使用串口设备。20a6f4779ac6 (由奈飞赞助)

现在,loader(8) 的帧缓冲支持能使用仅文本的视频驱动,从而节省空间。57ca2848c0aa (由奈飞赞助)

在 arm64 系统上,loader.efi(8) 对 ACPI 的检测将更早完成。使用 ACPI 的 arm64 系统应更新 EFI 分区上的 loader.efi05cf4dda599a, 16c09de80135

现在在 aarch64 和 amd64 上,通过 LinuxBoot 启动加载器可以从 Linux 启动 FreeBSD。46010641267 (由奈飞赞助)

BIOS 启动加载器重新增加了对 gzip 和 bzip2 的支持,但默认移除了图形模式支持,以解决体积问题。(EFI 启动加载器保持不变,仍支持所有模式)4d3b05a8530e (由奈飞赞助)

现在,BIOS 启动加载器能在表位于 4GB 以下时使用 SMBIOS v3(64 位)入口点。由于 BIOS 启动加载器作为 BTX 客户端在 amd64 上仍为 32 位,因此无法访问 4GB 以上地址,但 64 位入口点可能引用 4GB 以下的结构表,可在 BIOS 未提供 32 位入口点时使用,例如 Hetzner 虚拟机。7f005c6699f4 (由 FreeBSD 基金会赞助)

现在 BIOS 启动加载器将优先使用 SMBIOS v3(64 位)入口点。当 32 位和 64 位入口点同时存在时,SMBIOS 规范规定 64 位入口点至少包含 32 位入口点引用的所有结构,即 32 位入口点仅为兼容性提供,而 64 位入口点更可能包含完整有效值。3f744fb8b2c5 (由 FreeBSD 基金会赞助)

EFI 启动加载器现在同样优先使用 SMBIOS v3(64 位)入口点,与 BIOS 启动保持一致。不同之处在于,EFI 加载器在 64 位平台上运行,因此 v3 入口点的结构表不受 4GB 限制。96f77576e9ea (由 FreeBSD 基金会赞助)

网络

本节说明了影响 FreeBSD 网络的变动。

通用网络

FreeBSD 现在实现了最初来自 OpenBSD 的 SO_SPLICE 接口。该功能能让用户空间应用将两个已连接的 TCP 套接字拼接在一起,此后到达一个套接字的数据会自动通过拼接的另一个套接字转发,而不是交付给应用程序。a1da7dc1cdad (由 Klara, Inc. 赞助) (由 Stormshield 赞助)

已恢复对 802 标准网络的 ARP(arp(4))支持;此前在移除 FDDI 支持时被意外删除(这与以太网标准封装不同)。d776dd5fbd48

现在能构建支持 IPv6(INET6)但不包含 IPv4(INET)的内核。6df9fa1c6b83

netgraph 的 ng_ipfw(4) 模块不再将 cookies 截断为 16 位,现在支持完整 32 位。dadf64c5586e

igc(4) 驱动中新增了 AIM(自适应中断调节)支持。472a0ccf847a (由 Rubicon Communications, LLC(“Netgate”)和 BBOX.io 赞助)

该功能也已添加到了 lem(4)em(4)igb(4) 驱动中。在 FreeBSD 12.0 中引入的 UDP 性能重大回退(包括通过 UDP 的 NFS)被认为已通过此变动修复。49f12d5b38f6 (由 Rubicon Communications, LLC(“Netgate”)和 BBOX.io 赞助)

ip6addrctl(8) 能够附加并在 jail 中运行。这将使管理 vnet jail 的地址选择策略更加容易,尤其适用于轻量级 OCI 容器或精简 jail。b709f7b38cc4

包过滤器 pf(4) 增加了新的运行时 loader.conf(5) 可调参数 net.pf.default_to_drop,以及编译时选项 PF_DEFAULT_TO_DROP,使默认规则为丢弃。7f7ef494f11d, 3965be101c43

pf(4) 中新增了路由到池(route-to pool)选项 “prefer-ipv6-nexthop”,允许通过 IPv6 网关路由 IPv4 数据包。65c318630123 d2761422eb0a (由 InnoGames GmbH 赞助)

pf(4) 现已支持 OpenBSD 风格的 NAT 语法。可以在 passmatch 规则中使用 nat-tordr-tobinat-to。旧语法 nat on … 仍可使用。e0fe26691fc9 (由 InnoGames GmbH 赞助)

已更新协议 pfsync(4),可同步多个缺失属性。这修复了带有选项 route-to、af-to、rtable、dummynet、tags 和 scrub 的状态同步问题。如果需要与旧版本 FreeBSD 进行同步,可通过 ifconfig pfsync0 version $VERSION 配置协议版本。对于 $VERSION:13.X 版本使用 1301,14.X 版本使用 1400。对于运行 FreeBSD 15.0 的主机之间的同步,默认值为 150099475087d63b (由 InnoGames GmbH 赞助)

内核 TLS 支持现已于 aarch64、amd64、powerpc64 和 powerpc64le 上的 GENERIC(默认)内核中默认启用。b2f7c53430c3 (由 Chelsio Communications 赞助)

新增可调参数 net.inet.{tcp,udp,raw}.bind_all_fibs。为了向后兼容,它们默认值为 1。设置为 0 会修改对应协议的套接字行为,使得非源自与套接字同一 FIB 的接口的数据包被忽略。在这种情况下,不同 FIB 的 TCP 和 UDP 套接字也可以绑定到同一地址。默认行为保持不变。5dc99e9bb985, 08e638c089ab, 4009a98fe80b (由 Klara, Inc. 赞助) (由 Stormshield 赞助)

INADDR_ANY 的连接(即将其作为 localhost 的别名使用)默认已禁用。可把 sysctl net.inet.ip.connect_inaddr_wild 设置为 1 重新启用此功能。cd240957d7ba (由 FreeBSD 基金会赞助)

新增内核内联 IPSEC 卸载基础设施。另见支持该功能的 mlx5(4) 驱动说明。ef2a572bf6 (由 NVIDIA networking 赞助)

ngctl(8) 新增标志 -j,可将其附加并在 jail 内运行,使得即使 jail 内未安装 ngctl(8),也能操作 netgraph 节点。72d01e62b082

sockstat(4) 将默认显示 UDP-Lite 端点。978615d7bf7c

已移除支持 FreeBSD 7 和 8 的 ipfw(8) 二进制兼容代码。660255be1ed9 (由 FreeBSD 基金会赞助)

网络协议

网络栈进行了大量改进,如 sctp(4) 栈的性能提升和错误修复。

通过 sctp_peeloff(2) 返回的描述符现在会继承父套接字的 Capsicum 能力 rights(4)ae3d7e27abc9 (由 FreeBSD 基金会赞助)

sysctl 变量 net.inet.tcp.nolocaltimewait 的默认值已从 1 改为 0。这意味着 FreeBSD 不再跳过远程地址为本地的端点的 TIME_WAIT 状态。新的 sysctl 变量 net.inet.tcp.msl_local 可用于控制这些端点在 TIME_WAIT 状态下的停留时间。net.inet.tcp.nolocaltimewait 已被弃用,计划在 FreeBSD 16 中移除。c3fc0db3bc50 (由奈飞赞助)

改进了本地流套接字(AF_UNIX/SOCK_STREAM)和有序数据包流套接字(AF_UNIX/SOCK_SEQPACKET),可提升批量传输和往返时间性能。套接字 SOCK_SEQPACKET 已符合规范,现在表现为真正的流套接字,而在旧版 FreeBSD 中,它可能表现出数据报套接字的特性。依赖旧实现漏洞的应用可能需要调整。d15792780760

无线网络

LinuxKPI 802.11 兼容层 linuxkpi_wlan(4) 现支持来自 wlan_gcmp(4) 的 Galois/Counter 模式协议(GCMP)。(由 FreeBSD 基金会赞助)

继其他驱动之后,已从基本系统中移除了 iwlwififw(4) 固件,改为使用 Port 方式并支持 fwget(8)。在从旧版本更新时,用户必须先安装固件包。(由 FreeBSD 基金会赞助)

无线驱动 iwlwifi(4) 支持了部分 Intel WiFi 5,以及全部 Intel WiFi 6 和 WiFi 7 硬件的 802.11ac(VHT)。(由 FreeBSD 基金会赞助) 无线驱动 iwx(4) 支持了 Intel WiFi 6 硬件的 802.11ac(VHT)。(由 FreeBSD 基金会赞助) 无线驱动 rtwn(4) 支持 RTL8812A 和 RTL8821A 芯片组的 802.11ac(VHT)。无线驱动 rtw89(4) 支持了部分 Realtek WiFi 6 和 WiFi 7 硬件的 802.11g。a2d1e07f6451 (由 FreeBSD 基金会赞助)

硬件支持

本节是对物理机器、虚拟机监控程序(hypervisor)和虚拟化环境的一般硬件支持,以及未归入本文件其他章节的硬件变动和更新。

请参阅 15.0-RELEASE 支持的硬件列表 以及 平台页面 ,获取完整的支持 CPU 架构列表。

虚拟化支持

bhyve(8)vmm(4) 现已支持 arm64 和 riscv 平台。sysutils/u-boot-bhyve-arm64 和 Port sysutils/u-boot-bhyve-riscv 提供这些平台使用的引导加载程序。47e073941f4e d3916eace506 (由 Arm Ltd 赞助) (由创新英国赞助) (由 FreeBSD 基金会赞助) (由布加勒斯特理工大学赞助)

bhyve(4) 现已支持 “slirp” 网络后端,从而启用非特权用户网络。目前仅支持对虚拟机的入站连接,虚拟机的出站连接尚不支持。此功能需要 Port net/libslirpc5359e2af5ab (由创新英国赞助)

现在,bhyve(4) 能为虚拟机内存配置 NUMA 拓扑。此外,可以为每个虚拟机 NUMA 域定义 domainset(9) 策略,用于指定主机内存用于支撑该虚拟机 NUMA 域的物理内存,类似于 cpuset(1) 的选项 -n 。目前仅支持 amd64 虚拟机。f1d705d4f431

在使用 www/novnc 客户端时,bhyve(8) 的 VNC 服务器能显示正确的颜色。f9e09dc5b1d5

在使用启动 ROM(即不使用 bhyveload(8))运行 bhyve(8) 虚拟机时,bhyve 现在假设启动 ROM 会启用 PCI BAR 解码。这与某些启动 ROM(尤其是过时的 edk2-bhyve 构建)不兼容。要恢复旧行为,请在 bhyve 配置中添加 pci.enable_bars='true'。注意,已将软件包 uefi-edk2-bhyve 重命名为 edk2-bhyvee962b37bf0ff (由创新英国赞助)

已弃用 amd64 bhyve(8) 的选项 lpc.bootromlpc.bootvars,请改用顶层选项 bootrombootvars43caa2e805c2 (由创新英国赞助)

现在能被 NVMM 虚拟机监控程序识别。34f40baca641

在 Hyper-V 下,TLB 刷新使用 hypercall 而非 IPI,从而最多提升了 40% 的 TLB 性能。7ece5993b787 (由微软赞助)

Linux 二进制兼容层

对于所有二进制兼容层的 stat() 变体,现在会忽略标志 AT_NO_AUTOMOUNT(因为该标志指定的行为已与 FreeBSD 相符),从而提升了 Linux 应用的兼容性。99d3ce80ba07 (由 FreeBSD 基金会赞助)

现已在 Linux 二进制兼容层中实现了 Linux 系统调用 inotify(2)(由 Klara, Inc. 赞助)

多媒体

对音频栈进行了多项改进,如在 mixer(8) 中支持热插拔,以及新增 mididump(1) 工具。cf9d2fb18433 (由 FreeBSD 基金会赞助) 7224e9f2d4af (由 FreeBSD 基金会赞助)

新增实用工具 sndctl(8),用于查看和操作音频设备设置(sysctls、/dev/sndstat)的各类接口集中到一个工具中,其控制界面类似于 mixer(8)44e5a0150835, 9a37f1024ceb (由 FreeBSD 基金会赞助)

已将 virtual_oss 导入到基本系统。从 FreeBSD 15.0 开始,将不再构建 Port audio/virtual_oss。对于用户而言,唯一实际变化是安装过程:基本系统已提供所有功能,以下可选组件仍可通过 Ports 安装:

  • sndio 后端支持:audio/virtual_oss_sndio

  • 蓝牙后端支持:audio/virtual_oss_bluetooth

  • virtual_equalizer(8)audio/virtual_oss_equalizer

除此之外,virtual_oss 应正常工作。virtual_oss 用户可以卸载 audio/virtual_oss,改用基本系统提供的版本。5a31c623143f (由 FreeBSD 基金会赞助)

文档

本节包含基本系统自带的手册页 (man(1)) 及其他文档的变动。

手册

新增手册 freebsd-base(7),提供基本系统软件包布局的详细信息,以及如何使用这些软件包更新系统。e1632b827b1a

文件系统相关的手册已移至第四节,即内核接口手册(Kernel Interfaces Manual)。1687d77197c0

重写了 builtin(1) 手册,信息更加简洁,并新增了 FreeBSD CLI 内置快捷键的章节。42df4faf7004

新增手册 networking(7),提供了系统连接网络(包括 WiFi)的快速入门指南,并链接到其他手册页和官方手册(handbook)。39f92a4c4c49

更新了手册 build(7),加入了从源代码构建系统的说明。275f61111f43

ccdconfig(8) 中,建议使用 graid(8)zfs(8) 替代 gvinum(8)55cb3a33d920

重写了 ps(1) 手册,解释了基本原理,并更新了其中的说明来匹配实际情况。改写了前言部分,对 ps(1) 命令的各个方面提供了全面概述。修正了若干选项和关键词的说明来匹配其实际行为。还增补了 STANDARDS 和 BUGS 部分。ddf144a04b53 (由 FreeBSD 基金会赞助)

重写了 mac_do(4) 手册页,以支持将多个用户和组作为单条规则的目标,这导致规则语法发生了变化。特别地,新增了 JAIL SUPPORT 和 SECURITY CONSIDERATIONS 部分。bc201841d139 (由 FreeBSD 基金会赞助)

增补了 mdo(1) 手册页的现有内容,以记录对目标凭证中完全指定所有用户和组的新支持。现在的介绍部分更长,并新增了 SECURITY CONSIDERATIONS 部分。20ebb6ec5ac0 (由 FreeBSD 基金会赞助) 【由谷歌(2025 谷歌编程之夏)赞助】

新增了初始手册页:以太网交换机控制器 mtkswitch(4)ip17x(4)ar40xx(4)e6000sw(4)37f00bc257d, f750a114d2c, 91c975c3913, 6da793a8caa

mount(8) 增加了在单用户模式下将所有文件系统重新挂载为可读写的示例。c3e06b23b417

重新改写了 Lua loader(8) 模块的手册页,优化了 apropos(1) 的搜索结果。5d59c1b4f14e

手册页样式指南 style.mdoc(5) 新增了列出支持硬件的章节。以这种方式列出时,支持的硬件将在 支持的硬件说明 中显示。在本次发布中,许多手册页均新增/改写了这一部分。

大量工作已用于将 sysctl(8) 和环境变量记录到手册中。可以通过 apropos Va=here.is.the.sysctlapropos Ev=here_is_the_environment_variable 搜索它们。

修订了 General Commands 手册的 intro(1) ,加入了关于安装额外命令的说明,并列出了标准命令目录。cc0af6d5a6c2

修订了 System Calls 手册的 intro(2),加入了链接和来自 OpenBSD 的 HISTORY 部分。9a62cdc01327, 69ff2d754c1c, 6dfbe695c322, de525c502a3a, d846f33bb6d4, 4696ca7baf2f, 9e8df7900f52, bcc57e971597

修订了 File Formats 手册的 intro(5),吸收了来自 OpenBSD 的改进。8d65152cbfc8, 26ec37653662, 37508388d066, a6175f28da70

修订了文件系统层次结构索引手册 hier(7),增加了大量交叉引用,并对 /usr/local 提供了更详细的说明。

Ports 和软件包基础设施

本节介绍 FreeBSD Ports、软件包基础设施以及包管理和安装工具的变化。

默认的 pkg(8) 配置文件 /etc/pkg/FreeBSD.conf 中新增了 FreeBSD-kmods 仓库。该仓库是专为 15.0-RELEASE(而非 15-STABLE 分支)编译的内核模块。通过此仓库安装特定的内核模块,可以修复驱动程序(尤其是显卡驱动)因接口不稳定而导致的问题。这样一来,当你在旧版 FreeBSD 上构建基于 15-STABLE 仓库的软件包时,这些驱动亦可正常运行。a47542f71511

已分别将在 /etc/pkg/FreeBSD.conf 中定义的仓库 FreeBSDFreeBSD-kmods 重命名为 FreeBSD-portsFreeBSD-ports-kmods。若用户在 /usr/local/etc/pkg/repos 中覆盖了这些仓库,需要调整配置来匹配新名称。

安装器

FreeBSD 安装器 bsdinstall(8) 现在能在 FreeBSD 基本系统安装完成后下载安装固件包。03c07bdc8b31 (由 FreeBSD 基金会赞助)

包管理变动

bootonly ISO 和 mini-memstick 镜像现在内置了软件包 net/wifi-firmware-iwlwifi-kmodnet/wifi-firmware-rtw88-kmod,能让这些需要上述固件包的设备通过无线连接进行系统安装。655fcdde1aff (由 FreeBSD 基金会赞助)

DVD ISO 中新增软件包 net/wifi-firmware-kmod@release,为更多 WiFi 驱动提供了固件支持。8c6df7ead19c (由 FreeBSD 基金会赞助)

关于后续 FreeBSD 版本的一般说明

此部分原文为空白。

最后更新于

这有帮助吗?