> For the complete documentation index, see [llms.txt](https://book.bsdcn.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://book.bsdcn.org/status/2004/7-12.md).

# FreeBSD 2004 年 7-12 月状态报告

* 原文：[FreeBSD Quarterly Status Report 2nd-3rd Quarter 2004](https://www.freebsd.org/status/report-2004-07-2004-12.html)
* 最后作者：FreeBSD 项目

## 引言

FreeBSD 状态报告在短暂的歇息后再次回归。2004 年下半年异常忙碌，FreeBSD 5.3 版本发布，6-CURRENT 开发分支启动，EuroBSDCon 2004 取得巨大成功，这些只是其中的一部分大事件。本期报告包含了令人印象深刻的 44 份提交，是迄今为止提交数量最多的一次！

此外，我很高兴地欢迎 Max Laier 和 Tom Rhodes 加入状态报告团队。他们主动请缨，帮助我们确保报告按时发布，并提升整体质量。尤其是 Max，他推动了报告按主题划分，使浏览更加方便。非常感谢他们的帮助！

## 项目

### 通用地址冗余协议 - CARP

**链接**：<http://people.freebsd.org/~mlaier/CARP/>

**联系方式**：Max Laier <<mlaier@FreeBSD.org>>

CARP 是 VRRP 的替代方案。与 VRRP 不同，它完全支持 IPv6，并使用加密技术来保护通告信息。OpenBSD 开发 CARP 的初衷是担心 VRRP 可能涉及 HSRP 专利，而 CISCO 可能会维护其专利权。从那时起，CARP 在 VRRP 的基础上做了许多改进。

CARP 作为内核中的多播协议实现，并以伪接口的形式呈现给用户。这种设计使配置和管理变得非常简单。此外，CARP 还集成了基于 MAC 地址的负载均衡。

适用于 `RELENG_5` 和最新 `HEAD` 版本的补丁可在上述链接中获取。我计划在未来两到四个月内导入这些补丁。`RELENG_5` 已具备支持 CARP 所需的 ABI，因此我可能会在 FreeBSD 5.4 或 5.5 版本中合并该功能，具体取决于 `HEAD` 版本的导入进展情况。

#### 待办事项

1. 请测试并提供反馈！
2. 编写相关文档。
3. 导入最新的 OpenBSD 变更。

### Dingo 月报

**链接**：[网络协议栈清理项目](http://www.freebsd.org/projects/dingo/index.html)

**联系方式**：George Neville-Neil <<gnn@FreeBSD.org>>

在过去的一个月里，我们建立了上述项目页面，并创建了一个 `p4` 分支，供我们在 `CVS` 之外用 `p4` 做开发工作。

### FreeBSD profile.sh

**链接**：[FreeBSD profile.sh 站点](https://projects.fsck.ch/profile)

**联系方式**：Tobias Roth <<ports@fsck.ch>>

FreeBSD profile.sh 主要面向笔记本电脑。它能让用户定义多个网络环境（例如家庭、工作场所），并可自动检测笔记本电脑启动时所处的环境，并据此相应配置。系统中几乎所有位于 **/etc** 下的配置都可以按环境设定，用户只需定义与默认 **/etc** 配置不同的部分。此外，它还支持在一个环境中挂起（suspend）并在另一个环境中恢复（resume）。

目前正在妥善集成到 ACPI/APM 中，以及一些小的改进。此外，还需要针对不同的系统配置做更多测试。

### FreeBSD 发行工程

**链接**：<http://www.freebsd.org/releng>

**联系方式**：Scott Long <<re@FreeBSD.org>>

经过漫长的等待，FreeBSD 5.3 于 2004 年 11 月正式发布。这标志着 `RELENG_5`/`5-STABLE` 分支的启动，同时 `6-CURRENT` 开发分支也开始了。非常感谢 FreeBSD 开发者和用户社区的不懈努力，使这一版本得以顺利发布。

与此同时，FreeBSD 4.11 的发行工程也在进行。这将是 4.x 系列的最后一个版本，主要包含增量的 bug 修复和少量功能更新。其中值得注意的是，IBM ServeRAID“IPS”驱动现已支持 4.x，并将包含在此版本中。此外，Linux 模拟层已更新，以支持 RedHat 8.0 用户空间。预计该版本将在 2005 年 1 月 24 日发布。

展望未来，5.x 系列将在 2005 年迎来多个新版本。FreeBSD 5.4 版本的发行工程将于 3 月开始，而 5.5 版本的工程预计将在 6 月启动。这些版本将比以往的 5.x 版本更加保守，并遵循以往 `-STABLE` 分支的理念，即在保持 API 稳定性的前提下修复 bug 并做增量改进。

对于 `6-CURRENT` 开发分支以及所有未来的开发和稳定分支，我们计划采用固定时间表，以避免 5.x 版本中出现的进度不确定性和频繁的日程变动。这意味着主要分支将以 18 个月为周期发布，而在这些分支上的版本将以 4 个月为间隔发布。此外，在每个分支的初期，我们会做专门的测试和 bug 修复，然后再发布该分支的首个版本。通过缩短并明确发布周期，我们希望减少因版本延迟导致的新功能无法及时交付给用户的问题，这种情况在 5.x 版本中发生得过于频繁。这一策略变更具有重要意义，我们期待它带来的好处。该计划将从 2005 年 6 月的 `RELENG_6` 分支启动，随后在 2005 年 8 月发布 FreeBSD 6.0。

此外，我们计划合并原本用于 Live-ISO 的 `disk2` 和安装发行版的 `disk1`，将它们整合为一个既可用于安装，也可用于系统恢复的光盘。原本存放在 `disk1` 上的第三方软件包将转移至新的 `disk2`，使其专用于软件包存储。这一调整不仅能更好地应对不断增长的软件包体积，还能为希望添加自定义软件包的厂商提供更大的灵活性。同时，这也为未来用更先进的安装程序替换 `sysinstall` 打开了大门。如果有兴趣参与该项目的开发，请随时与我们联系。

### 无线网络支持

**联系方式**：Sam Leffler <<sam@FreeBSD.org>>

无线网络层已更新，以支持 802.1x、WPA 和 802.11i 安全协议，以及 WME/WMM 多媒体协议。作为此项工作的一部分，为加密方法、认证和访问控制添加了可扩展框架。扩展以可加载内核模块的形式实现，挂钩到 `net80211` 层。这一机制已用于实现 WEP、TKIP 和 CCMP 加密协议。Atheros 驱动（`ath`）目前是唯一使用完整功能集的驱动。为其他驱动添加支持很简单，但正在等待志愿者。`wpa_supplicant` 和 `hostapd` 程序的移植使得使用新的安全协议成为可能。

重构了对在 `bss`（受管或 adhoc）中跟踪站点以及扫描时发现的站点的支持。现在使用多个表，每个表具有不同的管理策略，引用计数现在保持一致，非活动处理更加智能（例如，关联的站点在移除前会被探测）。这是迈向正确的漫游支持和其他高级功能的第一步。

添加了 AP 省电支持。关联的站点现在可以在省电模式下运行；发送给它们的帧将在其休眠时缓冲，而多播流量将延迟到下一个信标之后（根据 802.11 协议）。省电支持在符合标准的接入点中是必需的。目前只有 `ath` 驱动实现了省电支持。

正在积极添加 Atheros 的 SuperG 功能、WDS，以及在单个设备上支持多 `bss`（`ssid` 和/或 `bssid`）。

#### 待办事项

1. `ath` 以外的驱动需要更新以支持新的安全协议。
2. `hostapd` 需要改进以支持 IAPP 和 802.11i 预认证协议（这些是对现有 Linux 代码的简单转换）。

### FreeSBIE 状态报告

**链接**：

[FreeSBIE 官方网站](http://www.freesbie.org/)

[FreeSBIE 邮件列表](http://liste.gufi.org/mailman/listinfo/freesbie)

**联系方式**：FreeSBIE 团队 <<staff@FreeSBIE.org>>

FreeSBIE 是基于 FreeBSD 操作系统的 Live-CD，简单来说，它是一款可以直接从 CD 运行、无需安装到硬盘的 FreeBSD 发行版。

2004 年 12 月 6 日，FreeSBIE 团队发布了 FreeSBIE 1.1，该版本基于 FreeBSD 5.3-RELEASE。其中包含了一些重要的改进，包括：一系列改进的脚本，以便高级用户更方便地使用 FreeSBIE 1.1；一个安装程序，允许用户将 FreeSBIE 1.1 安装到硬盘，从而获得一个类似 FreeBSD 的强大操作系统，同时保留 FreeSBIE 1.1 提供的个性化设置。此外，它还包含精心挑选并定制的开源软件，例如 X.Org 6.7、XFCE 4.2RC1、Firefox 1.0 和 Thunderbird 0.9.2。

完整的软件包列表请参考：<http://www.freesbie.org/doc/1.1/FreeSBIE-1.1-i386.pkg_info.txt>。

在 2004 年德国卡尔斯鲁厄举办的 EuroBSDCon 大会上，FreeSBIE 团队成员发表了演讲，深入探讨了 FreeSBIE 脚本的实现与应用。

#### 待办事项

1. 翻译网站和文档

### FreeBSD 内核开发赞助计划

**链接**：

[详细状态报告](http://lists.freebsd.org/pipermail/freebsd-announce/2004-December/000971.html)

**联系方式**：Poul-Henning Kamp <<phk@FreeBSD.org>>

关于该计划 6 个月的开发进展，已经发布了一份较为详细的状态报告。由于篇幅较长，请访问上方链接查看完整内容。

### 改进的多字节/宽字符支持

**联系方式**：Tim Robbins <<tjr@FreeBSD.org>>

多字节字符支持已扩展到 FreeBSD 基本系统中的多个工具，包括 `basename`、`col`、`colcrt`、`colrm`、`column`、`fmt`、`look`、`nl`、`od`、`rev`、`sed`、`tr` 和 `ul`。此外，由于 C 语言库的改进（详见下文），大多数涉及正则表达式匹配或路径通配的工具现在也支持多字节字符。

C 语言库中的正则表达式匹配和路径通配函数已得到改进，并可识别多字节字符。此外，宽字符 I/O 函数的性能也得到了优化。同时，`6-CURRENT` 分支已移除了过时的 4.4BSD“rune”接口和 UTF2 编码支持。

目前，我们正在开发 POSIX `iconv` 和 `localedef` 接口，计划将其纳入 FreeBSD 6.0 版本中。

### Project Frenzy（基于 FreeBSD 的 Live-CD）

**链接**：

[官方网站](http://frenzy.osdn.org.ua/)

[英文版](http://frenzy.osdn.org.ua/eng/)

**联系方式**：Sergei Mozhaisky <<technix@ukrpost.com.ua>>

Frenzy 是一款基于 FreeBSD 的 Live-CD，定位为“便携式系统管理员工具包”。它主要包含用于硬件测试、文件系统检查、安全审计、网络配置与分析的软件。当前版本为 0.3，基于 FreeBSD 5.2.1-RELEASE，约 200MB 的 ISO 镜像内包含近 400 款应用程序。

下一个版本的计划任务包括：编写硬盘安装脚本、开发统一的系统配置工具、更新软件集合。

### 安全更新

**链接**：

[Portsnap](http://www.daemonology.net/portsnap/)

[FreeBSD Update](http://www.daemonology.net/freebsd-update/)

**联系方式**：Colin Percival <<cperciva@FreeBSD.org>>

在持续提升 FreeBSD 用户系统更新安全性的过程中，我新增了一个工具：`Portsnap`。它已作为 `sysutils/portsnap` 收录于 Ports 中。该工具可以安全地下载并更新压缩格式的 Ports 快照，随后用户可从中提取或更新未压缩的 Ports。借助 RSA 签名，`Portsnap` 在端到端传输中确保了安全性。此外，它完全基于 HTTP 运行，相较于 `cvsup`，频繁更新 Ports（每周一次以上）的用户可节省 90% 以上的带宽。

`FreeBSD Update`——我开发的安全高效的二进制更新工具（用于安全/勘误分支的跟踪）—— 仍广泛使用，目前每天约有 100 台机器下载安全或修正补丁。

未来，我计划将这两个工具集成到 FreeBSD 基本系统中，可能会先从 `Portsnap` 开始。

## 文档

### 硬件说明

**链接**：

[FreeBSD/i386 5.3-RELEASE 硬件支持列表](http://www.freebsd.org/releases/5.3R/hardware-i386.html)

[FreeBSD/i386 6.0-CURRENT 硬件支持列表](http://www.freebsd.org/relnotes/CURRENT/hardware/i386/article.html)

**联系方式**：Simon L. Nielsen <<simon@FreeBSD.org>>

**联系方式**：Christian Brueffer <<brueffer@FreeBSD.org>>

FreeBSD 硬件支持文档现已（大部分）改为直接从驱动程序的手册页自动生成。这大大简化了维护工作，使硬件支持列表更加准确。FreeBSD 5.3 的硬件支持文档已采用这一新系统生成。

### FreeBSD 荷兰语文档团队

**链接**：

[项目网页](http://www.evilcoder.org/content/section/6/39/)

[官方发布的文档](http://www.freebsd.org/doc/nl/books/handbook/)

[文档预览](http://www.evilcoder.org/freebsd_html/)

**联系方式**：Remko Lodder <<Remko@FreeBSD.org>>

FreeBSD 荷兰语文档项目是一项持续进行的项目，旨在将 FreeBSD 文档翻译为荷兰语。目前，我们的主要精力集中在《手册》的翻译上，进展顺利。然而，在完成“完整”翻译之前，仍有大量内容需要翻译和校对。因此，如果你愿意提供帮助，请访问我们的网站或直接联系我。

#### 待办事项

1. 翻译《手册》
2. 校对荷兰语《手册》的语法
3. 翻译其余文档

## 内核

### ATA 驱动状态报告

**联系方式**：Søren Schmidt <<sos@FreeBSD.org>>

ATA 驱动正在经历多项重要变更，主要是将其模块化，使其可以随时加载或卸载，并且用户只需保留所需的功能模块。

这次重构也促使 `ata-raid` 彻底重写了。目前，BIOS 预定义的 RAID 阵列元数据读取功能已基本完成，并且支持了更多新的元数据格式。这也为 `ataraid` 最终能够利用某些新控制器的 RAID 功能铺平了道路。然而，这仍需要进一步开发，但至少现在已经具备了实现的可能性。

此外，还增加了对一些新芯片组的支持（像往常一样）。

目前，重构工作已接近完成，接下来将以补丁的形式发布，以便在正式合并到 `CURRENT` 之前修复可能存在的问题。这些改动涉及整个驱动架构，因此在此过程中，我们不仅完成了预期的功能，还发现并修复了许多长期存在的 Bug。

### Atheros 无线支持

**联系方式**：Sam Leffler <<sam@FreeBSD.org>>

`ath` 驱动已更新，以支持 `net80211` 层新增的所有功能。作为此项工作的一部分，引入了新版本的硬件访问层（HAL）模块；该版本支持 PCI 和 Cardbus 产品中所有可用的 Atheros 部件。此外，adhoc 模式现在应该可用了，天线管理得到了显著改进，软 LED 支持现在可以识别流量模式。

发送速率控制算法已从驱动程序中分离出来，成为一个独立的模块。目前有两种不同的算法可用，未来（希望）会添加更多算法。

正在积极开发中，以添加 Atheros 的 SuperG 功能。

### 新 DHCP 客户端

**联系方式**：Sam Leffler <<sam@FreeBSD.org>>

OpenBSD 的 `dhcp` 客户端程序已移植并增强，可以监听来自内核的 802.11 相关事件。这使得在漫游时能够立即获取 IP 地址（不同于旧代码的轮询方式）。与之前客户端的主要区别在于，现在每个接口有一个 `dhclient` 进程，而不是整个系统一个。这需要更改系统启动脚本。

将其纳入基本系统正在等待一位志愿者，该志愿者将负责引导这些更改进入代码树并处理 bug。

### CPU 缓存预取

**链接**：<http://www.nrg4u.com/freebsd/tcp_reass+prefetch-20041216.patch>

**联系方式**：Andre Oppermann <<andre@FreeBSD.org>>

现代 CPU 只有在其工作代码存储于 **L1-L3** 高速缓存中时，才能发挥最佳性能，而非直接从主存读取数据。如今的 CPU 都支持某些 **L1-L3** 缓存预取指令，它们可以将数据提前从主存加载到缓存中，以确保 CPU 访问数据时已在缓存中，从而提高性能。

然而，**CPU 缓存预取** 并非万能方案，必须在极为特定的情况下谨慎使用，才能真正带来优化效果。不当使用可能导致 **严重的缓存污染**，进而降低整体性能。但如果使用得当，并经过精确控制，它能够显著提升某些常见操作的性能。

在提供的补丁中，**CPU 缓存预取** 主要用于在数据包进入网络栈后，立即将其 **OSI 第 2 至 4 层** 的数据包头加载到 CPU 缓存中。这样可以避免数据包头的首次访问导致 CPU 完全停滞（因为数据包是通过 **DMA** 直接写入主存的，因此不会预先出现在 CPU 缓存中）。补丁中的第二个应用场景是在 **TCP 输入代码** 中，预取 **tcpcb 结构体**（它体积较大，且几乎一定会被访问）。在这两个场景下，测试结果显示 **性能提升显著**，但具体量化数据仍在进一步评估中。

最终的补丁将包含相关文档，并提供一份指南，详细说明如何在 **FreeBSD 内核** 中评估和使用 **CPU 缓存预取指令**。

### i386 中断代码与 PCI 中断路由

**联系方式**：John Baldwin <<jhb@FreeBSD.org>>

ACPI PCI 连接支持代码已重构，以规避先前实现中的一些限制。新版本的实现方式更接近于当前的非 ACPI **$PIR** 连接支持。主要改进包括：在启动过程中禁用未使用的连接设备，以及使用更简单、更可靠的算法为未路由的连接设备选择 **ISA IRQ**。

目前正在 `jhb_clock` Perforce 分支上开发使用 **本地 APIC 计时器** 来驱动内核时钟，而非 **ISA 计时器** 和 **i8254 计时器**。该功能已基本完成，并可能很快合入主干。通过让每个 CPU 使用其私有计时器来驱动内核时钟，内核将不再需要在每次时钟中断发生时向所有其他 CPU 发送 **IPI**（跨处理器中断）。

### kgi4BSD

**链接**：

[主页](http://www.freebsd.org/~nsouch/kgi4BSD)

<http://wiki.daemon.li/moin.cgi/KGI>

**联系方式**：Nicholas Souchu <<nsouch@FreeBSD.org>>

该项目近期较为沉寂（但仍在进行！），主要依靠志愿者测试。新的文档可在 <http://wiki.daemon.li/moin.cgi/KGI> 找到。

#### 待办事项

1. 协助改进文档

### 第二层 PFIL\_HOOKS

**链接**：<http://lists.freebsd.org/pipermail/cvs-all/2004-August/079811.html>

**联系方式**：Andre Oppermann <<andre@FreeBSD.org>>

`IPFW2` 现已转换为使用 `PFIL_HOOKS` 处理 `IPv4/IPv6` 的输入/输出路径（详见链接）。但 `IPFW2` 的第二层 `Etherfilter`（以太网过滤）功能尚未转换，目前仍直接从 `ether_input/output` 和 **桥接代码** 中调用。

**第二层 PFIL\_HOOKS** 提供了一个通用抽象接口，使数据包过滤器可以挂载到 **第二层数据包路径**，以便过滤或修改数据包。这意味着不仅 `IPFW2`，还包括 `PF` 及其他数据包过滤器都可以用于第二层过滤。

### FreeBSD 的低开销性能监控

**链接**：[基于现代 CPU 硬件性能监控功能的 FreeBSD 高级性能监控系统](http://people.freebsd.org/~jkoshy/projects/perf-measurement/)

**联系方式**：Joseph Koshy <<jkoshy@FreeBSD.org>>

目前已支持 **AMD Athlon** 和 **Intel P4** 处理器的 **系统级** 与 **进程虚拟化计数模式** 性能监控计数器。SMP（对称多处理）已基本可用，但仍存在系统冻结的问题。接下来的工作包括：

1. 实现 **系统级** 与 **进程虚拟化采样模式**
2. 调试现有代码
3. 编写测试套件
4. 改进项目文档

### 将 ARP 从路由表中移除

**链接**：<http://lists.freebsd.org/pipermail/freebsd-current/2004-April/026380.html>

**联系方式**：Andre Oppermann <<andre@FreeBSD.org>>

**联系方式**：Qing Li <<qingli@speackeasy.net>>

目前，**ARP**（IP 地址到 MAC 地址的映射）存储在 **路由表（FIB）** 中，但它本不应该存在于此。因此，我们计划将其移至 **独立的基于哈希的结构**，并在每个 **802.1 广播域** 中实例化该结构。

这一变更将使多个网络接口能够共享同一个 **IP 子网** 和 **第二层广播域**，同时大幅简化 **ARP 处理** 和 **路由表管理**。此外，该改动还将引入 **基于 MAC 地址的完整统计** 功能。

目前，Qing Li 已成为该项目的主要负责人和开发者，预计将在 **2005 年 2 月** 发布首个补丁供社区讨论。

### 网络协议栈加锁

**链接**：

[FreeBSD 项目 Netperf 主页](http://www.freebsd.org/projects/netperf/)

[Robert Watson 的 Netperf 个人主页](http://www.watson.org/~robert/freebsd/netperf/)

**联系方式**：Robert Watson <<rwatson@FreeBSD.org>>

**Netperf** 项目致力于提升 **FreeBSD** 网络协议栈的性能。该工作源自 **SMPng** 项目，该项目的目标是将 **FreeBSD** 内核从“**Giant Lock**”模式迁移到更精细的锁机制和多线程模式。**SMPng** 使网络协议栈的并行性和抢占能力得到提升，但同时也显著增加了每个数据包的处理开销。**Netperf** 项目主要专注于 **进一步提高网络处理的并行性**，同时 **减少 SMP 同步的开销**，以提升整体处理吞吐量并降低处理延迟。当前的主要任务包括：完善锁定机制、优化加锁策略、摊销加锁成本、引入新的同步机制、采用无锁同步方案，并通过多线程改进并行处理能力。

#### **2004 年 7 月 - 12 月主要进展**

由于 Netperf 项目在 2004 年 7 月至 12 月期间做了大量工作，本文仅能涵盖部分内容，更多详细信息可通过上述链接获取。主要成果如下：

**2004 年 7 月**

* 改进 **IPv6 PCB（协议控制块）** 加锁
* **if\_xl 驱动** 相关加锁
* **NFS 客户端** 的 **socket** 加锁
* **soreceive()** 代码路径优化，包括结构改进、断言及加锁修复
* **IPX/SPX 代码** 清理，为后续加锁做准备
* **TCP** 额外加锁及加锁断言
* **Raw IP** 相关的加锁和内存分配错误修复
* **Netatalk 清理和加锁**（合并至 FreeBSD CVS）
* **Netgraph 多个节点加锁**（合并至 FreeBSD CVS）
* **SLIP 结构改进**
* **Netatalk ifaddrs 试验性加锁**
* **BPF（Berkeley Packet Filter）加锁优化**（已合并）
* **VFS** 断言，检查 **VFS/网络协议栈** 边界
* **Unix 域套接字** 加锁优化
* **WITNESS** 中增加锁顺序文档
* **NFS 服务器代码** 进一步去除 **Giant Lock**
* **管道（pipe）加锁优化**，提升分配性能
* **fstat** 在 **socket 和 pipe** 上不再需要 **Giant Lock**（已合并）
* **socket 和 pipe 文件描述符关闭** 不再需要 **Giant Lock**（已合并）
* **新增 IFF\_NEEDSGIANT 接口标志**，支持非加锁设备驱动的兼容性操作（已合并）
* **Accept 过滤器加锁合并至 FreeBSD CVS**
* **uidinfo 加锁策略文档**（已合并）
* **fcntl() 对 Giant 的依赖减少**

**2004 年 8 月**

* **UMA KTR（Kernel Trace Recorder）跟踪**（已合并）
* **UDP 广播接收加锁优化**（已合并）
* **TCP 加锁清理及文档完善**
* **IPv6 inpcb（协议控制块）加锁、清理及结构优化**
* **IPv6 inpcb 加锁合并至 FreeBSD CVS**
* **i386 系统调用 KTR 支持**
* **熵收集同步优化**（已合并）
* **callout(9) 采样转换为 KTR**（已合并）
* **inpcb socket 选项加锁**（已合并）
* **netatalk 代码中移除 GIANT\_REQUIRED**（已合并）
* **ADAPTIVE\_GIANT 合并至 FreeBSD CVS**，显著提升内核 **IPC** 性能
* **UDP 头部预留链路层头部空间**，避免每次 **UDP** 发送时额外分配（已合并）
* **多个 UDP 相关错误修复**（已合并）
* **多个网络接口标记为 MPSAFE**
* **Unix 域套接字加锁重构**，以保护 so\_pcb 指针
* **MP\_WATCHDOG 机制**，将额外的 HTT 逻辑 CPU 用作看门狗 CPU（已合并）
* **Unix 域套接字加锁注释合并至 FreeBSD CVS**
* **kqueue 加锁**（由 John-Mark Gurney 开发并合并）
* **netinet6 加锁任务列表创建**
* **消除 kqueue 和套接字缓冲区相关的条件加锁**（已合并）
* **NFS 服务器加锁 bug 修复**（已合并）
* **IPv6 代码 in6\_prefix 由 George Neville-Neil 移除**，降低 netinet6 的工作负载（已合并）
* **移除 netinet6 中未使用的随机 tick 代码**（已合并）
* **ng\_tty、IPX、KAME IPSEC 现在使用 NET\_NEEDS\_GIANT 编译时标记**，允许内核检测不安全组件并在需要时自动获取 Giant 锁（已合并）
* **熵收集代码的额外加锁优化**（已合并）
* **Netperf 开发分支默认禁用 Giant**（已合并）

**2004 年 9 月**

* **修复 Netgraph 使用内核链接器时未持有 Giant 的 bug**（已合并）
* **默认移除网络协议栈的 Giant**（已合并）
* **修复 netinet6 和 if\_afdata 相关的竞争条件**（已合并）
* **BPF 代码中可能竞争条件的注释**
* **BPF 代码改用 queue(3)**（已合并）
* **修复 sopoll() 竞争条件**（已合并）

**2004 年 10 月**

* **IPv6 netisr 标记为 MPSAFE**
* **TCP 计时器加锁、注释、断言**（已合并）
* **IP 套接字选项加锁及清理**（已合并）
* **Netgraph ISR 标记为 MPSAFE**
* **Netatalk ISR 标记为 MPSAFE**（已合并）
* **部分接口列表加锁清理**（已合并）
* **修复熵收集和以太网相关的 use-after-free bug**（已合并）
* **修复 soclose()/sofree() 竞争条件**（已合并）
* **新增 IFF\_LOCKGIANT() 和 IFF\_UNLOCKGIANT()**，在非 MPSAFE 网络接口 ioctl 入口时自动获取 Giant 锁

**2004 年 11 月**

* **UDPv6 静态全局变量清理**（已合并）
* **FreeBSD 5.3 发布**，首次默认使用 **MPSAFE 且无 Giant Lock** 的网络协议栈
* **TCP 额外加锁文档和清理**（已合并）
* **文件描述符引用计数优化，提升高负载下的 send/recv 性能**（已合并）
* **修复 accept bug**（已合并）
* **实验性网络轮询加锁**
* **优化互斥锁和加锁机制**（已合并）
* **UMA 采用临界区保护 per-CPU 缓存，优化微基准测试性能**
* **FreeBSD 项目 Netperf 页面启动**
* **性能微基准测试显示**，5.x 的 IP 转发延迟在 UP 上结合可选的网络栈直接派发时明显优于 4.x
* **多个 NFS 服务器加锁 bug 修复**（已合并）
* **新 mbufqueue 原语开发，优化网络协议栈与设备驱动之间的交互**（与 Sandvine, Inc 合作）
* **Linux TCP\_INFO API 添加**，支持用户态 TCP 状态监控（已合并）
* **SMPng 任务列表更新**
* **UDP 静态/全局修复合并至 RELENG\_5**

**2004 年 12 月**

* **UDP 处理改进（多线程入站处理）**（已合并）
* **TCP 紧急数据处理相关的 socket 缓冲区加锁修复**（已合并）
* **IF\_DEQUEUE() 和 IF\_DRAIN() 读优化**
* **socket/pipe 等的无 Giant 关闭合并至 FreeBSD CVS**
* **优化 netisr 处理 mbuf 队列的批量出队**
* **netrate 测试工具合并至 RELENG\_5**
* **TCP 加锁修复合并至 RELENG\_5**
* **DDB 增加 `show alllocks` 命令**（已合并）
* **IPX 加锁 bug 修复**（已合并）
* **IPX/SPX \_\_packed 修复**（已合并）
* **IPX/SPX 移至 queue(9)**（已合并）
* **TCP 加锁修复和注释合并至 FreeBSD CVS**
* **IPX/SPX 全局变量和 pcb 加锁**（已合并）
* **IPX/SPX 标记为 MPSAFE**（已合并）
* **IP 套接字选项加锁合并至 FreeBSD**
* **SPPP 代码加锁（由 Roman Kurakin 完成）**（已合并）
* **Unix 域套接字加锁修复（由 Alan Cox 完成）**（已合并）

该项目仍在持续推进，包括 **netinet6** 进一步加锁、**mbuf 队列** 设施和操作、基准测试、为 **UMA per-CPU 缓存** 转向临界区或 per-CPU 互斥锁、为 **malloc(9)** 统计转向临界区或 per-CPU 互斥锁、消除单独的 mbuf 分配器统计、额外的接口加锁、大量清理和加锁文档，以及广泛的优化。

### 新的模块化输入设备层

**链接**：<http://lists.freebsd.org/pipermail/cvs-src/2004-November/035462.html>

**联系方式**：Philip Paeps <<philip@FreeBSD.org>>

在多个邮件列表上做了一系列讨论后，FreeBSD 正在开发新的模块化输入设备层。其目标主要有两个：

* 使新的输入设备驱动程序的开发更加容易。
* 支持多个输入设备的并发使用，尤其是热插拔设备。

目前，实现对新输入设备的支持是一个相当痛苦的过程，并且存在大量代码重复的可能性。新的输入设备层将提供一个简单的 API，使开发人员可以以一致的方式将硬件事件发送到内核的上层，就像 Linux 内核中的 `input-core` 驱动一样。

同时，当前使用多个输入设备的体验也非常不理想。有了新的输入设备层，不同设备的事件将在传递到内核的其他部分之前得到适当的序列化。这将使用户可以更轻松地在虚拟终端中同时使用多个 USB 键盘等设备。

目前该工作仍处于非常早期的阶段。预计首批可见的改动将在 2 月底或 3 月初提交到 `-CURRENT` 分支。

### SMPng 状态报告

**联系方式**：John Baldwin <<jhb@FreeBSD.org>>

**联系方式**：<<smp@FreeBSD.org>>

FreeBSD 网络栈内部发生了大量变更，具体情况可能会在另一份报告中介绍。除此之外，内核其他部分也做了一些改动，包括 `proc` 结构的锁定调整、内核线程调度器变为可抢占式、修复调度器中的多个优先级反转问题，以及对 `mutex` 实现做一些性能优化。

在 `proc` 结构及其子结构的锁定工作方面，添加了 `struct uprof`、`struct rusage` 和 `struct pstats` 的必要锁定。此外，还重新设计了内核存储进程时间统计信息的方式，改为存储原始的 `struct bintime` 和 `tick` 计数，仅在 `getrusage()` 或 `wait4()` 请求时计算更友好的用户可读值。

内核线程调度器现已支持线程抢占。当一个线程使另一个线程变为可运行状态时，如果新线程的优先级更高，则当前线程可能会让出 CPU 以执行该线程。之前，只有中断线程可以抢占其他线程，并且原有实现偶尔会触发错误的上下文切换。此更改已暴露出内核其他部分的 Bug，因此在 `RELENG_5` 分支中默认关闭。目前，只有 `i386`、`amd64` 和 `alpha` 平台支持原生抢占式调度。

此外，还修复了一些由于 SMPng 项目修改内核而导致的调度器中的优先级反转 Bug。其中大部分修复工作由新提交者 Stephan Uphoff 完成，包括：修复 `turnstile` 唤醒代码中的竞争条件、修改 `sleep queue` 代码以按 FIFO 顺序存储线程，使 `sleep queue` 唤醒代码能够正确处理线程优先级变更，并抽象出优先级借用机制，使调度器能够正确跟踪优先级继承，并处理 `turnstile` 阻塞线程的优先级变更。

正在进行的工作包括将临界区与自旋锁进一步分离，以降低临界区的开销，同时继续调整各种 ABI 兼容层，使其使用内核版本的系统调用，从而减少 `stackgap` 使用并使系统调用封装 MPSAFE。

### 同步协议（SPPP 和 NETGRAPH）

**链接**：[我的 FreeBSD 主页，其中包含部分工作成果，但更新较少。](http://www.freebsd.org/~rik)

**联系方式**：Roman Kurakin <<rik@FreeBSD.org>>

`SPPP`（同步点对点协议）在 `6.current` 版本中已更新，可在 MPSAFE 模式下运行。为了兼容性，如果某个接口无法在 MPSAFE 模式下工作，`SPPP` 仍然会使用非 MPSAFE 锁。

此外，还添加了对 FrameRelay AnnexD 的支持，作为一项历史性的提交。许多 Cronyx 用户期待这一改动已久，并且大多数用户仍然更喜欢使用 `SPPP` 而不是 `netgraph`，因为其配置更加简单（特别是对于 `PPP`（相较于 `mpd`）和 `FR`（相较于多个 `netgraph` 模块））。此改动合并到 `MFC` 后，我将最终关闭 2000 年 10 月 5 日提交的 PR 21771。

### TCP 清理与优化

**链接**：<http://people.freebsd.org/~andre/tcpcleanup.html>

**联系方式**：Andre Oppermann <<andre@FreeBSD.org>>

自 1994 年从 4.4BSD-Lite2 分支以来，FreeBSD 的 TCP 代码经历了大规模演进，主要是由于新的特性和 TCP 规范的不断完善。

现在，TCP 代码需要全面重构和清理，以提升其可读性、可维护性和可扩展性。此外，在重构过程中，还可以做许多小优化，使 FreeBSD 重新成为性能最优的 TCP/IP 协议栈之一，就像 90 年代长期占据领先地位时那样。

此次重构工作极其复杂且精细，需要经过广泛的形式化测试和实际测试，以确保不会引入比当前代码更严重的回归问题。预计该工作需要大约两个月的全职专注开发时间。为了完成这项任务，我需要资金支持，以便暂时离开日常工作，全力投入到 FreeBSD 的开发中，就像 PHK 之前在缓存和 vnode 重构项目中的做法一样。

在 2005 年 2 月，我将正式发布资金筹集请求，提供详细的工作说明以及资金使用方式。总体而言，我可以为愿意赞助此项目的公司开具发票，以报销相关费用。此外，通过 FreeBSD 基金会，可能可以安排免税捐赠。目前已欢迎资金赞助，请通过上述邮箱联系我。

#### 未完成任务

1. 需要筹集相当于两个月全职工作的资金。
2. 如果你计划赞助 1000 美元及更高，请提前与我联系。

### TCP 重组机制重写与优化

**链接**：

<http://www.nrg4u.com/freebsd/tcp_reass-20041213.patch>

<http://lists.freebsd.org/pipermail/freebsd-net/2004-December/005918.html>

**联系方式**：Andre Oppermann <<andre@FreeBSD.org>>

目前，TCP 片段重组是通过一个链表来实现的。然而，在当今的高带宽网络环境下，尤其是具有较大带宽\*延迟积的场景中，这种方式的可扩展性和性能表现均不佳。

此次重写将优化 TCP 片段重组过程的多个方面。例如，新到达的片段很可能需要连接到重组队列的末尾，因此我们首先检查该情况。其次，我们检查它是否是缺失的片段，或者是否应连接到重组队列的起始位置。第三，连续的片段会合并（逻辑上的），并在线性搜索时一次性跳过，而不是逐个遍历所有片段。

进一步的优化方案包括在 `mbuf` 层面合并连续的片段，而不仅仅是逻辑合并。这预计会带来显著的性能提升。新的重组队列还会追踪队列中的所有“空洞”（缺失片段），未来可能会与 SACK 的缓存区集成，以提高性能。

Andrew Gallatin 在 Myrinet 双 2Gbps 网卡上测试，即便在固件 Bug 导致的严重数据包乱序情况下，新的 TCP 重组代码仍然能够实现 3.7Gbps 的 TCP 传输性能。详细信息请参考第二个链接。

### TTCPv2: 事务型 TCP 版本 2

**链接**：

<http://lists.freebsd.org/pipermail/cvs-all/2004-November/089939.html>

**联系方式**：Andre Oppermann <<andre@FreeBSD.org>>

根据 RFC1644 标准，旧版 TTCP 存在安全性差、侵入性强、复杂等问题，并且已从 FreeBSD 5.3 版本及之后的版本中移除。尽管如此，其背后的理念和语义仍然有效且合理。

重写后的版本采用了更简单且更安全的系统，使用 24 位长的客户端和服务器 cookie，并通过 TCP 选项传输。客户端 cookie 防止各种盲目注入攻击，并可用于提高 TCP 会话的整体安全性（例如用于 BGP）。服务器 cookie 仅在 SYN-SYN/ACK 阶段交换，允许服务器确保它曾与特定客户端通信过。第一次连接总是执行三次握手（3WHS）并分配一个服务器 cookie 给客户端。后续连接则可以将 cookie 返回给服务器，从而跳过三次握手，直接进入 SYN->OPEN 阶段。

TTCPv2 可以通过 `setsockopt()` 系统调用按每个套接字完全配置。不支持 TTCPv2 的客户端和服务器仍然可以正常工作，继续使用常规的三次握手，而不会造成延迟或其他复杂问题。

TTCPv2 的实现工作已完成 90%，预计在 2005 年 2 月初可用。实现规范（RFC 草案）的编写工作刚刚开始。

## 架构

### FreeBSD 在 Xen 上的运行

**链接**：

[二进制文件 + 源代码 + 稍有过时的 HOWTO](http://www.fsmware.com/xenofreebsd/)

[Xen 项目主页](http://www.cl.cam.ac.uk/Research/SRG/netos/xen/)

**联系方式**：Kip Macy <<kmacy@fsmware.com>>

FreeBSD 5.2.1 在 Xen 稳定分支中作为来宾操作时已稳定运行。FreeBSD 5.3 在 Xen 稳定分支中也能运行，但有几个 bug 需要追查。

#### 待办事项

1. 支持在 Domain 0（主机）上运行 FreeBSD。
2. 支持 FreeBSD 的虚拟机检查点和迁移功能。

### FreeBSD/arm 状态报告

**链接**：[FreeBSD/arm 项目主页](http://www.freebsd.org/platforms/arm)

**联系方式**：Olivier Houchard <<cognet@FreeBSD.org>>

FreeBSD/arm 取得了巨大进展。目前，它可以启动多用户模式，并能够在 IQ31244 开发板上运行如 `make world` 和 Perl 等程序。现在它还支持多种功能，包括 `DDB`、`KTR`、`ptrace` 和内核模块。一个早期的 `gdb` 支持补丁已发布，`libpthread` 也几乎可以正常工作。

### PowerPC 平台

**链接**：

[Miniinst ISO 文件](http://www.freebsd.org/~grehan/miniinst.iso)

[Miniinst 发布说明](http://www.freebsd.org/~grehan/miniinst.txt)

**联系方式**：Peter Grehan <<grehan@FreeBSD.org>>

一个本地构建的 6.0-CURRENT miniinst ISO 文件已可以通过上述链接下载。它在 G4 Powermac 上表现最好，但也可能在其他 Newworld 机器上运行。具体细节请参见发布说明。

和往常一样，仍然需要大量帮助。这非常适合那些希望深入了解 FreeBSD 内核的开发者。

## Ports

### FreeBSD GNOME 项目状态报告

**链接**：[FreeBSD GNOME 项目](http://www.freebsd.org/gnome/)

**联系方式**：Joe Marcus <<marcus@FreeBSD.org>>

我们已经有一段时间没有发布状态报告了，但这只是因为我们一直很忙。自从 2004 年 3 月的最后一次报告以来，我们增加了三位新成员：Koop Mast（kwm）、Jeremy Messenger（mezz）和 Michael Johnson（ahze）。Jeremy 在 GNOME 开发移植方面非常有帮助，而 Michael 和 Koop 则专注于改进 GNOME 多媒体，特别是 GStreamer。GNOME 的稳定版现已更新到 2.8.2，我们正在积极开发 GNOME 2.9 分支，预计将在今年 3 月 9 日发布 2.10 版本。

[GNOME Tinderbox](http://www.freebsd.org/gnome/docs/faq2.html#q21) 仍在运行，并为所有支持的 i386 版本的 FreeBSD 生成稳定版和开发版的 GNOME 软件包。

感谢 Michael Johnson，FreeBSD GNOME 团队最近获得了 [使用 Firefox 和 Thunderbird 名称](http://people.freebsd.org/~ahze/firefox_thunderbird-approved.txt)、官方图标的许可，并可以生成官方品牌的构建版本。Mozilla 也非常希望将我们本地的补丁合并回官方代码树。这将大大提高 Firefox 和 Thunderbird 在 FreeBSD 上的质量。

最后，Adam Weinberger（adamw）一直在催促团队提供照片，这样我们就可以向社区展示我们的面貌。目前尚不清楚这是否会吸引更多的 FreeBSD GNOME 用户，或者让我们上 Homeland Security 的禁飞名单。

#### 未完成任务

1. 需要帮助将 [HAL](http://www.freedesktop.org/wiki/Software_2fhal) 移植到 FreeBSD（联系 <marcus@FreeBSD.org>）
2. 需要帮助将 [libburn](http://www.freedesktop.org/wiki/Software_2fburn) 移植到 FreeBSD（联系 <bland@FreeBSD.org>）
3. 有兴趣重启 [Gnome Meeting](http://www.gnomemeeting.org/) 的人可以联系 <kwm@FreeBSD.org>

### OpenOffice.org 移植状态

**链接**：

[FreeBSD OpenOffice.org 移植状态页面](http://porting.openoffice.org/freebsd/)

[FreeBSD 的稳定 OpenOffice.org 包](http://ooomisc.services.openoffice.org/pub/OpenOffice.org/ooomisc/FreeBSD/)

[一些不稳定的 WIP 包状态](http://sourceforge.jp/projects/waooo/files/)

**联系方式**：Maho Nakata <<maho@FreeBSD.org>>

OpenOffice.org 2.0 状态

* OpenOffice.org 2.0 计划于 2005 年 3 月发布。目前已有开发者快照版本可用。现已将其中一个开发版本移植，并提交到 Ports（**/usr/ports/editors/openoffice-2.0-devel**）。
* 5.3-RELEASE 的软件包已可在 <http://sourceforge.jp/projects/waooo/files/asOOo_1.9m71_FreeBSD53Intel_install_en-US.tbz> 等网站上获取，很快也将可以在 <http://ooomisc.services.openoffice.org/pub/OpenOffice.org/ooomisc/FreeBSD/> 获得语言软件包。
* 所有构建所需的补丁几乎都将合并到主代码库中。<http://www.openoffice.org/issues/show_bug.cgi?id=40187>
* 目前我们有三个外部 Port：**lang/gcc-ooo**、**devel/bison-devel** 和 **devel/epm**。为了避免 `gcc` 的回归和错误，我们使用与 Hamburg 团队（前 StarDivision）相同的 `gcc` 版本。我们需要使用 1.785a 版本以上的 `bison`。请注意，该 Port 与 **devel/bison** 存在冲突。`Epm` 是 OpenOffice.org 现在使用的软件包管理器。

OpenOffice.org 1.1 状态

* 1.1.4 版本已移植并提交到 Ports。
* 软件包可以在 <http://ooomisc.services.openoffice.org/pub/OpenOffice.org/ooomisc/FreeBSD/> 获取。
* 现在可以识别 Linux 版本的 Java JDK。

一般情况

* 从命令行调用 OpenOffice.org 的方式有所改变。现在必须使用 `.org` 后缀。例如，`openoffice-1.1.4` -> `openoffice.org-1.1.4`。由于软件名称是 OpenOffice.org 而不是 OpenOffice，我们也在考虑更改 Port 的名称（**/usr/ports/editors/openoffice-2.0-devel** -> `openoffice.org2-devel` 等）。
* 目前标记为 `BROKEN` 的 OOo Port 适用于早于 5.3-RELEASE 和 4.11-RELEASE 的版本。这些 Port 一直受到 FreeBSD 和 Linux、Solaris、NetBSD 之间 `rtld.c` 的小实现差异的影响。我们一直在应用一个补丁来添加 `_end` 到 mapfile。我们需要这个补丁，因为 `rtld` 在 `obj_from_addr_end` 中依赖于 `_end` 符号的存在。不幸的是，这似乎引发了难以解决的错误。kan 取得了重大进展，`rtld` 现在不再依赖 `_end`。该修复已于 2004 年 2 月 25 日提交，<http://www.freebsd.org/cgi/cvsweb.cgi/src/libexec/rtld-elf/rtld.c.diff?r1=1.91&r2=1.92&f=h> 。
* 性能测试！构建 OOo 需要大量资源。我们只是想了解构建所需的时间，以便评估机器在高负载工作下的调优程度。<http://porting.openoffice.org/freebsd/benchmark.html>。目前，GOTO daichi（daichi）的 Pentium 4 3.0GHz 机器构建速度最快。第二次构建 OOo 1.1.4 仅需 1 小时 25 分 22.42 秒，使用了 `ccache`。
* SDK 教程可在 <http://porting.openoffice.org/freebsd/sdk.html> 获得。
* 仍然没有做实现测试和质量保证，也没有为 FreeBSD 提供系统化的文档。<http://porting.openoffice.org/freebsd/testing.html> 和 <http://porting.openoffice.org/freebsd/QA.html> 有详细信息。

致谢：两位对许多方面做出贡献的人，Pavel Janik（审阅并提供了很多建议）和 Kris Kennaway（极其耐心的构建者），以及（按字母顺序排列）daichi、Eric Bachard、kan、lofi、Martin Hollmichel、nork、obrien、Sander Vesik、sem、Stefan Taxhet 和 OpenOffice.org 开发者的志愿者（特别感谢 SUN Microsystems, Inc.）的合作与热情鼓励。

### Ports

**链接**：

[FreeBSD Ports](http://www.freebsd.org/ports/)

[FreeBSD Ports 监控系统](http://portsmon.firepipe.net/index.html)

**联系方式**：Mark Linimon <<linimon_at_FreeBSD_dot_org>>

**联系方式**：Erwin Lansing <<erwin@FreeBSD.org>>

自上次关于 Ports 的报告以来，发生了许多变化。在组织结构方面，portmgr 团队失去了一些长期成员，迎来了新成员，包括 Oliver Eikemeier、Kirill Ponomarew 和 Mark Linimon。后来，portmgr 还不得不告别 Will Andrews。此外，在此期间，我们还增加了不少新的 Ports 提交者，他们的贡献得到了热烈欢迎！

大部分精力投入到了两个版本的发布中。5.3 版本经历了特别长的冻结期，但由于 Ports 状况良好，4.11 的冻结期保持在最低限度。新基础设施的几次迭代已在集群中测试并提交。现在，集群也为 `6-CURRENT` 版本构建软件包，从而将不同构建环境的数量增加到 10。

此外，我们还对 Ports 做了几次清理，以统一不同 Port 中使用的变量及其值，例如 `BROKEN`、`IGNORE`、`DEPRECATED`、`USE_GCC` 等。

从技术角度来看，最大的变化是将 `X.org` 代码库作为默认的 X11 实现。同时，还提交了可以选择使用 `X.org`/`XFree86` 代码的功能，后者也在此期间更新了。由于 Eric Anholt、Dejan Lesjak（新提交者）和 Joe Marcus Clarke 的辛勤工作，这一切进展比预期的要顺利得多。

此外，GNOME 和 KDE、Perl 以及 Java 框架在此期间也得到了更新。《Porter 手册》也做了一些更新，但更多部分仍需要更新以包括近期的实践变更。在此期间，Bill Fenner 还修复了他在 [distfile 调查](http://people.freebsd.org/~fenner/portsurvey) 中的一个错误。

在 4.11 版本发布前，我们现有的 `linux_base` 因安全问题标记为禁止使用。大量工作投入到将默认版本从 7 升级到 8，以便在 4.11 版本发布时提供一个可用的 `linuxolator`。

由于 4 月至 5 月期间的稳定性问题，Alpha 架构的软件包构建暂停。在 Ken Smith 等人对 Alpha 做了一些工作后，`4.X` 版本的软件包构建于 2004 年底重新启用。

Ports 质量保证提醒 —— `portmgr` 团队现在定期发送关于 Ports 问题的电子邮件。当前提醒包括：

* 公开列出所有因安全问题、构建失败或一般过时而将移除的 Port，除非它们先修复
* 向受影响 Port 的所有维护者发送私人邮件（包括依赖上述 Port 的 Port）
* 向所有标记为 `BROKEN` 或 `FORBIDDEN` 的 Port 维护者发送私人邮件
* 向非提交者的维护者发送私人邮件，提醒他们有针对其 Port 的 PR（以标记可能从未抄送给他们的 PR）
* 关于导致 `INDEX` 构建失败的 Port 提交的公开邮件
* 关于导致版本修订元数据倒退的 Port 提交的公开邮件（从而干扰 `portupgrade` 等工具）

每个提醒背后的想法是增加 Port 问题的可见性，从而加速问题的修复。最后，值得注意的是，我们达到了又一个里程碑，Ports 现在包含 12,000 余个 Port。

#### 待处理任务

1. 我们的大多数构建错误仍然源于编译问题，主要是由于 `gcc` 升级引起的。感谢许多志愿者的努力，这些错误正在减少，但仍有很多工作要做。
2. 下一个最多的构建错误是由于代码无法在我们的 64 位架构上构建，原因是假设“全世界都是 PC”。[这是完整的列表](http://portsmon.firepipe.net/ploticus/uniqueerrorcounts.html)；每个单独的条形图是可点击的。随着 `amd64` 平台提升为一级支持状态，这个问题将变得越来越重要。
3. 我们在整治安装文件超出批准目录或卸载不干净的 Port 方面取得了很多进展（请参见 [pointyhat](http://pointyhat.freebsd.org/errorlogs/) 上的“`PLIST` 中未列出的额外文件”），这将继续是我们的重点领域。

### Linux 用户空间基础设施更新

**联系方式**：Alexander Leidinger <<netchild@FreeBSD.org>>

由于 **emulators/linux\_base** 存在安全问题，默认的 Port `linux_base` 从基于 RedHat 7 的 **emulators/linux\_base** 更改为基于 RedHat 8 的 **emulators/linux\_base-8**，恰好在 FreeBSD 4.11 版本发布时完成。在转换过程中，修复了几个 Linux Port 中的问题。

RedHat 7 和 8 都已进入生命周期末期，因此预计将来会更新为更近期的 Linux 发行版。出于 QA 原因，此更新未安排在 FreeBSD 4.11 发布前完成。

## 厂商/第三方软件

### ALTQ

**链接**：

<http://people.freebsd.org/~mlaier/ALTQ_driver/>

[ALTQ(4) 手册页](http://www.freebsd.org/cgi/man.cgi?query=altq\&manpath=FreeBSD+6.0-current\&format=html)

**联系方式**：Max Laier <<mlaier@FreeBSD.org>>

`ALTQ` 是 FreeBSD 5.3 版本的一部分，可以与 `PF` 一起用于流量整形和分类。在 `CURRENT` 版本中，`IPFW` 也获得了做 `ALTQ` 分类的功能。越来越多的网卡驱动程序已转换为支持 `ALTQ`。详情请参见 **ALTQ(4)** 手册页。

#### 待处理任务

1. 转换/测试更多的网卡驱动程序。
2. 编写文档。

### Cronyx 适配器驱动程序

**链接**：[Cronyx 软件下载页面](http://www.cronyx.ru/software)

**联系方式**：Roman Kurakin <<rik@FreeBSD.org>>

目前 FreeBSD 支持三种类型的 Cronyx 同步适配器：Tau-PCI - **cp(4)**，Tau-ISA - **ctau(4)** 和 Sigma - **cx(4)**。所有这些驱动程序在 `6-CURRENT` 版本中均已更新，现在它们不再依赖 `Giant`。然而，这只对 **sppp(4)** 有效。如果你使用 `Netgraph` 或异步模式（对于 Sigma），可能需要通过适当的内核变量关闭该驱动程序的 `mpsafenet`。

#### 待处理任务

1. 目前所有这些驱动程序和 **sppp(4)** 都使用递归锁。因此，第一个任务是使这些锁变为非递归锁。
2. 第二个任务是检查/使驱动程序在 `netgraph`/异步模式下可用。
3. 我正在考虑在运行时切换 `sppp`/`netgraph` 模式的功能。目前，你需要重新编译模块/内核才能更改模式。

### OpenBSD 数据包过滤器 - pf

**链接**：[PF4FreeBSD 主页](http://pf4freebsd.love2party.net/)

**联系方式**：Max Laier <<mlaier@FreeBSD.org>>

**联系方式**：Daniel Hartmeier <<dhartmei@FreeBSD.org>>

FreeBSD 5.3 是第一个包含 `PF` 的版本。该版本发布时没有问题，但一些错误发现得太晚，未能及时收录到 CD 中。建议更新 **src/sys/contrib/pf** 到 `RELENG_5`。具体修复的内容如下：

* 可能的 `NULL` 解引用（user/group 规则）。
* 在动态接口上使用 `binat` 时崩溃。
* 含选项头的 `IPv6` 数据包静默丢弃。
* 使用 `static-port` 规则时发生死循环。

这些问题大多数是由 FreeBSD 用户发现的，并反馈给了 OpenBSD。这是开源协作的典范。

《手册》中的防火墙部分作了修改，提到 `PF` 作为 `IPFW` 和 `IPF` 的替代方案。

#### 待处理任务

1. 编写更多文档/文章。
2. 编写一个 `IPFilter` 到 `PF` 的迁移指南/工具。

## 杂项

### EuroBSDCon 2004 提交的论文已在线发布

**链接**：[论文/演讲下载页面](http://www.eurobsdcon2004.de/papers.html)

**联系方式**：Patrick M. Hausen <<hausen@punkt.de>>

所有的论文和演讲资料现已上传到我们的会议网站，可以下载。再次感谢所有助力 EuroBSDCon 2004 成功举办的人。

### ifconfig 重构

**联系方式**：Sam Leffler <<sam@FreeBSD.org>>

用于配置网络接口的 `ifconfig` 程序经过了重构。多年来，`ifconfig` 已发展为一个复杂且经常扭曲的软件，难以理解和维护。此项工作的主要动机是实现最小化配置（用于嵌入式用途），而无需更改代码，并以模块化方式支持未来的扩展。功能现在拆分到独立的文件中，操作通过中央 `ifconfig` 代码库注册。只需指定构建程序时要包含的代码，即可配置功能。

未来的计划是通过动态库让 `ifconfig` 自动加载功能。这一机制将允许，例如，第三方软件包提供内核服务和 `ifconfig` 附加代码，而无需更改基本系统。

### EuroBSDCon 2005 —— 巴塞尔/瑞士

**链接**：[EuroBSDCon 官方主页](http://www.eurobsdcon.org/)

**联系方式**：Max Laier <<mlaier@FreeBSD.org>>

今年的 EuroBSDCon 将于 11 月 25 日至 27 日在瑞士巴塞尔大学举行。征集论文的通知将很快发布。请考虑参加或甚至演讲。更多信息请访问会议主页。

### FreeBSD 安全官员与安全团队

**链接**：

[FreeBSD 安全信息](http://www.freebsd.org/security/)

[FreeBSD 安全官员章程](http://www.freebsd.org/security/charter.html)

[FreeBSD 安全团队成员](http://www.freebsd.org/administration.html#t-secteam)

[FreeBSD VuXML 网站](http://vuxml.freebsd.org/)

[portaudit](http://cvsweb.freebsd.org/ports/security/portaudit/)

**联系方式**：Jacques Vidrine <<nectar@FreeBSD.org>>

**联系方式**：安全官员 <<security-officer@FreeBSD.org>>

**联系方式**：安全团队 <<security-team@FreeBSD.org>>

在 2004 年，FreeBSD 安全官员角色和安全团队经历了几项重大的变化和事件。

2002 年由核心团队批准的安全官员（SO）章程终于在网站上发布了。该文档介绍了安全官员的使命、职责和权力。（当前的安全官员是 Jacques Vidrine）

安全官员由副安全官员和安全团队支持。4 月份，Chris Faulhaber 辞去了副安全官员职务，Dag-Erling Smorgrav 出任新的副安全官员。在这一年中，以下团队成员辞职：Julian Elischer、Bill Fumerola、Daniel Harris、Trevor Johnson、Kris Kennaway、Mark Murray、Wes Peters、Bruce Simpson 和 Bill Swingle；而以下成员成为新成员：Josef El-Rayes、Simon L. Nielsen、Colin Percival 和 Tom Rhodes。向所有过去和现在的成员表示衷心的感谢！当前的安全团队成员名单已在网站上发布。

随着 FreeBSD 4.8 的发布，安全官员开始为一些 FreeBSD 版本及其相应的安全分支提供扩展支持。“早期采用者”分支，如 FreeBSD 5.0（`RELENG_5_0`），至少支持六个月。“正常”分支至少支持一年。“扩展”分支，如 FreeBSD 5.3（`RELENG_5_3`），至少支持两年。当前支持的分支及其估计的“生命周期结束”（EoL）日期已发布在 FreeBSD 安全信息网页上。在 2004 年，四个版本“过期”：4.7、4.9、5.1 和 5.2。

随着 FreeBSD 4.10 和 5.3 的发布，安全官员和发布工程团队扩展了安全分支的范围，纳入了与安全问题无关的关键 bug 修复。目前，这些修复发布为单独的勘误通知。未来，安全通知和勘误通知将合并并统一处理。

2004 年发布了 17 条安全通知，涉及了 8 个 FreeBSD 特有的问题和 9 个通用问题。

2004 年还引入了漏洞和暴露标记语言（VuXML）。VuXML 是一种用于记录单个软件包集合中安全问题的标记语言。安全团队和其他提交者已在 FreeBSD 项目的 VuXML 文档中记录了 Ports 中的超过 325 个安全问题。该文档目前维护在 Ports 仓库中，路径为 `ports/security/vuxml/vuln.xml`。文档的内容以可读形式提供，用户可以在 FreeBSD VuXML 网站上查看。`portaudit` 工具可用于审计本地系统是否存在列出的安全问题。从 11 月开始，流行的 FreshPorts.org 网站也开始跟踪 VuXML 中记录的问题。

### FreeBSD 源代码仓库镜像用于 svn/svk

**链接**：

[仓库浏览器](http://svn.clkao.org/svnweb/freebsd/)

[RELENG\_5 提交的 RSS](http://svn.clkao.org/svnweb/freebsd/rss/fromcvs/branches/RELENG_5/)

[CURRENT 提交的 RSS](http://svn.clkao.org/svnweb/freebsd/rss/fromcvs/trunk/)

[svk 官方主页](http://svk.elixus.org/)

**联系方式**：Kao Chia-liang <<clkao@FreeBSD.org>>

FreeBSD 仓库的公开 Subversion 镜像地址是 <svn://svn.clkao.org/freebsd/>。此镜像供希望尝试 `svk` 分布式版本控制系统的用户使用。

你可以用 `svk` 镜像整个仓库，并在离线时提交。它还提供历史感知的分支、合并和补丁功能。非提交者可以轻松地维护自己的分支，并在补丁审查期间跟踪上游的变更。

### 包含新软件的 Wiki

**链接**：[Wiki](http://wiki.freebsd.org/)

**联系方式**：Josef El-Rayes <<josef@FreeBSD.org>>

由于旧的 Wiki 引擎在缺乏身份验证机制的情况下遭受了垃圾邮件攻击，我不得不将其更换为更先进的软件。我们现在使用的是 `moinmoin`，而非 `usemod`。因此，它不再仅仅是“浏览和编辑”，而是需要注册，并且必须由已在 `ACL` 组“developers”中的某人将你添加到该组。所以它现在是一个“仅限开发者”资源。旧的 Wiki 可以在 [http://wiki2.daemon.li](http://wiki2.daemon.li/) 找到。

#### 待办事项

1. 将旧 Wiki 的内容迁移到新 Wiki。


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://book.bsdcn.org/status/2004/7-12.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
