# FreeBSD 2015 年第一季度状态报告

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

## 引言

本报告涉及了 2015 年 1 月至 3 月期间的 FreeBSD 相关项目。这是 2015 年计划的四个报告中的第一个。

2015 年第一季度是 FreeBSD 项目和社区又一个富有成效的季度。FreeBSD 被应用于多个研究项目，这些项目正将新的和令人兴奋的功能带入 FreeBSD，为系统带来改进的网络性能和安全特性。工作仍在继续，以提高对更多架构和架构特性的支持，包括朝着使 ARM（32 位和 64 位）成为 FreeBSD 11 中的一级平台的目标迈进。工具链也在更新中，包括新版本的 clang/LLVM 已就绪，迁移到 ELF 工具链工具，并更新了 LLDB 和 gdb 调试器。Ports 团队和内核开发者的工作正在维护和改善 FreeBSD 作为桌面操作系统的状态。pkg 团队继续使二进制包更加易用并方便升级。

感谢所有报告者的出色工作！

涵盖 2015 年 4 月至 6 月期间的报告提交截止日期为 2015 年 7 月 7 日。

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

### [FreeBSD Bugmeister](https://www.freebsd.org/status/report-2015-01-2015-03.html#FreeBSD-Bugmeister)

联系方式：FreeBSD Bugmeister <<bugmeister@FreeBSD.org>>

在 2014 年 6 月，Bugzilla 取代了 GNATS 成为 FreeBSD 的首选问题管理工具，结束了 GNATS 20 多年的辉煌历史。接下来的几个月对 Bugzilla 来说非常艰难：许多功能仍然缺失，多个不确定性导致用户和提交者对新系统的适应进展缓慢。

在过去的六个月里，许多缺失的功能得到了补充，允许用户和提交者专注于解决 bug。类别、状态模型和许多与工作流相关的选项不断被重做和改进，以提供必要的信息，同时不妨碍用户的操作。

