# FreeBSD 2009 年 1-3 月状态报告

* 原文链接：<https://www.freebsd.org/status/report-2009-01-2009-03.html>

## 引言

自上次状态报告以来，FreeBSD 开发取得了有趣的进展。FreeBSD 7.2 版本几天前刚刚发布。以下是一些亮点：支持在 FreeBSD 虚拟内存子系统中使用超页。FreeBSD 内核虚拟地址空间已增加至 6GB（amd64）。更新了支持多 IPv4/IPv6/noIP 的 jail(8) 子系统，等等。许多 FreeBSD 开发者正在加拿大渥太华参加 FreeBSD 开发者峰会，该峰会将在 BSDCan 之前举行。BSDCan 将于明天正式开始，涵盖许多有趣的话题，更多信息请见 [BSDCan 网站](http://www.bsdcan.org/2009/)。

感谢所有记录者的卓越工作！愿你们阅读快乐。

## [项目](https://www.freebsd.org/status/report-2009-01-2009-03.html#Projects)

### [Clang 替代 GCC 作为基本系统编译器](https://www.freebsd.org/status/report-2009-01-2009-03.html#Clang-replacing-GCC-in-the-base-system)

| 链接                                                                      |
| ----------------------------------------------------------------------- |
| [使用 Clang 构建 FreeBSD](http://wiki.freebsd.org/BuildingFreeBSDWithClang) |
| [Clang 补丁集](http://git.hoeg.nl/?p=llvm-bmake)                           |
| [Clang 网站](http://clang.llvm.org/)                                      |

联系人：Ed Schouten <<ed@FreeBSD.org>>\
联系人：Roman Divacky <<rdivacky@FreeBSD.org>>\
联系人：Brooks Davis <<brooks@FreeBSD.org>>\
联系人：Pawel Worach <<pawel.worach@gmail.com>>

在过去的 3-4 个月里，我们与 LLVM 开发者一起合作，讨论我们在使用 Clang 编译器前端时遇到的所有错误和问题。FreeBSD 项目正在考虑用 Clang 替代 GCC 作为系统编译器。Clang 可以编译 99% 的 FreeBSD 系统，并且可以在 i386/amd64 上编译引导内核，但它仍然存在一些错误，C++ 支持仍不成熟。

Ed 正在维护一个补丁集，用于将 FreeBSD 源代码中的 cc(1) 替换为 Clang 二进制文件，并使用 Clang 编译器引导几乎所有源代码。

LLVM 开发者在修复我们报告的大部分错误（超过 100 个）时非常有帮助。不幸的是，目前我们在一些错误报告上受阻，这些错误阻止我们使用 Clang 构建 libc、libm、libcrypto 和各种 CDDL 库，但 FreeBSD 内核本身可以编译并引导。

#### 待办事项

1. 使用 Clang 编译各种应用程序并报告错误。
2. 测试 llvm-bmake 分支，寻找更多错误。
3. 安排一个实验性的 Port 构建。

### [设备 mmap() 扩展](https://www.freebsd.org/status/report-2009-01-2009-03.html#Device-mmap\(\)-Extensions)

| 链接                                   |
| ------------------------------------ |
| <http://www.freebsd.org/\\~jhb/pat/> |

联系人：John Baldwin <<jhb@FreeBSD.org>>

GPU 设备驱动程序越来越需要更复杂的支持来将对象映射到用户空间和内核。例如，用于纹理的内存通常需要映射为写合并（Write-Combining）而不是写回（Write-Back）。我最近创建了三个补丁，以提供几个扩展。

第一个补丁允许设备驱动程序使用不同的虚拟内存对象来支持特定的 mmap() 调用，而不是始终使用设备分页器。第二个补丁引入了一种新的虚拟内存对象类型，可以映射任意的物理地址范围。这可以用于让用户空间 mmap PCI BAR 等。第三个补丁允许内存映射使用不同的缓存模式（例如写合并或不可缓存）。

我认为这些补丁提供了实现 Nvidia amd64 驱动程序所需的剩余部分。它们对未来的 Xorg DRM 支持也将很有用。目前的补丁集可以安全地合并回 7.x 版本。

目前我正在等待几位同事的审查和反馈。我希望这些补丁能够在 8.0 冻结之前进入 HEAD。

### [OpenBSM](https://www.freebsd.org/status/report-2009-01-2009-03.html#OpenBSM)

| 链接                                    |
| ------------------------------------- |
| [OpenBSM 网站](http://www.openbsm.org/) |

联系人：Robert Watson <<rwatson@FreeBSD.org>>\
联系人：TrustedBSD 审计邮件列表 <<trustedbsd-audit@TrustedBSD.org>>

TrustedBSD 项目现已发布 OpenBSM 1.1，这是 OpenBSM 代码库的第二个生产版本。OpenBSM 1.1 已合并到 FreeBSD 8-CURRENT，并将在 FreeBSD 7.3 发布之前合并到 7-STABLE。自 OpenBSM 1.0 以来的主要变化包括：

* 现在日志文件包括生成日志的主机。崩溃恢复已得到改进。现在支持基于大小和日期的日志过期；默认情况下，日志文件将在生成 10MB 日志后过期。默认的单个日志限制现在为 2MB。
* Mac OS X Snow Leopard 现在是完全支持的平台；可以使用 launchd(8) 启动 auditd(8)。命令行工具和库现在支持 Mac OS X Leopard。
* 现在支持扩展头部标记，能将主机标识符标记到审计日志中。IPv6 地址现在在主体标记中得到支持。BSM 标记和记录类型已进一步与 OpenSolaris 同步；增加了对许多新系统调用的支持。本地错误和套接字类型现在与 BSM 值相互映射。

自上次测试发布 OpenBSM 1.1 beta 1 以来，已修复 auditon(2) 系统调用的 32/64 位兼容性问题。现在在 audit\_control(5) 中设置了默认的“expire-after”值为 10MB。使用新 API，现在本地 fcntl(2) 参数映射到线 BSM 版本。已修复 audit\_submit(3) 手册页。已添加一个新的审计事件类别，用于后登录认证和访问控制事件。

#### 待办事项

1. 在令牌编码中迁移到 sbufs。
2. 支持审计 NFS RPC。

### [发布工程](https://www.freebsd.org/status/report-2009-01-2009-03.html#Release-Engineering)

| 链接                               |
| -------------------------------- |
| <http://www.freebsd.org/releng/> |

联系人：发布工程团队 <<re@FreeBSD.org>>

发布工程团队（在许多其他人的大力帮助下）于 2009 年 5 月 4 日发布了 FreeBSD 7.2。在此期间，我们还开始提醒开发者注意即将到来的 FreeBSD 8.0 发布周期，预计将在 2009 年 6 月初开始，并计划于 2009 年 9 月初发布。

### [Sysinfo - 一套记录你的系统的脚本](https://www.freebsd.org/status/report-2009-01-2009-03.html#Sysinfoa-set-of-scripts-which-document-your-system)

| 链接                                                                                                                 |
| ------------------------------------------------------------------------------------------------------------------ |
| [公开发布公告](http://danger.rulez.sk/index.php/2009/04/14/sysinfo-a-set-of-scripts-which-document-your-freebsd-system/) |
| [FreeBSD 论坛帖子](https://forums.freebsd.org/showthread.php?p=19321)                                                  |

联系人：Daniel Gerzo <<danger@FreeBSD.org>>

*Sysinfo* 是一个 shell 脚本，旨在自动收集系统信息并记录给定主机系统的硬件和软件配置。其目标是为系统操作员提供关于未知 FreeBSD 安装的陈述性信息。

它由多个模块（也是 shell 脚本）组成，因此非常容易扩展，并提供了一种便捷的方式来检查整体系统配置。

该工具作为我的学士论文的一部分编写，其开发仍在进行中。因此，如果你能提供一些反馈，我将不胜感激，因为我将很快为我的论文进行答辩。你可以在 [论坛](https://forums.freebsd.org/showthread.php?p=19321) 提供反馈，或者你也可以通过私人邮件发送给我。

该工具现在可以通过 Ports 从 [sysutils/sysinfo](http://www.freshports.org/sysutils/sysinfo) Port 安装。

#### 待办事项

1. 接收更多反馈。
2. 进行更多测试。
3. 扩展和改进该工具。

### [在 GENERIC 中的 TrustedBSD MAC 框架](https://www.freebsd.org/status/report-2009-01-2009-03.html#TrustedBSD-MAC-Framework-in-GENERIC)

| 链接                                                       |
| -------------------------------------------------------- |
| [TrustedBSD MAC 主页面](http://www.trustedbsd.org/mac.html) |

联系人：Robert Watson <<rwatson@FreeBSD.org>>\
联系人：TrustedBSD 讨论邮件列表 <<trustedbsd-discuss@TrustedBSD.org>>

正在进行工作以将“options MAC”包含在 8.0 的 GENERIC 内核中。这主要包括性能工作，以减少使用策略时的开销，并在没有配置策略时消除开销。迄今为止的工作包括：

* MAC 框架现在可以检测由策略标记的对象类型，并且在不会使用时不会分配 MAC 标签存储。
* 添加了 MAC 框架的 DTrace 探针，以便更容易分析 MAC 框架和策略的交互。
* 消除了用于防止模块卸载的互斥锁保护的引用计数，并分别用 sx 锁和 rwlock 取代它们，以应对长时间睡眠和短时间睡眠的入口点，从而显著降低了进入 MAC 框架的开销。如果没有加载动态策略，则不会产生任何锁定开销。

#### 待办事项

1. 为非可睡眠入口点迁移到 rmlocks，以减少负载下的缓存行冲突。
2. 将 MAC 框架入口点的调用宏化，并执行调用方路径中的 MAC 是否启用的判断，以避免当 MAC 被禁用时额外的函数调用开销。

### [VFS/NFS DTrace 探针](https://www.freebsd.org/status/report-2009-01-2009-03.html#VFS/NFS-DTrace-Probes)

链接

联系人：Robert Watson <<rwatson@FreeBSD.org>>

一个新的 DTrace 提供程序 dtnfsclient 已经添加到 FreeBSD 8.x 内核，并将在 7.3 发布之前合并到 7.x。以下是可用的探针：

* `nfsclient:{nfs2,nfs3}:{procname}:start` - NFSv2 和 NFSv3 RPC 启动探针
* `nfsclient:{nfs2,nfs3}:{procname}:done` - NFSv2 和 NFSv3 RPC 完成探针
* `nfsclient:accesscache::` - NFS 访问缓存刷新/命中/未命中/加载探针
* `nfsclient:attrcache::` - NFS 属性缓存刷新/命中/未命中/完成探针

此外，还添加了一些 VFS 探针：

* `vfs:vop:{vopname}:entry` - VOP 入口探针
* `vfs:vop:{vopname}:return` - VOP 返回探针
* `vfs:namei:lookup:entry` - VFS 名称查找入口探针
* `vfs:namei:lookup:return` - VFS 名称查找返回探针
* `vfs:namecache:*:*` - VFS 名称缓存 `enter/enter_negative/fullpath_enter/fullpath_hit/fullpath_miss/fullpath_return/lookup_hit/lookup_hit_negative/lookup_miss/purge/purge_negative/purge_vfs/zap/zap_negative` 探针

这些探针使得跟踪 NFS 和 VFS 事件变得更加容易。

#### 待办事项

1. 添加 VFSOP 跟踪。
2. 添加 RPC 层跟踪，例如 RPC 重传。
3. 提供解码后的 NFS RPC，以便暴露事务 ID 和文件句柄。

### [FreeBSD 上的 VirtualBox](https://www.freebsd.org/status/report-2009-01-2009-03.html#VirtualBox-on-FreeBSD)

| 链接                                                                                            |
| --------------------------------------------------------------------------------------------- |
| [VirtualBox 在 FreeBSD 上的发布公告](http://miwi.bsdcrew.de/2009/05/virtualbox-on-freebsd/)          |
| [VirtualBox 首次截图](http://miwi.bsdcrew.de/2009/05/virtualbox-on-freebsd-first-screenshots/)    |
| [来自 Bernhard Froehlich 的成功消息](http://vbox.innotek.de/pipermail/vbox-dev/2009-May/001369.html) |

联系人：Beat Gaetzi <<beat@FreeBSD.org>>\
联系人：Bernhard Froehlich <<decke@bluelife.at>>\
联系人：Dennis Herrmann <<dhn@FreeBSD.org>>\
联系人：Martin Wilke <<miwi@FreeBSD.org>>

在 Alexander Eichner 在 vbox-dev 邮件列表上发送的第一封邮件之后，我们开始了移植 VirtualBox 的工作。我们用了 6 天时间，经过 20 多个补丁，才让 VirtualBox 启动。我们要感谢 Alexander Eichner、所有 VirtualBox 开发者、Gustau Perez 和 Ulf Lilleengen。如果你想玩玩当前的 Port，你可以在 [这里](http://svn.bluelife.at/projects/packages/blueports/emulators/virtualbox/) 查看。请不要就任何问题联系我，我们知道有很多问题，并且仍在努力解决它们，直到我们正式发布测试调用。

#### 待办事项

1. 修复 7.2-RELEASE 上的内核崩溃。
2. 代码清理。
3. 修复 AMD64 上的错误。
4. 修复用户/权限问题。

## [FreeBSD 团队报告](https://www.freebsd.org/status/report-2009-01-2009-03.html#FreeBSD-Team-Reports)

### [FreeBSD BugBusting 团队](https://www.freebsd.org/status/report-2009-01-2009-03.html#FreeBSD-BugBusting-Team)

| 链接                                                                        |
| ------------------------------------------------------------------------- |
| <http://www.freebsd.org/support.html#gnats>                               |
| <http://wiki.freebsd.org/BugBusting>                                      |
| <http://people.freebsd.org/\\~linimon/studies/prs/>                       |
| <http://people.freebsd.org/\\~linimon/studies/prs/recommended\\_prs.html> |

联系人：Mark Linimon <<bugmeister@>>\
联系人：Remko Lodder <<bugmeister@>>

我们继续对 PR 进行分类，并为其添加标签，这些标签对应内核子系统或用户空间 PR 的手册页引用。这些标签会生成按 [标签](http://people.freebsd.org/~linimon/studies/prs/pr_tag_index.html) 和 [手册页](http://people.freebsd.org/~linimon/studies/prs/pr_manpage_index.html) 排序的 PR 列表。

Mark Linimon (linimon@) 已为发布工程团队创建了 [特别报告](http://people.freebsd.org/~linimon/annotated_prs.re.html)，以帮助聚焦于 FreeBSD 7.2 发布前的回归和其他相关领域。这是之前报告中宣布的 [‘定制化开发者报告’](http://people.freebsd.org/~linimon/annotated_prs.sample.html) 的进一步改进。

我们还提供了所有 [自动生成报告的完整列表](http://people.freebsd.org/~linimon/studies/prs/)。如果你有任何建议，提出不存在但可能有益的报告，我们非常欢迎。

Mark Linimon 还继续尝试定义一般性问题并研究可能的新工作流模型，届时将于 BSDCan 上进行主题演讲。

BugBusting 团队推荐的 [待评审 PR 列表](http://people.freebsd.org/~linimon/studies/prs/recommended_prs.html) 继续有新 PR 被添加。该列表包含 BugBusting 团队认为可能已准备好直接提交的 PR，或者是可能仅需提交者根据特定子系统知识轻松解决的 PR。所有提交者都被邀请在有空时查看此列表，帮助关闭 PR。

自上次状态报告以来，未解决的错误数量一直徘徊在 5600 左右，虽然随着 7.2 Ports 冻结，数量有所上升。

一如既往，欢迎更多的帮助，提交者和非提交者都可以加入我们，在 #freebsd-bugbusters 上帮助关闭过时的 PR 或提交有效 PR 的补丁。

#### 待办事项

1. 寻找方法让更多的提交者帮助我们关闭团队已经分析过的 PR。
2. 思考一种方式，让提交者仅查看已经被“审核”或“确认”的 PR。
3. 为我们已经完成的工作以及接下来打算做的事情生成更多的宣传。
4. 定义新的 PR 类别、分类和状态，以更好地匹配我们的工作流（进行中）。

## [架构](https://www.freebsd.org/status/report-2009-01-2009-03.html#Architectures)

### [FreeBSD/powerpc G5 支持](https://www.freebsd.org/status/report-2009-01-2009-03.html#FreeBSD/powerpc-G5-Support)

| 链接 |
| -- |
|    |

联系人：Nathan Whitehorn <<nwhitehorn@freebsd.org>>

FreeBSD 8.0-CURRENT 现在支持在 64 位桥接模式下运行的 PowerPC CPU。这包括 PowerPC 970 (G5) 以及 POWER3 和 POWER4。目前已知只有苹果系统可以正常运行。

#### 待办事项

1. 由于缺少北桥支持，目前 IBM 系统不受支持。
2. 基于 SMU 的苹果 G5 系统（G5 iMac、后期 Powermac G5）的软件风扇控制不可用。

### [FreeBSD/sparc64 UltraSPARC III 支持](https://www.freebsd.org/status/report-2009-01-2009-03.html#FreeBSD/sparc64-UltraSPARC-III-support)

联系人：Marius Strobl <<marius@FreeBSD.org>>

如同上次状态报告中宣布的，基于 UltraSPARC III 及更高版本的 sun4u 机器的支持已经 MFC 到 stable/7（最后缺失的部分是 r190297），因此将在即将发布的 7.2-RELEASE 中出现，并且已经可以通过 7.2-RC1 测试。此外，从 r191076 开始，machfb(4) 已经修复，可以与 UltraSPARC III 及更高版本兼容，虽然该修复未能在 7.2-RC1 中加入，但将在最终版本中提供。X.Org 7.4 和 Firefox Port 以及其他一些基于 gecko 的 Port（如 Seamonkey）已经修复，能够在 sparc64 上工作并进行打包，包括在安装了 creator(4) 或 machfb(4) 驱动的 UltraSPARC III 和 UltraSPARC IIIi 机器上。Sun Cassini/Cassini+ 的驱动程序以及国民半导体 DP83065 Saturn 千兆网卡的驱动程序也在顺利进行中，最后一个要实现的功能是对 jumbo 帧的支持。

## [文档](https://www.freebsd.org/status/report-2009-01-2009-03.html#Documentation)

### [荷兰语文档项目](https://www.freebsd.org/status/report-2009-01-2009-03.html#Dutch-Documentation-Project)

| 链接                                                                                           |
| -------------------------------------------------------------------------------------------- |
| [项目概述和当前状态](http://wiki.freebsd.org/DutchDocumentationProject)                               |
| [发布的文档](http://www.freebsd.org/doc/nl/)                                                      |
| [Perforce 仓库](http://p4web.freebsd.org/@md=d\&cd=/\&c=pFl@/depot/projects/docproj_nl/?ac=83) |

联系人：Remko Lodder <<remko@FreeBSD.org>>\
联系人：René Ladan <<rene@FreeBSD.org>>

FreeBSD 荷兰语文档项目是一个正在进行的项目，旨在将 FreeBSD 文档翻译成荷兰语。

已于去年一月完成手册的翻译，并与英文版保持同步。此外，五篇文章和传单也已翻译完成。

目前已对网站进行了一些初步翻译，但可能需要更多的翻译人员才能完全实现。

#### 待办事项

1. 招募更多翻译人员。
2. 保持翻译与英文版本同步更新。
3. 完成 FAQ 的翻译。
4. 翻译更多的文章，甚至可能是一些书籍。

### [德语文档项目](https://www.freebsd.org/status/report-2009-01-2009-03.html#German-Documentation-Project)

| 链接                         |
| -------------------------- |
| <https://doc.bsdgroup.de/> |

联系人：Johann Kois <<jkois@FreeBSD.org>>\
联系人：Martin Wilke <<miwi@FreeBSD.org>>

2009 年 2 月，FreeBSD 开发者手册的德语版本上线。此外，我们还通过 Benedict Reuschling 的贡献，成功更新了大量 FAQ 内容。

网站（至少我们认为与翻译相关的部分）已经完成翻译并持续更新。

当然，欢迎更多的志愿者加入，因为仍有大量工作等待完成。

#### 待办事项

1. 更新现有的文档集（尤其是手册）。
2. 阅读翻译内容。检查问题/错误，并提供反馈。

### [匈牙利文档项目](https://www.freebsd.org/status/report-2009-01-2009-03.html#Hungarian-Documentation-Project)

| 链接                                                                                                                                      |
| --------------------------------------------------------------------------------------------------------------------------------------- |
| [FreeBSD 匈牙利语网页](http://www.freebsd.org/hu)                                                                                             |
| [FreeBSD 匈牙利文档](http://www.freebsd.org/doc/hu)                                                                                          |
| [FreeBSD 匈牙利文档项目的 Wiki 页面](http://wiki.freebsd.org/HungarianDocumentationProject)                                                       |
| [FreeBSD 匈牙利文档项目的 Perforce 仓库](http://p4web.freebsd.org/@md=d\&cd=/depot/projects/docproj_hu/\&c=aXw@/depot/projects/docproj_hu/?ac=83) |

联系人：Gábor Kövesdán <<gabor@FreeBSD.org>>\
联系人：Gábor Páli <<pgj@FreeBSD.org>>

我们很高兴地宣布，FreeBSD 匈牙利语网页新增了以下内容：

* 从 2009 年起的项目新闻条目（HTML，RSS，RDF）
* 从 2008 年起的新闻稿（HTML，RSS）
* 从 2009 年起的事件（HTML，RSS）
* 安全公告（HTML，RSS）

我们仍然希望翻译 [FDP Primer](http://www.freebsd.org/doc/hu/books/fdp-primer/) 能鼓励更多人帮助我们的工作。欢迎随时贡献，每一行翻译或反馈都受到欢迎并极为感激。有关如何贡献的更多信息，请阅读项目的 [介绍](http://www.freebsd.org/hu/docproj/hungarian.html)（匈牙利语）。

#### 待办事项

1. 翻译新闻条目和新闻稿。
2. 翻译 -CURRENT 和 8.X 的发布说明。
3. 翻译文章。
4. 翻译网页。
5. 阅读翻译，提供反馈。

## [谷歌编程之夏](https://www.freebsd.org/status/report-2009-01-2009-03.html#Google-Summer-of-Code)

### [BSD 许可的文本处理工具](https://www.freebsd.org/status/report-2009-01-2009-03.html#BSD-licensed-text-processing-tools)

| 链接                                                                                                           |
| ------------------------------------------------------------------------------------------------------------ |
| [Perforce 仓库](http://perforce.freebsd.org/depotTreeBrowser.cgi?FSPC=//depot/projects/soc2008/gabor_textproc) |

联系人：Gábor Kövesdán <<gabor@FreeBSD.org>>

目前，grep 已完成，只待 Port 构建测试。已知它基本功能完备，且比 GNU 版本小得多。

至于 sort，已经进行了完全重写，并且还缺少一些选项。还需要进行性能测试。

#### 待办事项

1. 在 pointyhat 上测试 grep。
2. 完善 sort，添加缺少的功能。
3. 对 sort 进行性能测量，寻找可能的优化机会。
4. 在 pointyhat 上测试 sort。
