# FreeBSD 13.4: 新特性及其发展历程

* 原文地址：[FreeBSD 13.4: What’s new, and how did we get here?](https://freebsdfoundation.org/blog/freebsd-13-4-whats-new-and-how-did-we-get-here/)
* 作者：FreeBSD 基金会
* 原文发布时间：2024 年 10 月 4 日

## 简介

长期以来，要寻求现代企业级开源操作系统，FreeBSD 始终是首选。FreeBSD 宽松的许可证、卓越的安全性、出色的性能和坚如磐石的稳定性使其成为各类企业和组织的不二选择。

[**FreeBSD 13.4-RELEASE**](https://www.freebsd.org/releases/13.4R/relnotes/) 在基础设施、硬件兼容性和安全性方面有了重大改进，进一步证明了 FreeBSD 在业内的价值。此版本在 13.x 系列先前版本的坚实基础上进行了扩展，并与 2023 年 11 月推出的 [FreeBSD 14 分支](https://www.freebsd.org/releases/14.1R/announce/) 的开发时间表相一致。

## FreeBSD 13.x 概览

### 创新的基础

**FreeBSD 13.0-RELEASE** 有重大改进，设定了新的系统稳健性和性能标准。包括工具链的战略性调整，全面过渡到 **LLVM/Clang**，使其作为默认编译器，这简化了开发过程并增强了系统稳定性。此外，作为一种现代 VPN 协议，**WireGuard** 显著增强了 FreeBSD 的网络安全，为 IPSec 和 OpenVPN 提供了一种更简单、快速的替代方案。

随着 13.x 系列的推进，每个版本都在用户空间和内核中引入了重要的增强功能，解决了重大的安全漏洞，并确保系统在面对不断演变的威胁时依然岿然如山。13.x 系列扩展了硬件支持和网络功能，进一步巩固了 FreeBSD 项目对适应性和前瞻性的承诺，满足了从服务器管理员到桌面用户的普遍需求。

## FreeBSD 13.x 中的主要增强功能

### 网络改进

#### 普通网络改进

* **mbuf 类型增强：** 引入了一种新类型的 mbuf，能够将多个未映射的物理页面作为一个缓冲区来表示。这一增强由 Netflix 赞助，提升了 sendfile 操作的性能，突显了 FreeBSD 对网络性能的重视。
* **安全内存回收（SMR）：** 将 SMR 集成到内核中，改进了多线程环境中的内存管理，优化了系统整体性能。

#### 增强传输层安全（TLS）

* **基于内核的 TLS：** 实现了基于内核的 TLS 数据帧和加密功能，支持 TCP 套接字上的 TLS 1.0 到 1.3 版本。包括通过内核加密驱动程序进行 AES-CBC 和 AES-GCM 密码套件的发送卸载，以及 TLS 1.2 中的 AES-GCM 接收卸载。这些增强功能由 Netflix 和 Chelsio Communications 赞助，进一步强化了 FreeBSD 在安全和高效数据传输方面的承诺。

#### 比例速率降低（PRR）

* **TCP 改进：** 在 TCP 中启用了 PRR 功能，以增强在突发丢包和 ACK 削减场景下的丢包恢复性能。此功能改进了丢包恢复表现，并防止了超时重传（RTO）阻塞，提供了更强大的网络体验。

#### 路由栈重构

* **重写的路由栈：** 引入了一种基于“下一个跳点”（nexthop）的新路由栈，持有所有必要的状态信息，能高效地将数据包路由到目的地。这使得路由操作更加高效和可扩展。
* **增强的多路径路由支持：** 重新设计的多路径路由支持，支持 64 宽的多路径路由和 O(1) 查找时间，在多路径路由场景中显著提高了可扩展性和性能。
* **自定义路由查找算法：** 支持自定义路由查找算法，将控制平面和数据平面操作解耦，从而在负载下实现更快速的查找和更好的收敛时间。

#### 服务质量（QoS）与拥塞控制

* **QoS 增强：** 现在，工具 `ping` 能使用 IP DSCP 和以太网 PCP 设置网络服务质量（QoS），方便进行更精细的流量管理和优先级排序。 **(在 FreeBSD 13.3 中引入)**
* **拥塞控制算法改进：** `cc_cubic` TCP 拥塞控制算法已更新，与 RFC 8312 中的标准更加一致，优化了 TCP 拥塞控制行为。 **(在 FreeBSD 13.3 中引入)**

#### 流控制传输协议（SCTP）与高级网络功能

* **SCTP 作为可加载内核模块：** SCTP 支持已迁移到新的内核模块 `sctp.ko`，使其变为可选功能，不再默认编译进 GENERIC 内核，从而提供了更灵活的部署场景。
* **堆叠 VLAN（802.1ad）支持：** 引入对堆叠 VLAN 的支持，增强了在复杂网络环境中 VLAN 配置的灵活性和可扩展性。
* **高级网络功能：** 对 TCP/IP 栈的增强，如为改善 SACK 丢包恢复引入 PRR，展示了 FreeBSD 在保持网络性能和可靠性竞争力方面的承诺。

### 存储与虚拟化改进

#### 存储增强

* **ctld 中的网络 QoS：** 工具 `ctld` 现在支持使用差分服务代码点和以太网优先级代码点（Ethernet PCP）设置网络 QoS，进一步提升了 FreeBSD 在高性能存储解决方案中的表现。 **(在 FreeBSD 13.3 中引入)**
* **更新的 NFS 支持：** NFS 客户端和服务器已更新，以支持 NFSv4.2，包括扩展属性，展示了 FreeBSD 在兼容性和功能丰富性方面的持续承诺。
* **基于 TLS 的安全 NFS：** FreeBSD 支持通过 TLS 配置 NFS，专注于提供安全存储解决方案。
* **迁移到 OpenZFS：** ZFS 作为 FreeBSD 存储能力的基石，现在是 OpenZFS 2.1.14，确保了 FreeBSD 享受该强大文件系统的最新发展成果。

#### 虚拟化增强

* **Bhyve 中增强的虚拟机支持：** 内核模块 `vmm` 现在支持的虚拟 CPU 可大于 16 个，使得虚拟机能够更有效地使用主机的 CPU 资源。此外，Bhyve 还引入了对 virtio-input 设备仿真的支持，通过支持将键盘和鼠标输入事件注入到虚拟机中，改善了与虚拟化环境的交互。

### 用户空间与内核增强

#### 用户空间改进

* **进程管理增强：** 用户现在能直接从 `~/.login_conf` 设置进程优先级和 `umask` 值，更精细地控制进程管理和文件权限。 **(在 FreeBSD 13.3 中引入)**
* **报告与配置增强：** 对定期输出的流线化和对 `head`、`tail` 等工具的更新，确保了参数 `-q`（安静模式）和 `-v`（详细模式）的一致性，同时采用 SI 后缀表示数值参数，提升了系统可用性和配置灵活性。 **(在 FreeBSD 13.3 中引入)**
* **增强的认证：** libtacplus 库现在符合 POSIX shell 语法规则，提高了 `TACACS+` 认证的安全性和可配置性。 **(在 FreeBSD 13.3 中引入)**

#### 内核增强

* **安全性改进：** 实现了针对 64 位可执行文件的地址空间布局随机化（ASLR），通过随机化内存地址空间提高安全性，可有效缓解某些类型的攻击。此外，还针对特定英特尔 CPU 的硬件页面失效问题提供了变通解决方案，强调了 FreeBSD 对安全性的重视。 **(在 FreeBSD 13.3 中引入)**
* **调试增强：** 新的配置参数 `SPLIT_KERNEL_DEBUG` 能分别处理内核和模块的调试数据，优化了调试流程，而不影响系统性能。

### 加密框架与驱动程序更新

* **libmd 提升加密多样性：** 增加了对 SHA-512/224 的支持，这是一种截断版的 SHA-512 哈希函数，提供了紧凑而安全的哈希替代方案。 **(在 FreeBSD 13.3 中引入)**
* **全面改进的加密框架：** 内核中的加密框架经过了大幅度改进，增强了对现代加密算法的支持，并简化了设备驱动程序和框架消费者的接口。废弃的算法已被移除，以提升安全性。
* **驱动程序支持增强：** 将 aesni 驱动程序添加到 GENERIC 内核中，支持 AMD64 和 i386 架构，通过硬件加速的加密功能提升软件加密和安全性。

### 硬件支持改进

* **以太网控制器支持：** 引入了驱动程序 igc，支持 Intel I225 以太网控制器，支持各种速度及高级功能，如校验和卸载和多队列操作。
* **驱动程序更新：** 驱动程序 ice 已添加固件日志记录和初步的数据中心桥接（DCB）支持，进一步提升了 FreeBSD 在管理和优化网络接口方面的能力。 **(在 FreeBSD 13.3 中引入)**
* **处理器支持：** 完善对英特尔 Alder Lake（12 代）CPU 的支持，并整合进 hwpmc 框架，以充分利用 CPU 的新特性。

## 13.x 中已弃用功能和删除的支持

在 FreeBSD 13.x 系列中，多个功能和支持被弃用/移除，反映了 FreeBSD 项目面向未来的理念，致力于采用现代技术和标准。

### 用户空间与内核更改

* **工具链现代化：** 过时的 binutils 2.17 和 GCC 4.2.1 已被移除，标志着所有受支持的架构全面过渡到了 LLVM/Clang 工具链。这一变化强调了 FreeBSD 在提升系统稳定性和开发灵活性方面，致力于利用现代工具链的承诺。
* **许可证与软件更新：** GPL 许可证版本的 `dtc` 被 BSD 许可证版本取代。此外，BSD 版本的 `grep` 取代了 GNU 版本。工具 `bc` 和 `dc` 被 Gavin D. Howard 开发的版本所替代，这些版本不依赖外部的大数库，并提供了 GNU bc 的扩展功能。 **(在 FreeBSD 13.3 中引入)**
* **弃用的工具：** 像自动挂载守护进程 `ctm` 和 `amd` 等工具已被移除，现代替代工具如 `autofs` 已取代其功能。 **(在 FreeBSD 13.3 中引入)**

### 网络驱动弃用

* **过时的网络驱动：** 一些不再使用的过时网络驱动被移除，以简化对较新和更常用硬件的支持。这使得可以更加专注于提升对现代网络接口的支持。

### 虚拟化弃用

* **Bhyve 精细化改进：** FreeBSD 对其本地虚拟化管理程序 Bhyve 进行了精细化改进，移除了已弃用的设备模型，并支持更新的功能，如 VirtIO-9p 文件系统共享和虚拟机快照。

### 面向未来的更改

* **CPU 类型更改：** i386 架构的默认 `CPUTYPE` 从 486 变更为 686，要求使用 686 类 CPU。这与行业标准一致，i686 已成为基准。 **(在 FreeBSD 13.3 中引入)**

## FreeBSD 13.4-RELEASE 亮点

**FreeBSD 13.4-RELEASE** 是 13-STABLE 分支的最新版本。它包含了错误修复、安全补丁和更新的驱动程序，以增强用户体验和系统稳定性。

### 从先前版本升级

从早期版本升级的用户将发现升级过程非常顺利，升级过程有详细的文档支持。建议在进行安装前，先查阅发布说明中的勘误表，以了解任何最新的紧急问题。

### 安全性与 Errata

#### 安全公告

该版本解决了若干个重要的安全漏洞：

|           **公告**           |      **日期**     | **主题**                            |
| :------------------------: | :-------------: | --------------------------------- |
|  FreeBSD-SA-24:03.unbound  | 2024 年 3 月 28 日 | Unbound 中的多个漏洞                    |
|  FreeBSD-SA-24:04.openssh  |  2024 年 7 月 1 日 | OpenSSH 预认证远程代码执行                 |
|     FreeBSD-SA-24:05.pf    |  2024 年 8 月 7 日 | pf 在状态表中错误匹配不同的 ICMPv6 状态         |
|   FreeBSD-SA-24:06.ktrace  |  2024 年 8 月 7 日 | ktrace(2) 在执行 setuid 二进制文件时未能解除附着 |
| FreeBSD-SA-24:07.nfsclient |  2024 年 8 月 7 日 | NFS 客户端接受包含路径分隔符的文件名              |
|  FreeBSD-SA-24:08.openssh  |  2024 年 8 月 7 日 | OpenSSH 预认证异步信号安全问题               |
|   FreeBSD-SA-24:09.libnv   |  2024 年 9 月 4 日 | libnv 中的多个漏洞                      |
|   FreeBSD-SA-24:10.bhyve   |  2024 年 9 月 4 日 | bhyve(8) 通过 TPM 设备传递特权来宾逃逸        |
|    FreeBSD-SA-24:11.ctl    |  2024 年 9 月 4 日 | ctl(4) CAM 目标层中的多个问题              |
|   FreeBSD-SA-24:12.bhyve   |  2024 年 9 月 4 日 | bhyve(8) 通过 USB 控制器特权来宾逃逸         |
|  FreeBSD-SA-24:13.openssl  |  2024 年 9 月 4 日 | OpenSSL 中 X.509 名称检查的可能 DoS 漏洞    |
|    FreeBSD-SA-24:14.umtx   |  2024 年 9 月 4 日 | umtx 内核 panic 或使用后释放问题            |

#### 勘误表

重要修复包括：

|         **Errata**         |      **日期**     | **主题**                          |
| :------------------------: | :-------------: | ------------------------------- |
|    FreeBSD-EN-24:05.tty    | 2024 年 3 月 28 日 | TTY 内核 panic                    |
| FreeBSD-EN-24:06.wireguard | 2024 年 3 月 28 日 | WireGuard 中 if\_wg(4) 的屏障不足     |
|   FreeBSD-EN-24:07.clang   | 2024 年 3 月 28 日 | 启用某些优化时 Clang 崩溃                |
|  FreeBSD-EN-24:08.kerberos | 2024 年 3 月 28 日 | 使用弱加密时 Kerberos 崩溃              |
|    FreeBSD-EN-24:09.zfs    | 2024 年 4 月 24 日 | 与 ZFS 相关的内核线程导致高 CPU 使用         |
|    FreeBSD-EN-24:10.zfs    | 2024 年 6 月 19 日 | ZFS 中的内核内存泄漏                    |
|    FreeBSD-EN-24:11.ldns   | 2024 年 6 月 19 日 | ldns 使用在 resolv.conf 中注释掉的名称服务器 |
|   FreeBSD-EN-24:12.killpg  | 2024 年 6 月 19 日 | killpg 中的锁顺序反转导致活锁              |
|   FreeBSD-EN-24:13.libc++  | 2024 年 6 月 19 日 | 向堆分配的 std:: string 删除传递了错误的大小   |
|  FreeBSD-EN-24:14.ifconfig |  2024 年 8 月 7 日 | ifconfig 中的网络掩码分配错误             |
|  FreeBSD-EN-24:15.calendar |  2024 年 9 月 4 日 | cron(8) / periodic(8) 会话登录问题    |

### 用户空间应用程序更改

* **性能改进：** libcapsicum 已改进，缓存了更多的时区信息，减少了对 `tzset(3)` 的调用，提升了性能。
* **贡献软件更新：**
  * **SQLite3：** 升级到版本 3.46.0。
  * **OpenSSH：** 升级到版本 9.7p1。此次发布重点修复了 bug，并将 DSA 签名算法支持设为编译时参数，计划在今年稍晚禁用该算法，并在 2025 年完全移除支持。
  * **LLVM/Clang：** 升级到版本 18.1.5。
  * **bc：** 升级到版本 6.7.6。
  * **atf：** 升级到 0.22 快照 55c21b2c。
  * **libarchive：** 升级到版本 3.7.4。
  * **capsicum-test：** 升级到快照 eab7a83b。

### 设备和驱动程序

* **驱动程序更新：**
  * **irdma 和 ice：** 这两个驱动已更新，以提高性能和稳定性。
  * **u3g 支持：** 增加了对设备 SIM7600G 的支持，扩展了移动网络的硬件兼容性。
  * **无线驱动程序：** 对原生和基于 LinuxKPI 的无线驱动进行了多个稳定性修复，提升了 FreeBSD 的无线网络性能（由 FreeBSD 基金会赞助）。

### 网络更新

* **SCTP 改进：** 增加了对环回接口上 SCTP 校验和卸载的支持，同时对 SCTP 堆栈进行了性能提升和 bug 修复。

### 硬件支持

* **处理器支持：** 为 AMD Ryzen 7“Phoenix”处理器增加了对驱动程序 `amdsmn` 和 `amdtemp` 的支持，可以通过 `sysctl` 获取温度读取值。

### 文档更新

* **手册页：** 删除了对旧工具 `disklabel` 的引用，改为使用 `gpart`。后续的 FreeBSD 版本将完全移除该工具，推广现代的磁盘管理方法。

### Ports 和软件包基础设施

* **软件包变更：**
  * **现代化的 DVD 软件包集：** 反映了当前的软件包装趋势。
  * **已移除的 Port：**
    * `archivers/unzip`（现在已包含在基本系统中）。
    * `emulators/linux_base-c7`（没有其他 Linux 软件包时不再有用）。
    * `ports-mgmt/portmaster`（不推荐使用，推荐使用 pkg 和二进制包）。
    * `x11-drivers/xf86-video-vmware`（在当前版本的 `xorg-server` 中不再有用）。
  * **已替换的 Port：**
    * `devel/git` 被 `devel/git@lite` 替换，后者足以满足大多数需求。
  * **新增的 Port：**
    * `sysutils/seatd` 和 `x11-wm/sway` 用于 Wayland 支持。

## 关于未来版本和开发战略

随着 FreeBSD 的不断发展，项目的开发战略和未来版本的路线图反映了其致力于拥抱现代计算架构的同时，确保广泛的兼容性和支持。**FreeBSD 15.0** 将是这一旅程的一个重要节点，多个关键决策将塑造操作系统的发展方向：

* **逐步淘汰 32 位平台支持：** FreeBSD 15.0 预计不再支持 32 位平台，除 armv7 外，这标志着战略的转变，重点将转向 64 位计算。armv6、i386 和 powerpc 平台将被废弃，并计划移除，尽管 64 位系统仍将保留运行旧版 32 位二进制文件的能力。
* **armv7 架构状态：** 预计 armv7 架构将在 FreeBSD 15.0 和 stable/15 分支中作为二级架构提供支持。然而，预计 armv7 支持可能会在 FreeBSD 16.0 中被取消，关于 armv7 支持的状态将在 15.0 版本发布时提供更新。
* **继续支持 32 位二进制文件和应用程序：** 尽管有向 64 位平台转型的趋势，FreeBSD 将继续支持在 64 位平台上执行 32 位二进制文件，至少在 stable/15 和 stable/16 分支中以参数 `COMPAT_FREEBSD32` 提供支持。此外，stable/15 分支将继续支持编译单个 32 位应用程序，确保与广泛的软件兼容性。
* **Ports 和软件包基础设施：** 从 FreeBSD 15.0 开始，后续版本将不再支持为已废弃的 32 位平台从 Ports 构建软件包。这一决定反映了行业趋势，即逐步淘汰 32 位架构，并将开发精力集中在更广泛使用的 64 位平台上。
* **32 位支持的生命周期结束（EOL）：** stable/14 分支将继续支持 32 位内核和用户空间，以及 Ports 系统对 32 位系统的支持，直到 FreeBSD 14.0 发布五年后达到生命周期结束（EOL）。这一时间表为依赖 32 位平台的用户和开发者提供了过渡期，便于迁移到支持的架构。
* **社区反馈和未来决策：** FreeBSD 项目重视社区反馈，承诺在形塑废弃平台的支持策略方面做出努力。社区的需求和贡献将对是否在 FreeBSD 15.0 或更高版本中扩展某些平台的支持产生影响。

## 结论

FreeBSD 13.x 系列展示了该项目在持续改进、安全性和现代化方面的承诺。FreeBSD 一直在增强系统的健壮性、安全性和硬件兼容性，跟上并有时超越其他操作系统的技术进步。**FreeBSD 13.4-RELEASE** 是 FreeBSD 不断适应用户需求的坚定体现，巩固了其作为开源操作系统之一的领先地位。

## 参考资料

对于那些有兴趣深入了解 FreeBSD 13.x 系列详细演变的用户，官方的 FreeBSD 文档和发行说明提供了对每个版本的进展和改进的全面见解。

* **官方发行说明：**
  * [FreeBSD 13.4-RELEASE 发行说明](https://www.freebsd.org/releases/13.4R/relnotes/)
  * [FreeBSD 13.3-RELEASE 发行说明](https://www.freebsd.org/releases/13.3R/relnotes/)
* **其他资源：**
  * [FreeBSD 手册](https://docs.freebsd.org/en/books/handbook/)