为 Port 问题实现了自动分配器，类似于 GNATS 过去成功实现的功能。Bugzilla 中的一个 [仪表板](https://bugs.freebsd.org/bugzilla/page.cgi?id=dashboard.html) 页面为用户和提交者提供了快速访问常见查询和总体统计信息的功能；许多其他小的调整、配置和扩展被实施以改善系统的可用性。

目前正在实施一个改进的报告系统，提供图表和统计信息，供用户和提交者使用。处理 MFC 和更好的请求反馈机制（Bugzilla 中的标志）将是接下来的工作。

Bugmeister 还与 FreeBSD GitHub 团队密切合作，建立 GitHub 问题追踪器与我们的 Bugzilla 系统之间的工作流。技术解决方案已经作为概念验证存在，但其在生产环境中的使用要等到 Bugzilla 5.0 被采用后才会实现。

#### 待办事项

1. 为 FreeBSD Bugzilla 创建一个稳固的 [图表扩展](https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=198244)。
2. 改进 [MFC 处理](https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=193772)。
3. 觉得缺少什么重要功能吗？[让我们知道！](https://bugs.freebsd.org/bugzilla/enter_bug.cgi?product=Services\&component=Bug%20Tracker)

### [Ports](https://www.freebsd.org/status/report-2015-01-2015-03.html#Ports-Collection)

| 链接                                                                                         |
| ------------------------------------------------------------------------------------------ |
| [http://www.FreeBSD.org/ports/](http://www.freebsd.org/ports/)                             |
| <http://www.freebsd.org/doc/en_US.ISO8859-1/articles/contributing/ports-contributing.html> |
| <http://portsmon.freebsd.org/index.html>                                                   |
| <http://portscout.freebsd.org/>                                                            |
| <http://www.freebsd.org/portmgr/index.html>                                                |
| <http://blogs.freebsdish.org/portmgr/>                                                     |
| <http://www.twitter.com/freebsd_portmgr/>                                                  |
| <http://www.facebook.com/portmgr>                                                          |
| <http://plus.google.com/communities/108335846196454338383>                                 |

联系方式：Frederic Culot <<portmgr-secretary@FreeBSD.org>>\
联系方式：Ports 管理团队 <<portmgr@FreeBSD.org>>

截至第一季度末，Ports 包含近 25,000 个 Port，PR 数量刚刚超过 1,500。与上一季度相比，树的活动量有所增加，共有 163 名活跃提交者完成了近 7,000 次提交。关闭的 bug 报告数量也增加了约 20%，共关闭了近 2,000 个 PR！

在第一季度，两位新开发者获得了 Port 提交权限（jbeich@ 和 brd@），一位提交权限被暂时保管（rafan@，应其请求）。

在管理方面，decke@ 决定于 2 月份卸下他的 portmgr 职责。第一季度没有对团队做出其他更改。

本季度还发布了本年度的第一个季度分支，2015Q1。在这个分支上，35 位提交者应用了 140 个更改。

在 QA 方面，进行了 29 次实验运行（exp-run），以验证敏感更新或清理工作。

#### 待办事项

1. 与上一季度一样，树上进行了大量工作，更新了主要 Port 并关闭了比 2014Q4 更多的 PR。然而，我们有时在文档方面滞后，因此欢迎志愿者帮助完成这项重要任务。

### [FreeBSD 核心团队](https://www.freebsd.org/status/report-2015-01-2015-03.html#The-FreeBSD-Core-Team)

联系方式：FreeBSD 核心团队 <<core@FreeBSD.org>>

FreeBSD 核心团队是项目的“董事会”，负责决定项目的整体目标和方向，以及管理 FreeBSD 项目中的特定领域。

1 月份，核心团队成员处理了 Bugzilla 数据库意外删除事件的后果。这一事件凸显了集群中的备份和恢复机制未能胜任任务的问题。核心团队已与集群管理团队讨论了适当的措施，并正在审查其实施情况。

经过长时间的磋商，关于在 11.0-RELEASE 中引入新支持模型的计划终于在 2 月初达成一致并发布。这一公告将 BSDCan 2014 通过的动议付诸实践，并明确了实施所需的步骤。

2 月份，核心团队还重新审视了将 blogs.freebsdish.org 博客聚合器作为正式项目服务的讨论，并考虑为开发者提供博客平台。然而，安全性和人力资源是主要的关注点。鉴于大多数自由博客平台的历史，核心团队谨慎地决定是否将其引入集群。同样，维护一个博客平台需要大量的志愿者努力，以确保所有文章都合适并去除垃圾邮件。

3 月份，讨论了两个可能具有分裂性的议题。是否应当提交并 MFC ZFS ARC 响应性补丁，作为 10.1-RELEASE 性能问题的务实修复，尽管这不是理想的解决方案，且需要进一步重做？是否应停止支持旧版（C89 或更早版本）编译器在内核代码中的使用，直接采用 C11 标准？从这个最后一点扩展：我们是否应当有一个正式机制来决定哪些系统中的组件已不再使用，并且应何时移除？

在本季度，共授予了五个新的 src 提交权限，两个权限被暂时保管。

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

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

| 链接                                     |
| -------------------------------------- |
| [bhyve FAQ 和演讲](http://www.bhyve.org/) |

联系方式：Peter Grehan <<grehan@FreeBSD.org>>\
联系方式：Neel Natu <<neel@FreeBSD.org>>\
联系方式：John Baldwin <<jhb@FreeBSD.org>>\
联系方式：Tycho Nightingale <<tychon@FreeBSD.org>>\
联系方式：Allan Jude <<allanjude@FreeBSD.org>>\
联系方式：Alexander Motin <<mav@FreeBSD.org>>

bhyve 是一个运行在 FreeBSD/amd64 平台上的虚拟机监控程序。目前，它支持运行 FreeBSD（8.x 或更高版本）、Linux i386/x64、OpenBSD i386/amd64 和 NetBSD/amd64 客户机。当前的开发重点是支持更多的客户操作系统，并实现其他虚拟机监控程序中的功能。

Peter Grehan 在 2015 年的 bhyvecon 上做了状态更新。相关幻灯片可以在 <http://bhyvecon.org/bhyvecon2015-Peter.pdf> 查阅。

Mihai Carabas 在 2015 年的 AsiaBSDCon 上展示了他在 GSoC 项目中实现的 bhyve 指令缓存功能。相关幻灯片可以在 <http://people.freebsd.org/~neel/bhyve/bhyve-cache-emul-slides.pdf> 查阅。

本季度对 bhyve 进行了许多改进：

* RTC 设备模型现在可以指示保持 UTC 时间，而不是本地时间。对于像 OpenBSD 这样的客户机，它期望 RTC 保持 UTC 时间。
* virtio-blk 设备现在进行异步 I/O 操作，不会阻塞发起 I/O 操作的 vcpu 线程。
* virtio-blk 和 ahci-hd 设备现在能够并行执行多个 I/O 请求。这可以显著提高虚拟磁盘的吞吐量。
* 如果后端设备支持 TRIM（例如 ZVOL），ahci-hd 设备模拟现在会向客户机报告 TRIM。
* virtio-blk 和 ahci-hd 设备现在会报告后端设备或文件的正确逻辑和物理块大小。

#### 待办事项

1. 改进文档。
2. bhyveucl 是一个基于 UCL 格式配置文件启动 bhyve 实例的工具。更多信息请查看 <https://github.com/allanjude/bhyveucl>。
3. 添加对 virtio-scsi 的支持。
4. 提供灵活的网络后端，如 wanproxy 和 vhost-net。
5. 从 bhyveload 和 bhyve 切换到单进程模型。
6. 支持以非 root 用户运行 bhyve。
7. 添加对常见虚拟机文件格式（VMDK、VHD、QCOW2）的支持。
8. 实现视频抽象层（不使用 X11 或 SDL）。
9. 支持挂起/恢复。
10. 支持实时迁移。
11. 支持嵌套 VT-x（在 bhyve 中运行 bhyve）。
12. 支持其他架构（ARM、MIPS、PPC）。

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

| 链接                      |
| ----------------------- |
| <http://cheri-cpu.org/> |

联系方式：Robert Watson <<rwatson@FreeBSD.org>>\
联系方式：Brooks Davis <<brooks@FreeBSD.org>>\
联系方式：David Chisnall <<theraven@FreeBSD.org>>\
联系方式：Ruslan Bukin <<br@FreeBSD.org>>

CheriBSD 是 FreeBSD 的一个分支，用于支持 CHERI 研究 CPU。我们已扩展内核，以支持 CHERI 内存能力，并修改了包括 tcpdump、libmagic 和 libz 在内的应用程序和库，以利用这些能力，提升内存安全性和隔离性。我们还开发了自定义演示应用程序和部署基础设施，用于我们的表演演示平台。

在本报告发布时，我们正在最终确定首次开放源代码发布的 CHERI CPU，该版本将通过 CHERI CPU [网站](http://cheri-cpu.org/) 提供。

自 2012 年以来，我们一直在将对 BERI CPU 平台的支持合并到 FreeBSD 中，并继续在新特性开发的过程中进行合并。最近，Ruslan 为 Terasis SoCkit 板添加了支持，该板将 ARM 处理器与 FPGA 结合在一个包中，能够运行 BERI（以及很快支持 CHERI）。

该项目由 DARPA/AFRL 赞助。

### [Clang, llvm 和 lldb 更新至 3.6.0](https://www.freebsd.org/status/report-2015-01-2015-03.html#Clang,-llvm-and-lldb-updated-to-3.6.0)

| 链接                                                                                    |
| ------------------------------------------------------------------------------------- |
| [LLVM 3.6.0 发布说明](http://llvm.org/releases/3.6.0/docs/ReleaseNotes.html)              |
| [Clang 3.6.0 发布说明](http://llvm.org/releases/3.6.0/tools/clang/docs/ReleaseNotes.html) |

联系方式：Dimitry Andric <<dim@FreeBSD.org>>\
联系方式：Ed Maste <<emaste@FreeBSD.org>>\
联系方式：Roman Divacky <<rdivacky@FreeBSD.org>>\
联系方式：Davide Italiano <<davide@FreeBSD.org>>

在本季度结束前，我们将 clang、llvm 和 lldb 更新到 3.6.0 版本。这些版本包含了许多改进；请参阅链接中的发布说明获取更详细的信息。

我们还导入了更新版本的 compiler-rt，提供了更好的地址消毒器（Address Sanitizer）和未定义行为消毒器（Undefined Behavior Sanitizer）支持，并加入了 arm64 运行时支持例程。通过更新后的 clang、llvm 和 compiler-rt，我们现在支持在基础工具链中使用地址和未定义行为消毒器。

与 3.5.0 版本一样，这些组件需要 C++11 支持才能构建。C++11 支持在 FreeBSD 10.0 及更高版本的 x86 架构中提供。

目前还不清楚我们是否能够将这些更新 MFC（合并到稳定分支），因为这将对从没有 C++11 支持的系统（包括旧版发布或仍使用 gcc 的架构）进行升级带来困难。

在 lld-import 分支中，我们还导入了 LLVM 项目生成的 lld 链接器的最新快照。这是一个初步的工作，旨在使其作为系统链接器使用。

感谢 Ed Maste、Roman Divacky、Andrew Turner 和 Davide Italiano 在此次导入中的帮助，感谢 Antoine Brodin 执行的 Port 实验运行。

#### 待办事项

1. 在 Port 实验运行后，发现少数 Port 存在问题，针对几乎所有这些问题，已经提交了修复或解决方法的 PR。虽然大多数这些 PR 已经处理并关闭，但仍有少数需要维护者或其他志愿者关注的 PR。
2. Andrew Turner 正在努力推动 arm64 架构的支持，现在 clang 和 llvm 已完全支持 arm64。这将是解决一些挑战性问题的新领域。
3. powerpc 和 sparc64 架构仍然存在问题，任何在这些领域的帮助都将受到极大欢迎。

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

| 链接                                                     |
| ------------------------------------------------------ |
| [Tyan 开发参考平台](http://www.tyan.com/campaign/openpower/) |

联系方式：Nathan Whitehorn <<nwhitehorn@freebsd.org>>\
联系方式：Justin Hibbits <<jhibbits@freebsd.org>>\
联系方式：Adrian Chadd <<adrian@freebsd.org>>

IBM 和 OpenPOWER 基金会推动为基于 POWER8 的系统创建更广泛的软件和硬件生态系统。从 2014 年 1 月开始，我们在 Tyan GN70-BP010 POWER8 服务器上进行 bringup 工作，这是一款四核 3 GHz 设备，有 32 个硬件线程。

自上次报告以来的更新：

* FreeBSD 现在可以在虚拟 SCSI 块设备下通过虚拟机监控程序启动；此前阻止这一进程的问题已被修复。
* powerpc64 pmap 代码已重写以提高可扩展性，因为之前的 pmap 代码无法支持超过少量 CPU 的扩展。
* 为 IBM 的向量 - 标量扩展（VSX）添加了初步支持。
* FreeBSD 内核已完全独立于位置进行编译，以支持 powerpc64，之后还会支持 powerpc32。

该项目由 FreeBSD 基金会赞助。

#### 待办事项

1. 让 FreeBSD 原生启动，而不是通过 KVM 启动。这需要为系统中的各种硬件设备编写 OPAL 驱动程序。
2. 将 loader(8) 与 petitboot 集成。

### [Jenkins 持续集成用于 FreeBSD](https://www.freebsd.org/status/report-2015-01-2015-03.html#Jenkins-Continuous-Integration-for-FreeBSD)

| 链接                                                                                             |
| ---------------------------------------------------------------------------------------------- |
| [FreeBSD 集群中的 Jenkins CI 服务器](https://jenkins.freebsd.org/)                                    |
| [Cloud9ers](http://www.cloud9ers.com/)                                                         |
| [Ahmed Kamal](https://wiki.ubuntu.com/AhmedKamal)                                              |
| [Ahmed 在 SaltStack 的贡献](https://github.com/saltstack/salt/pulls?q=is%3Apr+author%3Akim0)       |
| [Kyua 转并行化](http://julipedia.meroh.net/2015/02/kyua-turns-parallel.html)                       |
| [Jenkins 多 SCM 插件修复](https://github.com/jenkinsci/multiple-scms-plugin/commits?author=rodrigc) |
| [GCC 4.9 问题](https://lists.freebsd.org/pipermail/freebsd-toolchain/2015-March/001545.html)     |
| [外部工具链支持](https://wiki.freebsd.org/ExternalToolchain)                                          |

联系方式：Craig Rodrigues <<rodrigc@FreeBSD.org>>\
联系方式：Jenkins 管理员 <<jenkins-admin@FreeBSD.org>>\
联系方式：FreeBSD 测试 <<freebsd-testing@FreeBSD.org>>

Jenkins 持续集成和测试项目一直在帮助提高 FreeBSD 的质量。自上次状态报告以来，我们快速发现了导致构建中断或测试失败的提交，FreeBSD 开发人员迅速修复了这些问题。亮点包括：

* Ahmed Kamal 同意加入 jenkins-admin 团队。尽管他不是 FreeBSD 提交者，但他订阅了 jenkins-admin 别名，并通过 GitHub 提供代码贡献。Ahmed 为 freebsd-ci GitHub 仓库贡献了多个 SaltStack 脚本，并且发现了多个 SaltStack 在 FreeBSD 支持中的错误，已经通过 GitHub 拉取请求将这些错误修复并提交回 SaltStack。\
  Ahmed 是一位软件开发人员，居住在埃及开罗，目前在 Cloud9ers 工作，提供云和 DevOps 咨询服务。过去，他曾在 Canonical 担任 Ubuntu 云和服务器社区联络员。\
  Ahmed 通过 Craig Rodrigues 发送的关于 FreeBSD Jenkins 帮助请求了解到这一信息，并通过随机网页搜索找到了 FreeBSD，觉得这个项目非常不错，于是积极响应并参与了其中的志愿者工作。Ahmed 将参加 BSDCan 活动，进一步了解 BSD 社区。
* Julio Merino 扩展了 Kyua，支持并行执行测试用例。这应该有助于在包含成千上万个测试用例的环境中进行测试扩展。
* Craig Rodrigues 获得了 Jenkins 多 SCM 插件的提交权限，并对该插件进行了修复，以帮助它与 Subversion 1.8 一起工作。
* Craig Rodrigues 与 Dimitry Andric 在 FreeBSD 工具链团队合作，帮助识别并修复使用 GCC 4.9 编译时在 FreeBSD 源代码树中出现的多个编译问题。这项工作将帮助外部工具链项目。

#### 待办事项

1. 基于不同架构设置更多构建。
2. 使用像 Saltstack 这样的 DevOps 框架改进 Jenkins 集群中节点的维护。
3. 有兴趣帮助的人可以加入 <freebsd-testing@FreeBSD.org> 邮件列表。

### [Lua 引导加载程序](https://www.freebsd.org/status/report-2015-01-2015-03.html#Lua-boot-loader)

| 链接                                                         |
| ---------------------------------------------------------- |
| <https://svnweb.freebsd.org/base/projects/lua-bootloader/> |

联系方式：Rui Paulo <<rpaulo@FreeBSD.org>>\
联系方式：Pedro Souza <<pedrosouza@FreeBSD.org>>\
联系方式：Wojciech Koszek <<wkoszek@FreeBSD.org>>

Lua 引导加载程序项目已进入最后阶段，现已在 x86 上可用。该项目的目的是用 Lua 引导加载程序替换 Forth 引导加载程序。所有脚本已用 Lua 重写，并可在 sys/boot/lua 中找到。待所有 Forth 功能经过测试，并且引导菜单与 Forth 中的完全相同，我们将开始将此项目合并到 FreeBSD HEAD 中。两个加载程序可以在源代码树中共存，因引入了可插拔加载程序。

该项目最初由 Wojciech Koszek 启动，Pedro Souza 去年在他的 Google 夏季编程项目中编写了大部分 Lua 代码。

要构建 Lua 引导加载程序，只需使用：

```
WITH_LUA=y
WITHOUT_FORTH=y
```

#### 待办事项

1. 实现与 Forth 的功能和外观一致性。
2. 调查 Lua 是否使用浮点运算。
3. 测试 EFI Lua 加载程序。
4. 测试 U-Boot Lua 加载程序。
5. 测试串行控制台。

### [Mellanox iSCSI 扩展 RDMA (iSER) 支持](https://www.freebsd.org/status/report-2015-01-2015-03.html#Mellanox-iSCSI-Extensions-for-RDMA-\(iSER\)-Support)

联系方式：Max Gurtovoy <<maxg@mellanox.com>>\
联系方式：Sagi Grimberg <<sagig@mellanox.com>>

在 FreeBSD 10.0 中发布的内核 iSCSI 启动堆栈基础上，结合最近新增的 iSCSI 卸载接口，Mellanox Technologies 开始开发 iSCSI 扩展 RDMA (iSER) 启动器支持，利用 Mellanox 的 10、40、56 和 100 吉比特 IB/Ethernet 适配器的硬件卸载能力实现高效数据传输。

远程直接内存访问（RDMA）已被证明对存储应用程序非常有价值。RDMA 基础设施提供了零拷贝、CPU 卸载、可靠传输、网络整合等诸多优势。iSER 协议消除了传统 iSCSI/TCP 堆栈中的一些瓶颈，提供低延迟和高吞吐量，非常适合延迟敏感型工作负载。

这项工作包括一个新的 ICL 模块，来实现 iSER 启动器。iSCSI 堆栈做了轻微修改，以支持一些额外功能，如异步 I/O 完成、未映射的数据缓冲区和数据传输卸载。用户将能够使用 iscsictl(8) 选择 iSER 作为 iSCSI 传输协议。

该项目处于初步实现阶段，代码将以 BSD 许可证发布，预计今年晚些时候完成。

该项目由 Mellanox Technologies 赞助。

### [Multipath TCP for FreeBSD](https://www.freebsd.org/status/report-2015-01-2015-03.html#Multipath-TCP-for-FreeBSD)

| 链接                                          |
| ------------------------------------------- |
| <http://caia.swin.edu.au/urp/newtcp/mptcp/> |

联系方式：Nigel Williams <<njwilliams@swin.edu.au>>

Multipath TCP (MPTCP) 是对 TCP 的扩展，允许在一个标准的 TCP 会话中使用多个网络接口。新的地址的添加以及数据在这些地址之间的调度对 TCP 应用程序是透明的。

该项目的目标是提供一个 MPTCP 内核补丁，使其能够与参考 MPTCP 实现进行互操作，同时增加一些改进，以帮助网络研究。

在对早期原型实现进行重大重新设计后，补丁再次能够建立并执行多路径连接，涵盖多个地址。路径管理和连接添加子流的代码也得到了改进。

最近，已经添加了数据级重传支持，并正在进行测试。很快将开始在不同多路径场景中对补丁进行更广泛的测试，计划在 5 月发布 v0.5 的公开版本。

该项目由 FreeBSD 基金会赞助。

#### 待办事项

1. 数据级重传的测试。
2. 每个子流的拥塞控制算法选择的基本支持。
3. v0.5 补丁的测试和发布。

### [新自动挂载器](https://www.freebsd.org/status/report-2015-01-2015-03.html#New-Automounter)

| 链接                                                                                             |
| ---------------------------------------------------------------------------------------------- |
| <https://wiki.freebsd.org/Automounter>                                                         |
| <http://people.freebsd.org/~trasz/autofs.pdf>                                                  |
| <http://freebsdfoundation.blogspot.com/2015/03/freebsd-from-trenches-using-autofs5-to_13.html> |

联系方式：Edward Tomasz Napierała <<trasz@FreeBSD.org>>

新自动挂载器是一个清晰的实现，提供大多数其他 Unix 系统中的功能，使用通过 autofs 文件系统实现的适当内核支持。自动挂载器支持标准映射格式，并与轻量级目录访问协议（LDAP）服务集成。

在 10.1-RELEASE 发布后，大部分工作集中在修复错误、改进文档和优化。最大的新增功能是添加了一个“-media”映射，用于处理可移动媒体，如闪存驱动器或 DVD，并为此提供必要的基础设施支持，即 fstyp(8) 和 GEOM devd 通知。同时，还添加了“-noauto”映射，自动挂载在 fstab(5) 中标记为“noauto”的文件系统，而不需要为它们编写 autofs 映射。

该项目由 FreeBSD 基金会赞助。

### [Opaque ifnet](https://www.freebsd.org/status/report-2015-01-2015-03.html#Opaque-ifnet)

| 链接                                                    |
| ----------------------------------------------------- |
| [项目 wiki 页面](https://wiki.freebsd.org/projects/ifnet) |

联系方式：Gleb Smirnoff <<glebius@FreeBSD.org>>

该项目旨在为网络驱动程序设计一个新的 KPI，使网络堆栈能够发展而不会破坏与旧驱动程序的兼容性。核心思想是将 struct ifnet 从驱动程序中隐藏，项目因此被命名为“opaque ifnet”。然而，该项目还将包含更多变化，不仅仅是隐藏结构体的定义。

目前，新的 KPI 已经有了原型，大部分重要的网络堆栈部分已进行了相应修改，多个驱动程序已转换为使用新的 KPI。

该项目需要更多的人力，因为树中有许多网络驱动程序，共有 245 个位置分配了 struct ifnet。

该项目由 Netflix 赞助。

#### 待办事项

1. 转换更多驱动程序。

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

| 链接                                                                 |
| ------------------------------------------------------------------ |
| [pkg 的 Github 仓库](https://github.com/freebsd/pkg)                  |
| [pkg 邮件列表](https://lists.freebsd.org/mailman/listinfo/freebsd-pkg) |

联系方式：Baptiste Daroussin <<bapt@FreeBSD.org>>\
联系方式：Vsevolod Stakhov <<vsevolod@FreeBSD.org>>\
联系方式：Andrej Zverev <<az@FreeBSD.org>>

在 pkg(8) 方面做了大量工作，使 pkg(8) 达到了 1.5.0 版本。

特别关注了测试套件，测试数量从大约 20 个增加到 70 多个，主要是功能测试，每个测试覆盖多个不同的功能，较少强调单元测试。

一个主要亮点是初步支持 provides/requires。这仍然是简单的，但足够好，能够解决很多与 php 相关的 Port 问题：PHP 现在可以安全地从一个主版本升级到另一个主版本。这允许在每次 PHP 升级时重新安装 pecl/pear 包。

pkg 的一些内部结构已经重新设计，以支持在不需要 chroot(2) 或 jail(2) 调用的情况下进行跨安装包。

plist 和关键字解析器已经得到改进，以简化创建新 Port：

* 关键字现在可以带参数
* plist 现在有懒模式用于设置凭据
* 可以在 plist 中指定标志（不可变等）

pkg 现在支持 http/ftp 下载的恢复功能。

#### 待办事项

1. 在 Ports 中填充 provides/requires。
2. 使 Ports 中的所有脚本支持跨安装。
3. 改进 provides/requires。
4. 继续增加更多测试。

### [安全启动](https://www.freebsd.org/status/report-2015-01-2015-03.html#Secure-Boot)

| 链接                                    |
| ------------------------------------- |
| <https://wiki.freebsd.org/SecureBoot> |

联系方式：Edward Tomasz Napierała <<trasz@FreeBSD.org>>

UEFI 安全启动是一种机制，要求引导驱动程序和操作系统加载程序由授权密钥进行加密签名。它会拒绝执行任何未正确签名的软件，旨在保护引导驱动程序和操作系统加载程序免受恶意篡改或替换。

向 EFI 文件添加 Authenticode 签名的工具 uefisign(8) 已提交到 11-CURRENT，并将在 10.2-RELEASE 中发布。其他开源工具的 Port 已添加到 Ports 中，如 sysutils/pesign、sysutils/sbsigntool 和 sysutils/shim。已经有一个原型补丁使 boot1 使用安全启动 shim，并修改该 shim 提供成功启动所需的功能。

该项目由 FreeBSD 基金会赞助。

#### 待办事项

1. 完成 shim API 扩展并让它被上游接受。
2. 提交 boot1 更改。

### [内核](https://www.freebsd.org/status/report-2015-01-2015-03.html#Kernel)

#### [添加 PCIe 热插拔支持](https://www.freebsd.org/status/report-2015-01-2015-03.html#Adding-PCIe-Hot-plug-Support)

| 链接                                                                                                                    |
| --------------------------------------------------------------------------------------------------------------------- |
| [PCIe 热插拔 Perforce 分支](http://p4web.freebsd.org/@md=d\&cd=/depot/projects/\&c=LQ6@/depot/projects/pciehotplug/?ac=83) |

联系方式：John-Mark Gurney <<jmg@FreeBSD.org>>

PCI Express (PCIe) 热插拔被用于笔记本电脑和服务器，允许在系统运行时添加或移除外设。笔记本电脑通常使用热插拔的 PCIe 作为 ExpressCard 插槽或 Thunderbolt 接口。ExpressCard 已经支持 USB，但像千兆以太网适配器和 eSATA 卡这样的 ExpressCard PCIe 设备仅在启动时支持，移除这些设备可能会导致内核恐慌。

该项目的目标是允许在 FreeBSD 运行时插拔这些设备。该工作将提供支持设备插拔的基本基础设施，尽管预计需要额外的工作来更新各个驱动程序以支持热插拔。

当前的测试集中在使简单的 UART 设备功能正常。基本的热插拔功能已实现。

该项目由 FreeBSD 基金会赞助。

#### 待办事项

1. 通过保存/恢复必要的寄存器来使挂起/恢复功能正常工作。
2. 确保在挂起时，设备被移除，以便如果设备在机器挂起时被替换，新的设备会被检测到。
3. 改进状态转换的处理方式，可能通过使用适当的状态机。

#### [地址空间布局随机化（ASLR）](https://www.freebsd.org/status/report-2015-01-2015-03.html#Address-Space-Layout-Randomization-\(ASLR\))

| 链接                                                                                         |
| ------------------------------------------------------------------------------------------ |
| [HardenedBSD](https://hardenedbsd.org/)                                                    |
| [ASLR 测试请求](https://lists.freebsd.org/pipermail/freebsd-current/2015-February/054669.html) |
| [FreeBSD ASLR 代码审查](https://reviews.freebsd.org/D473)                                      |

联系方式：Shawn Webb <<shawn.webb@hardenedbsd.org>>\
联系方式：Oliver Pinter <<oliver.pinter@hardenedbsd.org>>

地址空间布局随机化（ASLR）是一种计算机安全技术，有助于减轻低级漏洞，如缓冲区溢出。ASLR 随机化运行应用程序的内存布局，以防止攻击者知道某个可利用漏洞在内存中的位置。

我们在过去几个月里一直致力于确保 ASLR 实现的健壮性。我们编写了一个手册页，并在 FreeBSD 的代码审查系统（Phabricator）中更新了补丁。我们的 ASLR 实现已经被 HardenedBSD 团队在生产环境中使用，且表现稳健。

接下来的任务是将基本系统应用程序编译为位置无关可执行文件（PIEs）。为了使 ASLR 有效，应用程序必须编译为 PIE，以便主二进制文件和共享库能够位于随机地址。由于构建基本系统中的库的复杂性，这部分工作可能会花费较长时间。即使应用程序没有编译为 PIE，拥有 ASLR 仍然可以帮助那些强制自己编译为 PIE 的应用程序（如 HardenedBSD 的 secadm）。

该项目由 SoldierX 赞助。

#### 待办事项

1. 在 11-CURRENT 上测试我们的补丁。

#### [现代 x86 平台支持和 VT-d](https://www.freebsd.org/status/report-2015-01-2015-03.html#Modern-x86-platform-support-and-VT-d)

联系方式：Konstantin Belousov <<kib@FreeBSD.org>>

现代 x86 平台包含多个架构增强功能。正在进行的工作旨在支持这些特性。

从 SandyBridge CPU 开始，Intel 引入了一种增强型本地中断控制器（APIC）模式，称为 x2APIC。与使用映射页不同，寄存器现在通过特殊的模型特定寄存器（MSR）读取和写入指令进行访问。这旨在支持虚拟化。通过不需要序列化、简化进程间中断（IPI）生成，访问开销也得到了降低。引入该功能的主要提交是 r278473，之后进行了一些修复。

中断结束（EOI）抑制是一种将 EOI 消息传递给输入/输出中断控制器（IO-APIC）的模式，其中对于电平触发中断，EOI 消息不会通过写入本地 APIC 进行广播，而是通过显式的 EOI 命令发送到源 IO-APIC。此优化减少了必须广播的 APIC 消息数量，应在所有现代 Intel 系统上使用。EOI 抑制的支持已提交至 r279319。

VT-d 中断重映射（IR）由硬件提供，VT-d 功能实现了这一点。它在从根复合体到北桥的过程中翻译中断消息，并允许控制中断传递而无需重新编程 MSI/MSI-X 寄存器或 IO-APIC。其原始目的旨在允许虚拟机监控程序安全地将设备中断编程委托给客操作系统。IR 还需要避免 IO-APIC 中的一些限制，并使中断重新平衡变得原子且透明。支持已提交为 r280260。

x2APIC 模式和 IR 都需要将 IPI 和设备中断发送到 LAPIC ID 大于 254 的处理器。相信唯一缺失的平台代码是解析 ACPI 多 APIC 描述表（MADT）中的“处理器本地 x2APIC 结构”和“本地 x2APIC NMI 结构”，这些结构报告 LAPIC IDs > 255，并处理启用了 x2APIC 模式的固件系统的启动。完成这项工作的难度应该不大，只要有访问高核数机器的权限即可。不过，在正式启用该支持之前，还需要完成对常见的机器无关代码的审核，以确保大型 CPU ID 得到正确处理。

还在进行其他工作：DMA 重映射单元（DMAR）驱动程序的分割域和上下文。当前，DMAR 驱动程序仅用于实现 busdma(9)，通过为每个翻译上下文分配专用域来完成。某些设备可能会发出带有多个来源 ID 的 PCIe 事务层包（TLPs），例如 PCIe/PCI 桥接器，或 PCIe 设备的虚拟函数，或者这些 TLPs 可能由于硬件错误而出现。为处理这些情况，必须使用一个域（共享翻译页表）处理多个上下文。

分割域和上下文还需要使 DMAR 驱动程序开始处理 bhyve 中的 PCI 直通，而不是当前由 bhyve 本身提供的较不完整实现。传递给客户的所有 PCIe 设备必须共享一个域。分割补丁已经编写并正在测试，正在形成用于管理域的外部接口。

VT-d 代码的稳定性工作仍在进行中。特别是，nvme(4) 和 ixgbe(4) 使用 busdma 接口的部分已进行调试和改进，并在大内存机器上进行了测试。

该项目由 FreeBSD 基金会赞助。

#### [纳秒文件时间戳](https://www.freebsd.org/status/report-2015-01-2015-03.html#Nanosecond-file-timestamps)

联系方式：Jilles Tjoelker <<jilles@FreeBSD.org>>\
联系方式：Sergey Kandaurov <<pluknet@FreeBSD.org>>

添加了两个新的系统调用，futimens() 和 utimensat()，使得能够以纳秒精度设置文件时间戳。各种实用程序，如 cp、mv 和 touch，已更新，以便使用新调用来保存和设置精确的时间戳。

stat() 和相关的系统调用已经返回纳秒精度的文件时间戳很长时间了，但在此之前，没有办法设置比微秒更精确的时间戳。

通过这些更改，用户将能够使用更精确的时间戳（sysctl vfs.timestamp\_precision=3），而不会出现例如文件复制（通过 cp -p）后显示的时间戳比原文件还要旧的异常情况。这对于使用文件时间戳进行缓存失效的 NFS 服务器尤其有用。

#### 待办事项

1. 在可能的情况下，修复仍然设置不准确时间戳的代码，通常是通过调用 futimes()、futimesat()、lutimes()、utime() 或 utimes()，并传入非空的 times 指针。可能出于某些原因（如受限的网络协议或文件格式）需要这样做，但仍有一些代码可以修复。

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

#### [FreeBSD 在更新版 ARM 开发板上的支持](https://www.freebsd.org/status/report-2015-01-2015-03.html#FreeBSD-on-newer-ARM-boards)

| 链接                                                                         |
| -------------------------------------------------------------------------- |
| [FreeBSD 在 Odroid-C1 上的支持](https://wiki.freebsd.org/FreeBSD/arm/Odroid-C1) |

联系方式：John Wehle <<john@feith.com>>\
联系方式：Ganbold Tsagaankhuu <<ganbold@FreeBSD.org>>

我们进行了必要的更改，以支持各种 Amlogic SoC 设备，特别是 aml8726-m6 和 aml8726-m8b SoC 的设备。aml8726-m6 SoC 用于如 Visson ATV-102 等设备，而 Hardkernel 的 ODROID-C1 开发板则使用 aml8726-m8b SoC。以下支持项已实现：

* 基本的 machdep 代码
* SMP
* 中断控制器
* 时钟控制驱动程序（即 gate）
* 引脚控制
* 定时器
* 实时时钟
* UART
* GPIO
* I2C
* SD 控制器
* SDXC 控制器
* USB
* 看门狗
* 随机数生成器
* PLL/时钟频率测量
* 帧缓冲

#### 待办事项

1. 使 DWC 驱动程序正常工作。

#### [FreeBSD/arm64](https://www.freebsd.org/status/report-2015-01-2015-03.html#FreeBSD/arm64)

| 链接                                                                               |
| -------------------------------------------------------------------------------- |
| [FreeBSD arm64 维基页面](https://wiki.freebsd.org/arm64)                             |
| [GitHub arm64 开发仓库](https://github.com/FreeBSDFoundation/freebsd/tree/arm64-dev) |

联系方式：Andrew Turner <<andrew@FreeBSD.org>>\
联系方式：Ed Maste <<emaste@FreeBSD.org>>\
联系方式：Zbigniew Bodek <<zbb@semihalf.com>>

FreeBSD arm64 移植的协作开发在上一季度取得了显著进展。FreeBSD 基金会正在与 ARM、Cavium、Semihalf 团队以及 Andrew Turner 合作，将 FreeBSD 移植到 arm64 架构，也称为 ARMv8 和 AArch64。

经过大量审查和优化，初步的一组更改已被提交到 FreeBSD-HEAD。这些初步支持的目标是 QEMU 和 ARM 基金会模型模拟器，能够启动并进入可用的多用户环境。

Cavium 的 ThunderX 平台是 FreeBSD arm64 移植的初始硬件参考目标。该平台目前能够启动并进入多用户模式，通过 PCIe 10 Gbps Ethernet NIC 挂载根文件系统通过 NFS。参考硬件已安装在 FreeBSD 测试实验室（由 Sentex Communications 托管）和 Semihalf 办公室中。

该项目由 FreeBSD 基金会、ARM 和 Cavium 赞助。

#### 待办事项

1. 将内核更改合并到 HEAD。
2. 完成剩余的用户空间和内核支持。
3. 生成可安装的映像。

#### [FreeBSD/EC2](https://www.freebsd.org/status/report-2015-01-2015-03.html#FreeBSD/EC2)

| 链接                                           |
| -------------------------------------------- |
| <http://www.daemonology.net/freebsd-on-ec2/> |

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

现在可以在源代码树中构建适用于 Amazon EC2 的 Amazon Machine Images（AMIs），通过 src/release 中的 make ec2ami 命令。该平台已功能齐全且稳定，并且在所有公共 EC2 区域都提供了预构建的映像。

Amazon Web Services 市场报告称，约有 400 用户正在运行约 800 个 FreeBSD EC2 实例。由于它仅计算通过 AWS 市场启动的实例，因此这是一个低估的数字。

#### 待办事项

1. 将 AMI 构建代码 MFC 到 stable/10，以便在 FreeBSD 10.2-RELEASE 中发布。
2. 完成 AMI 构建工作交接给发布工程团队。
3. 教授 blkfront 驱动程序使用间接段请求，以显著提高 I/O 性能。
4. 获取适用于 EC2“增强网络”中的 Intel 网络卡的 SR-IOV 驱动程序，以显著提高网络性能。

### [嵌套内核](https://www.freebsd.org/status/report-2015-01-2015-03.html#Nested-Kernel)

| 链接                                                                                                                      |
| ----------------------------------------------------------------------------------------------------------------------- |
| [该项目的主页，包含论文和构建说明链接。](http://nestedkernel.org/)                                                                         |
| [关于我们原型的会议论文，详细介绍了问题、设计、实现和评估。](http://web.engr.illinois.edu/~dautenh1/downloads/publications/asplos200-dautenhahn.pdf) |
| [关于嵌套内核的演示](http://prezi.com/in6qr3l92ffc/?utm_campaign=share\&utm_medium=copy)                                         |
| [HardenedBSD 分支的嵌套内核正在重构。](https://github.com/HardenedBSD/hardenedBSD/tree/hardened/9/kernsep)                          |

联系方式：Nathan Dautenhahn <<dautenh1@illinois.edu>>\
联系方式：Theodoros Kasampalis <<kasampa2@illinois.edu>>\
联系方式：Will Dietz <<wdietz2@illinois.edu>>

嵌套内核架构的研究是 Nathan 在伊利诺伊大学厄本那 - 香槟分校的博士论文工作的一部分。它试图改进传统的单体操作系统内核，在该架构中，内核中的任何一个漏洞都可能使攻击者获得完全的超级用户权限。嵌套内核操作系统架构通过在传统的单体内核内“嵌套”一个小型、隔离的内核来解决这个问题。这个“嵌套内核”对所有虚拟内存转换更新进行拦截，从而对物理内存实施保护，大大减少了内存访问控制执行的可信计算基。

我们通过对 Memory-Management Unit (MMU) 转换进行写保护，并将不受信任的内核部分降权，使 FreeBSD 在 x86-64 硬件上实现了嵌套内核架构，从而使整个操作系统，包括受信任和不受信任的组件，都能在最高硬件权限级别下运行。我们的实现天然地执行了内核代码完整性保护，同时仍允许动态加载内核模块，从而防御代码注入攻击。我们还通过引入写入中介和写入日志服务，展示了嵌套内核架构如何使内核开发者能够以单体内核无法做到的方式隔离内存，尽管从中获得安全收益需要添加尚未设计的策略。

嵌套内核原型的性能显示出适度的开销：Apache 平均不到 1%，sshd 平均 3.7%，内核编译平均 2.7%。总体而言，我们的结果和经验表明，嵌套内核设计可以被添加到现有的单体内核中，提供深度防御。

基本想法是，嵌套内核初始化系统，使所有页表都映射为只读。然后，从不受信任的内核部分移除所有 MMU 修改操作；通过写保护所有代码页，标记所有非代码页为不可执行（NX 位），并防止执行位于用户空间映射中的特权 MMU 操作（主管模式执行防护，SMEP），来强制执行运行时代码完整性。由于嵌套内核控制页表，它可以执行这些完整性属性，从而实现 MMU 的虚拟化。

这些链接包括一篇最近的会议论文，详细介绍了我们在 FreeBSD 9.0 上原型嵌套内核架构的设计、实现和评估。还有一个关于嵌套内核的演示链接，以及一个关于该项目的官方网站，提供源代码和构建说明。

我们非常希望获得关于嵌套内核设计的反馈，并就如何将其上游化进行讨论。

我们还希望获得更多的贡献者和对该项目的兴趣！嵌套内核有潜力增强商品操作系统的设计，而 FreeBSD 是目前使用的一个重要操作系统，具有很大的影响力。目前的实现只是一个研究原型，需要大量的工作才能使其准备好投入生产使用（请参见任务列表）。

最后，我们已经开发了一个接口，用于写保护内核中的数据结构，并正在征求对该服务的使用想法。论文的第 2.4 节详细介绍了接口，第 4 节展示了嵌套内核服务的一些简单使用。我们感兴趣的是如何使用嵌套内核保护关键的内核数据结构，防止恶意软件或仅仅是代码错误的影响。

该项目由伊利诺伊大学厄本那 - 香槟分校和 ONR 赞助，赞助号为 N00014-12-1-0552。

#### 待办事项

1. 完成核心机制的实现：验证 DMAP 是否得到正确保护，并确保我们没有使用超级页（我认为我们已经完成了，但需要完全验证），为所有非内核代码页提供完整的 NX 支持（如果堆栈被用来执行代码，我们可能需要特别考虑它），保护 IDT 和 SMM，添加 IOMMU 保护。我们还需要进行一些优化，将批量调用嵌套内核应用于进程创建（fork）和 mmap 操作。可以在论文中查看这些实现指令的动机。
2. 实现 SMP 功能并评估性能。
3. 为 FreeBSD-HEAD 移植和重构。当前的实现是一个研究原型，需要进行一些重构以使其清晰一致，并使其与现代版本的 FreeBSD 相关。
4. 嵌套内核隔离依赖于某些硬件指令，必须完全从内核的某些子集移除。因此，我们需要利用自动链接/加载技术，识别并移除来自不受信任内核组件的特权 MMU 操作，以使其在实践中可维护。
5. 对设计和实现进行详细审查，特别关注上游化的计划。

## [用户空间程序](https://www.freebsd.org/status/report-2015-01-2015-03.html#Userland-Programs)

#### [改进 libthr](https://www.freebsd.org/status/report-2015-01-2015-03.html#libthr-improvements)

联系方式：Konstantin Belousov <<kib@FreeBSD.org>>

历史上，在 FreeBSD 中，将 libthr.so 线程库动态加载到单线程进程中并不能正常工作。长期以来的解决方法是，如果有任何可能需要线程功能的情况，就始终将主二进制文件与 -lpthread 链接。这个项目将 libthr.so 转换为 libc 的插件，从而修复了阻止 libthr.so 动态加载的已知问题。

修复后，链接主二进制文件与 -lpthread 不再是必需的，但这样做并不会带来危害。不过，建议在移除 libpthread 并采用动态加载之前彻底测试。请注意，潜在的问题可能会非常微妙，并且在受影响的程序中表现出来时可能令人惊讶。

在旧版 libthr 中，关于动态加载存在以下问题，但通过此项工作已解决：

* 系统调用失败后出现无效的 errno 值。
* libthr 内部锁和被信号忽略的临界区出现问题。
* 尝试锁定互斥量时出现挂起。
* 线程取消未发生在保证取消点。

主更改已在 r276630 提交到 HEAD，许多后续更改已提交至 stable/10 中（r277317）。

该项目由 FreeBSD 基金会赞助。

### [迁移到 ELF 工具链工具](https://www.freebsd.org/status/report-2015-01-2015-03.html#Migration-to-ELF-Tool-Chain-tools)

| 链接                                                        |
| --------------------------------------------------------- |
| [FreeBSD LLDB 维基页面](http://elftoolchain.sourceforge.net/) |

联系方式：Ed Maste <<emaste@FreeBSD.org>>

ELF 工具链项目提供 BSD 许可证下的编译工具和库的实现，用于构建和分析 ELF 对象。该项目最初是作为 FreeBSD 的一部分开始的，后来成为一个独立项目，以鼓励更多开源开发者的参与。

ELF 工具链提供了一套与 GNU Binutils 套件等效的工具。该项目的目标是将这些工具导入到 FreeBSD 基本系统中，使我们能够拥有一套最新的、受维护的工具，同时为新的 CPU 架构（如 arm64）提供支持。

除了 libelf 和 libdwarf 库，ELF 工具链项目目前提供以下工具：

* addr2line
* nm
* readelf
* size
* strings
* strip (elfcopy)

ELF 工具链的 elfcopy 提供与 Binutils 的 objcopy 等效的功能，并接受相同的命令行参数。为了让它成为基本系统中所有 objcopy 用法的可行替代方案，它必须支持写入可移植执行（PE）格式二进制文件，这是 UEFI 启动代码使用的格式。

目前，ELF 工具链项目并未提供 as、ld 或 objdump 的替代工具。对于 FreeBSD，这些工具很可能会从 LLVM 项目中获取。

该项目由 FreeBSD 基金会赞助。

#### 待办事项

1. 向 elfcopy 添加缺失的功能，并迁移基本系统构建。
2. 修复通过模糊测试工具发现的问题。
3. 为独立调试文件提供自动支持。

### [LLDB 调试器](https://www.freebsd.org/status/report-2015-01-2015-03.html#The-LLDB-Debugger)

| 链接                                                 |
| -------------------------------------------------- |
| [FreeBSD LLDB 维基页面](https://wiki.freebsd.org/lldb) |

联系方式：Ed Maste <<emaste@FreeBSD.org>>

LLDB 是与 Clang/LLVM 相关的调试器项目。它支持 Mac OS X、Linux、FreeBSD 和 Windows 平台。它建立在 LLVM 项目的现有组件上，例如使用 Clang 的表达式解析器和 LLVM 的反汇编器。

作为 Clang 和 LLVM 升级的一部分，基本系统中的 LLDB 已更新到 3.6.0 版本。在上游代码库中，Justin Hibbits 为 PowerPC 平台添加了对实时和核心文件调试的支持，Ed Maste 为 FreeBSD/arm64 添加了核心文件支持。

该项目由 DARP/AFRL、SRI 国际公司和剑桥大学赞助。

#### 待办事项

1. 重新设计 LLDB 构建，使用 LLVM 和 Clang 共享库。
2. 将远程调试存根移植到 FreeBSD。
3. 添加对本地和核心文件内核调试的支持。
4. 改进对非 amd64 架构的支持。
5. 默认启用基本系统中的支持。

### [GDB 更新](https://www.freebsd.org/status/report-2015-01-2015-03.html#Updates-to-GDB)

| 链接                                                                        |
| ------------------------------------------------------------------------- |
| [kgdb 移植到 gdb 7.9](https://github.com/bsdjhb/gdb/tree/freebsd-7.9.0-kgdb) |

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

过去几个月，多个改进已合并到 GDB 的主分支，包括修复了跨信号跳板帧的堆栈展开问题、移除了 gcore 命令中的 procfs 依赖，并支持了 x86 上的 XSAVE 扩展（如 AVX 寄存器）。这些修复已经在现有的 devel/gdb Port 中作为针对 7.8 版本的补丁可用。

此外，在将 kgdb 移植到更新版本的 gdb 上也取得了进展。目前，仅移植了 amd64 后端的支持，但它在远程调试和崩溃转储调试方面都能正常工作。当前的 Port 一般与基本系统中的 kgdb 功能相当。kgdb 的计划是修复它，使其始终包括所有平台目标（这样它就可以默认支持跨调试远程目标）。在某个时刻，它也可能包括对崩溃转储的跨调试支持（这需要对 libkvm 进行更改）。

#### 待办事项

1. 整理 amd64 平台的 kgdb Port，并完成 i386 平台的移植。这包括修复这些特定平台的目标，以使它们支持远程目标的跨调试。
2. 为 devel/gdb Port 添加一个 KGDB 选项，以包含 kgdb 支持。
3. 移植其余平台特定的 kgdb 目标。
4. 为 FreeBSD 编写一个新的 1:1 线程目标，提交给上游。
5. 添加对调试 powerpc 向量寄存器的支持。

### [FreeBSD Ada Port](https://www.freebsd.org/status/report-2015-01-2015-03.html#FreeBSD-Ada-Ports)

| 链接                                              |
| ----------------------------------------------- |
| <http://home.gna.org/ghdl/>                     |
| <http://sourceforge.net/projects/ghdl-updates/> |

联系方式：John Marino <<marino@FreeBSD.org>>

目前有 51 个与 Ada 相关的 Port，但其中有两个将被弃用：基于 GCC 4.7 的 lang/gcc47-aux 和 ARMv5 的 BSD->android 交叉编译器（lang/gnatdroid-armv5）。前者与基于 GCC 4.9 的 lang/gcc-aux 没有优势，后者已经超过一年没有构建。Android 爱好者仍然可以使用 ARMv7 交叉编译器（lang/gnatdroid-armv7）。

新添加的 Port 是 lang/gcc5-aux，它包含来自即将发布的 gcc5 版本的 GNAT。这个编译器已经能够构建所有 Ada Port，除了 gtkada3（它会阻止 devel/gps，GNAT 编程工作室），并且预计 gtkada3 很快会修复。当 GCC5 发布时，Ada 框架将切换到使用 gcc5-aux 作为默认编译器。对于不能等待的人，可以通过在 /etc/make.conf 中添加 ADA\_DEFAULT=5 来立即使用，但这需要从源代码重新构建所有 Ada Port。

#### 待办事项

1. 将基于 Ada 的 GDHL（VHDL 模拟器）引入 Port。即将发布的 0.32 版本将基于 GCC 4.9，Port 将基于这个版本。

### [FreeBSD Python Ports](https://www.freebsd.org/status/report-2015-01-2015-03.html#FreeBSD-Python-Ports)

| 链接                                                     |
| ------------------------------------------------------ |
| [FreeBSD Python 团队页面](https://wiki.freebsd.org/Python) |
| [IRC 频道](irc://freebsd-python@irc.freenode.net)        |

联系方式：FreeBSD Python 团队 <<python@FreeBSD.org>>

FreeBSD Python 团队继续改善基于 Python 的软件在 FreeBSD 上的整体体验。移除了一些之前已弃用的代码和选项，提升了 Python Port 基础设施的可维护性。

CPython 解释器已更新至版本 2.7.9 和 3.4.3，Twisted 已更新至版本 15.0.0。

#### 待办事项

1. 弃用 Python 3 特定的 Port 重复项。
2. 更多任务请参见团队的维基页面（见链接）。
3. 有兴趣的人员可以在 IRC 的 #freebsd-python 频道与我们打招呼，并告诉我们他们的兴趣领域！

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

| 链接                                                           |
| ------------------------------------------------------------ |
| <http://www.freebsd.org/gnome>                               |
| [GNOME 开发仓库](https://github.com/freebsd/freebsd-ports-gnome) |
| <https://wiki.gnome.org/Projects/Jhbuild/FreeBSD>            |

联系方式：FreeBSD GNOME 团队 <<freebsd-gnome@freebsd.org>>

FreeBSD GNOME 团队负责维护 GNOME、MATE 和 CINNAMON 桌面环境及图形用户界面。GNOME 3 是 GNU 项目的一部分。MATE 是 GNOME 2 桌面的一个分支，CINNAMON 是一个使用 GNOME 3 技术但保留 GNOME 2 外观和感觉的桌面环境。

截至本季度末，我们已将 GNOME 和 CINNAMON 更新到它们各自分支的最新版本，分别为 3.14 和 2.4。

GNOME 3.16 于 2 月 25 日发布；我们已经将其移植到 FreeBSD。当前版本的 3.16 Port 在测试过程中发现了 pkg 的一个 bug，该问题影响了多个仓库的支持，并已迅速在 pkg 1.4.99.15 中修复。

在 GNOME 3.18 周期中，我们将与 x11 团队紧密合作，移植 libinput 并测试 Wayland。完成后，我们需要决定是否在稳定版本中启用 Wayland，可能还需要 xorg-server 1.16+ 的 XWayland 来支持 X 应用程序。预计 Wayland 将在 Port 中推出，直到 8.4-Release 达到生命周期结束。

#### 待办事项

1. GNOME 网站的更新工作正在进行中，尽管进展较慢。我们需要帮助来推进开发部分。
2. MATE 1.10 的移植工作正在进行中；最新的 1.9 版本已经在 mate-1.10 分支中提供。

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

| 链接                                                  |
| --------------------------------------------------- |
| <https://freebsd.kde.org/>                          |
| <https://freebsd.kde.org/area51.php>                |
| <https://wiki.freebsd.org/KDE>                      |
| <https://mail.kde.org/mailman/listinfo/kde-freebsd> |
| <https://github.com/tcberner/kde5>                  |

联系方式：FreeBSD KDE 团队 <<kde@FreeBSD.org>>

KDE on FreeBSD 团队专注于软件包管理，确保 KDE 和 Qt 在 FreeBSD 上的使用体验尽可能好。

首先，我们欢迎 Tobias Berner 加入 area51（KDE Port 暂存区）提交者的行列。他在我们的近期状态报告中经常被提到，终于获得了提交权限，可以访问我们的实验仓库。成为 area51 提交者通常是成为 kde@ Port 提交者的第一步。我们希望 Tobias 能够更轻松地修复和更新我们的 Port，并开始将他的 KDE Frameworks 5 Port 提交到 area51。

此外，本季度 Qt 5.4.1 被提交到 Ports 中。这标志着自 Qt 5 发布以来，首次将最新的上游稳定版本纳入 Ports！这一成就得益于我们为 Qt 5 Port 基础设施清理工作所做的大量努力，这项工作最早在 5.3 更新时就已开始，并在我们上一期状态报告中提到。

最后，Alonso Schaich 最终将 KDE4 Port 的更新提交到 Port 中，这个更新已在我们的实验仓库中存在了一段时间，现在已更新到最新的 4.14 版本，4.14.3。

总体而言，本季度我们更新了以下 Port：

* Calligra 2.9.1（提交到 area51）
* CMake 3.1.0、3.1.1、3.1.3（提交到 Port）
* DigiKam 4.2.0（提交到 Port）、4.8.0（提交到 area51）
* PyQt 4.11.3 + QScintilla 2.8.4 + sip 4.16.5（提交到 Port）、sip 4.16.7（提交到 area51）
* Qt 5.4.1（提交到 Port）

#### 待办事项

1. 更多精力放在 Qt5 相关的 Port 上：KDE Frameworks 5（目前由 Tobias Berner 负责）和 PyQt 5。

### [FreeBSD 上的图形堆栈](https://www.freebsd.org/status/report-2015-01-2015-03.html#The-Graphics-stack-on-FreeBSD)

| 链接                                                                      |
| ----------------------------------------------------------------------- |
| [图形堆栈路线图和支持的硬件矩阵](https://wiki.freebsd.org/Graphics)                    |
| [图形堆栈团队博客](http://blogs.freebsdish.org/graphics/)                       |
| [GitHub 上的 Port 开发树](https://github.com/freebsd/freebsd-ports-graphics) |

联系：FreeBSD 图形团队 <<freebsd-x11@FreeBSD.org>>

在官方 Ports 中，Mesa Port（libglapi、libGL、libEGL、libglesv2、gbm 和 dri）保持与最新的 Mesa 10.4.x 版本接近。

在开发树中（见 GitHub 链接），Mesa 10.5 的更新已发布，并对 Port 本身进行了若干改进和清理。现在，所有 Port 都共享相同的配置标志和构建依赖项。由于每个 Port 都从头开始构建 Mesa，这确保了所有库和驱动程序之间的一致性。这至少解决了两个问题：

* 一个长期存在的 bug：drm EGL 平台现在可以正常工作，这意味着我们将能够在 X.Org 服务器中启用 Glamor（基于 OpenGL 的 2D 加速引擎）。例如，这对于 Radeon HD 7000 及更高版本的 GPU 提供 2D 加速是必需的。
* Clover，即 Mesa 的 OpenCL 实现，现在已经可用；请参见下一段。

这种统一的缺点是，所有 Port 将依赖于 LLVM。此项工作正在 mesa-10.5 分支中进行。

得益于 Johannes Dieterich 的帮助，OpenCL 方面取得了进展。Clover（Mesa 实现）和 Beignet（Intel 实现）已作为 Port 添加到开发树中。它们已在 Radeon 和 Intel GPU 上成功测试，但请参见 wiki 获取最新状态。最初在 opencl 分支中开发，现在所有内容已合并到 mesa-10.5 分支中。由于这需要上面解释的统一，因此它尚未进入官方 Ports。

一个新的 Port drm-kmod 已被添加到官方 Ports 中。它为 FreeBSD 9.3-RELEASE 和 9.3-STABLE 提供了更新的 drm2、i915kms 和 radeonkms 内核模块。与原始模块的唯一不同是 i915 驱动程序增加了硬件上下文支持。xf86-video-radeon 和 xf86-video-intel 驱动程序已被修补，以便在这些版本的 FreeBSD 上使用 drm-kmod Port。这将使我们能够去除 Mesa Port 的二重性（libGL/libEGL/dri），只支持一个版本（正如在 mesa-10.5 分支中已经不存在 Mesa 9.1.7）。目前尚无该部分功能完成的预计时间。

在开发 Ports 中，xserver-next 分支已从 xorg-server 1.16 更新为 1.17。再次说明，这取决于前面的步骤：移除 Mesa 9.1.7。

对各种 X.Org 组件的更新工作正在完成。除了对多个 X.Org Port 的更新外，此更新还移除了 X.Org 库中仍然存在的 .la 文件。此外，xf86-video-intel 驱动程序将收到补丁，以允许它与更新的 xorg-server（大于 1.14）一起编译。大多数 X.Org 组件的更新由 Matthew Rezny 提交。

字体安装位置经过了重构，并简化了 plist 中处理字体的方式。现在，所有字体都按照 XDG 规则安装到 /usr/local/share/fonts。此外，制作字体 Port 应该变得更加容易：更多的方面，如调用 fc-cache(1)，由 Ports 框架处理。因此，字体 Port 的一致性得到了大大提高。

在内核中，DRM 设备无关代码已更新，以与 Linux 3.8 匹配。合并到 10-STABLE 版本的操作正在进行中。i915kms 内核驱动程序也已更新，并已合并到 10-STABLE。

这两项更新就位后，i915 驱动程序的第二次更新工作将开始：这次它将与 Linux 3.8 同步，就像其他 DRM 子系统一样，并包括 Haswell 支持。该工作最近才开始。我们希望它能在 FreeBSD 10.2-RELEASE 发布时准备好。

在第二季度，我们将与 GNOME 团队合作，移植 libinput 并测试 Wayland。目前我们知道 GTK+3 和 GNOME 3 完全支持 Wayland。我们还需要测试来自 xorg-server 1.16+ 的 Xwayland，以便在 Wayland 桌面上支持 X 应用程序。如果你知道更多使用 Wayland 的软件，请告诉我们。目前没有计划移植 Weston 参考实现的 Wayland 合成器。

#### 待办事项

1. 请参阅“图形”wiki 页面以获取最新信息。

### [Wine/FreeBSD](https://www.freebsd.org/status/report-2015-01-2015-03.html#Wine/FreeBSD)

| 链接                                                      |
| ------------------------------------------------------- |
| [Wine wiki](http://wiki.freebsd.org/Wine)               |
| [Wine on amd64 wiki](http://wiki.freebsd.org/i386-Wine) |
| [Wine 主页](http://www.winehq.org/)                       |

联系：Gerald Pfeifer <<gerald@FreeBSD.org>>\
联系：David Naylor <<dbn@FreeBSD.org>>

本季度，wine-devel Port 有五次更新，紧跟上游开发，同时也更新了辅助 Port（wine-gecko-devel 和 wine-mono-devel）：

* 稳定版本：1.6.2（1 个 Port 修订）
* 开发版本：1.7.34 到 1.7.39

一项重要的发展是 Wine64 的引入（即运行 64 位 Windows 应用程序的能力）。目前，通过 wine-devel Port 可以使用该功能。此时，它与 i386-wine-devel Port 是互斥的，但我们计划将这两个 Port 整合，以提供完整的 Wine 体验在 amd64 上。i386-wine-devel Port 为 FreeBSD 8.4、9.1+、10.1+ 和 CURRENT 构建了 amd64 的软件包。

已完成的工作包括：

* 提交 8 个补丁修复 Wine 在 FreeBSD 上的问题——非常感谢 Gerald 和 David。
* 为稳定版本的 emulators/wine Port 增加了可选的 V4L 支持。
* 选项性地在构建 Wine 时启用 X 复合扩展（如果选择了 X11 选项）。
* 支持需要 LD 被尊重的替代工具链。
* 修复并整理了 pkg-plist。
* 支持 Wine64。
* 更新了 patch-nvidia.sh 脚本，以支持任意后缀。
* 移除了 patch-nvidia.sh 中对旧 pkg\_ 工具的支持。
* 开发了一个补丁修复 getdirentries(2) 的使用。这修复了 Steam、EVE Online 和其他应用程序。

我们要感谢所有贡献反馈和补丁的志愿者。

Wine 的未来开发将集中在以下几个方面：

* 将 wine-compholio 重命名为 wine-staging（以匹配上游开发）。
* 将 getdirentries(2) 补丁添加到 wine-devel Port。
* 重新开发并上游化 getdirentries(2) 补丁。
* 重新开发并上游化 kernel32 Makefile 补丁。
* 为 i386-wine Port 添加对 pkg 1.5 的支持（目前与库的冲突阻止了此支持）。
* 添加对 WoW64 的支持：
  * 将 i386-wine Port 缩减为仅包含 WoW64 所需的组件。
  * 将 i386-wine Port 重命名为 wow64。
  * 在 amd64 上构建时，使 wine Port 依赖于 wow64 Port。
  * 调查并验证 Wine64 与 WoW64 之间的交互。
  * 调查 wow64 Port（需要预编译）的更新方法，并了解与 wine Port 的更新方式。

维护和改进 Wine 是一项重大的工作，它直接影响 FreeBSD 上的最终用户（包括许多游戏玩家）。如果你有兴趣帮助我们，请联系我们。我们非常欢迎接受补丁、提出关注领域或进行讨论。

#### 待办事项

1. FreeBSD/amd64 集成（请参见 [i386-Wine wiki](http://wiki.freebsd.org/i386-Wine)）。
2. 移植 WoW64。

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

| 链接                              |
| ------------------------------- |
| <https://wiki.freebsd.org/Xfce> |

联系：FreeBSD Xfce 团队 <<xfce@FreeBSD.org>>

Xfce 是一个面向 Unix 和类 Unix 平台（如 FreeBSD）的自由软件桌面环境。它旨在快速、轻量，同时保持视觉上的吸引力和易用性。

本季度对 Xfce 团队来说是激动人心的时刻。经过两年以上的开发，我们将 Xfce 桌面环境的 4.12 版本导入了 Ports。

总体而言，我们更新了以下 Port：

* Xfce 核心（4.12）
* audio/xfce4-mpc-plugin（0.4.5）
* deskutils/xfce4-tumbler（0.1.31）
* deskutils/xfce4-xkb-plugin（0.7.1）
* editors/mousepad（0.4.0）
* graphics/ristretto（0.8.0）
* multimedia/xfce4-parole（0.8.0）
* sysutils/garcon（0.4.0）
* sysutils/xfce4-diskperf-plugin（2.5.5）
* sysutils/xfce4-fsguard-plugin（1.0.2）
* sysutils/xfce4-power-manager（1.4.4）
* sysutils/xfce4-wavelan-plugin（0.5.12）
* textproc/xfce4-dict-plugin（0.7.1）
* www/xfce4-smartbookmark-plugin（0.4.6）
* x11/libexo（0.10.4）
* x11-clocks/xfce4-timer-out-plugin（1.0.2）
* x11-fm/thunar（1.6.6）
* x11-themes/gtk-xfce-engine（3.2.0）

同时，我们切换到了 USES 框架，并增加了一个新的插件，名为 audio/xfce4-pulseaudio-plugin。

我们还跟进了不稳定版本（可在我们的实验性仓库中找到）：

* x11/xfce4-dashboard (0.3.91)
* x11/xfce4-notes-plugin (1.8.0 beta)

以下文档补丁已准备好：

* [PR197878](https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=197878)，更新 Porter's Handbook 中的 Xfce 部分
* [D1305](https://reviews.freebsd.org/D1305)，FAQ

#### 待办事项

1. 在 multimedia/xfce4-parole 中添加对 Compact Disc Digital Audio (CD-DA) 的支持。
2. 通过 xfconf-query 添加一个新属性，允许用户更改 x11/xfce4-dashboard 中快速启动图标的灰度值（此功能仅在不稳定版本中可用）。

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

### [更多 Michael Lucas 的 FreeBSD 书籍](https://www.freebsd.org/status/report-2015-01-2015-03.html#More-Michael-Lucas-FreeBSD-books)

| 链接                                               |
| ------------------------------------------------ |
| <http://blather.michaelwlucas.com/archives/2352> |

联系：Michael Lucas <<mwlucas@michaelwlucas.com>>

FreeBSD 存储书籍的进展比预期的要慢。这是个复杂的项目。

看起来 ZFS 将成为两本书的主题。第一本书将涵盖基础的 ZFS，第二本书将涵盖高级案例，如实时和冷备份、共享、性能以及在不常见的 GEOM 提供者上使用 ZFS。更多细节请参见链接部分。

Allan Jude（allanjude@）正在共同撰写 ZFS 书籍。当他报名时，他没想到面前的任务会如此庞大……

## [杂项](https://www.freebsd.org/status/report-2015-01-2015-03.html#Miscellaneous)

### [FreeBSD 基金会](https://www.freebsd.org/status/report-2015-01-2015-03.html#The-FreeBSD-Foundation)

| 链接                                                                                             |
| ---------------------------------------------------------------------------------------------- |
| [基金会官网](http://www.freebsdfoundation.org/)                                                     |
| [FreeBSD Journal](http://freebsdjournal.com/)                                                  |
| [BSDNow PC-BSD 之旅](http://www.bsdnow.tv/episodes/2015_03_11-the_pcbsd_tour_ii)                 |
| [BSDNow “From the Foundation”](http://www.bsdnow.tv/episodes/2015_02_25-from_the_foundation_2) |

联系：Deb Goodkin <<deb@FreeBSDFoundation.org>>

基金会于 3 月 15 日迎来 15 周年庆！我们通过启动春季募捐活动来庆祝这一纪念日，目标是吸引 500 名新的社区投资者。与周年庆同时，BSDNow 对 Justin Gibbs 进行了采访，讨论了我们的历史和未来计划，作为 PC-BSD 之旅的一部分。BSDNow 还对 Ed Maste 进行了采访，讨论 FreeBSD 项目和流程，内容在“From the Foundation”节目中播出。

我们是 AsiaBSDCon 的白金赞助商，并有五名团队成员参加了会议。Kirk McKusick 教授了为期两天的 FreeBSD 内核教程，并就日志化软更新进行了演讲，George Neville-Neil 就 FreeBSD 中的网络性能进行了讲解；George 还教授了为期两天的教程《通过 DTrace 看 FreeBSD 内部》。这些都是与 Robert Watson 合作进行的，旨在为学术界和实践者提供 FreeBSD 的教育材料。Dru 进行了关于 FreeNAS 9.3 高级开源存储的讲座，Ed Maste 则进行了关于 FreeBSD 中 LLDB 调试器的讲解。

我们成为了 BSDCan 的白金赞助商，并为 FreeBSD 贡献者批准了六项旅行赞助。我们还赞助了 Michael Dexter 参加 SCALE，以便他能就虚拟化做一场演讲。

除了上述会议外，我们还在以下会议上推广了 FreeBSD：

* [USENIX FAST '15](https://www.usenix.org/conference/fast15)
* [FOSDEM](https://fosdem.org/2015/)
* [SCALE](http://www.socallinuxexpo.org/scale/13x/)

我们收到了来自 Xinuos、Netgate 和 Tarsnap 的 FreeBSD 证言并进行了发布。

我们启动了“From the Trenches”系列，提供 FreeBSD 贡献者的故事，分享他们在 FreeBSD 上的工作。Glen Barber 撰写了一篇名为《ZFS 与如何制作脚炮》的文章。Glen 还调查了一个在升级后重启时出现的死锁问题（PR 195458），并发布了每周的 11-CURRENT 和 10-STABLE 快照构建。

FreeBSD 期刊目前已有超过 8300 名订阅者，并且续订率达到了 98%。我们现在发布了一些免费的 [FreeBSD 期刊文章](https://www.freebsdfoundation.org/journal/articles)。我们还为每一期杂志创建了登录页面，方便推广。

我们开始筹备渥太华供应商与开发者峰会，同时还计划在秋季于东海岸举办另一个尚未正式宣布的活动。

我们的开发人员和项目赞助者在过去的一个季度内负责了大量功能改进和 bug 修复。我们有九个个人报告，展示了基金会赞助的项目在多个领域为 FreeBSD 项目提供支持。

其中一个项目是位于墨尔本斯威本大学的研究硕士项目：为 FreeBSD 实现多路径 TCP（MPTCP）。PCIe 热插拔项目是一个个人项目赞助。FreeBSD/arm64 项目代表了一项合作开发工作，基金会促进了这个由多个参与者共同进行的项目。

此外，还有一些项目是基金会工作人员直接负责的。在本季度报告中，我们列出了多个此类项目：Secure Boot、基于 autofs 的自动挂载守护进程、动态可加载的 libthr、Intel DMA 重映射，以及迁移到 ELF 工具链项目工具等。

此外，拥有长期永久员工的一个好处是能够继续维护项目，并在固定时间表之外贡献改进。过去一个季度，基金会员工在 UEFI 启动过程、vt(4) 系统控制台、内核 iSCSI 堆栈、虚拟内存子系统等多个领域作出了改进。
