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

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

## 简介

欢迎阅读未来的季度报告！嗯，至少是 2020 年的第一个季度报告。上一些报告中提到的新时间表仍然有效，这也带我们来到了这份报告，它涉及了 2020 年 1 月到 3 月的时间段。

正如你从这份报告中看到的，我们度过了一个非常活跃的季度，内核、用户空间、文档、Ports 以及第三方项目都有了重大变化，包括从漏洞修复、安全修复、新特性到性能改进和优化等各方面。

由于这份报告还涉及了疫情的开始，值得注意的是，快速查看 svn 日志会发现，源代码提交的总体数量并没有下降，文档提交也保持稳定，Ports 则呈现上升趋势。

我们希望大家和你们的亲人都能尽可能安全，并希望我们能够通过共同努力一起度过这一难关。

——Daniel Ebdrup Jensen, <debdrup@freebsd.org>

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

来自各个官方和半官方团队的报告条目，详见 [管理页面](https://www.freebsd.org/administration.html)。

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

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

FreeBSD 基金会是一家 501(c)(3) 非营利组织，致力于支持和促进 FreeBSD 项目及全球社区的发展。资金来自个人和公司捐款，用于赞助和管理软件开发项目、会议和开发者峰会，并为 FreeBSD 贡献者提供旅行赞助。基金会采购并支持硬件，以改善和维护 FreeBSD 基础设施，提供资源来提升安全性、质量保证和发布工程工作；发布营销材料来推广、教育和宣传 FreeBSD 项目；促进商业供应商与 FreeBSD 开发者之间的合作；最后，代表 FreeBSD 项目执行合同、许可协议和其他需要认可法律实体的法律安排。

以下是我们上个季度所做的帮助 FreeBSD 的工作亮点：

#### 一般事项

```ini
The FreeBSD Foundation
3980 Broadway St. STE #103-107
Boulder, CO 80304
USA
```

2 月，在加利福尼亚州伯克利董事会举行了全天的会议，这也是 FreeBSD 的发源地！我们制定了未来 2 年的战略计划，计划包括我们希望支持的软件开发项目和一些教育计划。

疫情对基金会的影响。我们为所有员工制定了在家工作的政策，并且对员工的旅行实施了临时禁令。我们继续支持社区和项目的工作，但由于某些优先事项的变化和部分员工面临有限的儿童看护服务，我们的一些工作和回应有所延迟。

#### 合作伙伴关系与商业用户支持

我们帮助促进商业用户与 FreeBSD 开发者之间的合作。我们还与公司会面，讨论他们的需求并将这些信息反馈给项目组。在第一季度，Deb Goodkin 与商业用户在澳大利亚的 LinuxConfAu、比利时的 FOSDEM 和美国的 SCALE18x 会议中会面。这些会议为我们提供了与商业和个人用户及 FreeBSD 贡献者交流的绝佳机会。这不仅对上述目标有益，还帮助我们了解 FreeBSD 的一些应用场景。除了在会议上与商业用户会面外，我们还通过电子邮件和电话继续进行讨论。

#### 筹款工作

上个季度我们筹集了 57,000 美元！感谢所有捐赠者，尤其是在此经济危机时期，我们非常感动，在当前有许多人、动物和企业需要帮助的情况下，仍有个人和组织支持我们的工作。我们还要特别感谢 Tarsnap、VMWare 和 Stormshield，它们通过白银级的捐赠为我们带来了引领作用。我们希望其他组织能效仿他们，支持我们继续支持 FreeBSD。

我们完全依赖捐赠资金，这些资金用于软件开发工作以改善 FreeBSD、全球范围内的 FreeBSD 宣传、保障 FreeBSD 安全、改进持续集成、赞助 BSD 相关和计算机会议、为项目提供法律支持以及其他许多领域。

请考虑捐款帮助我们继续并扩大对 FreeBSD 的支持：[https://www.FreeBSDfoundation.org/donate/](https://www.freebsdfoundation.org/donate/)。

我们还有伙伴计划，为我们的较大商业捐赠者提供更多的福利。详细信息请访问 [https://www.FreeBSDfoundation.org/FreeBSD-foundation-partnership-program/](https://www.freebsdfoundation.org/FreeBSD-foundation-partnership-program/) 并与你的公司分享！

#### 改进操作系统

基金会通过我们的全职技术人员、承包商和项目赞助接受者，支持软件开发项目，以改进 FreeBSD 操作系统。他们维护和改进关键的内核子系统，添加新功能并修复问题。

在过去的一个季度中，FreeBSD 基本系统源代码仓库中有 273 个提交标记为 FreeBSD 基金会赞助，占季度基系统提交的约 12%。其中许多是赞助或员工项目的一部分，这些项目在本 FreeBSD 季度报告中有单独的条目，但基金会的员工和承包商（Ed Maste、Konstantin Belousov、Mark Johnston、許立文）也通过持续的错误修复、构建修复和一些不值得单独列出的杂项改进来支持该项目。

Ed 在 FreeBSD 构建基础设施的多个部分做出了杂项改进，主要是由于淘汰过时的 GCC 4.2.1 的工作。这包括删除 *LLVM\_LIBUNWIND* 选项（现在总是设置）以及删除未使用的 gperf、gcov 和 GPL 设备树编译器（dtc）。Ed 提交了 Linuxulator 的 sendfile 支持，该功能由前实习生 Bora Özarslan 提交，并且测试并提交了多个提交的错误修复，涉及 Microchip USB-Ethernet 控制器 *if\_muge* 驱动程序。Ed 还将基本系统中的 OpenSSH 版本更新到 7.9p1，附带额外更新正在进行中，并在本季度处理了多个安全公告。

Konstantin Belousov 和 Mark Johnston 在本季度内，均在基金会赞助下执行了大量的代码审查工作。这些工作帮助了 FreeBSD 社区的开发者以及在使用 FreeBSD 的公司中的开发者将他们的工作整合到 FreeBSD 中。

除了本报告其他部分介绍的工作外，Konstantin 还继续了他往常的错误修复和改进工作。本季度的工作包括低级 x86 支持、修复 sendfile 错误、文件系统和 VFS 错误修复，以及其他几十项杂项改进。额外的工作包括支持 Hygon x86 CPU 的各种提交以及对运行时链接器（rtld）直接执行模式的改进。

Mark Johnston 继续从事 [Syzkaller](https://syzkaller.appspot.com/freebsd) 系统调用模糊测试工具的工作，并修复了 Syzkaller 报告的许多问题。Mark 处理了大量提交的错误报告，并在许多情况下提交了附带的补丁或开发了修复程序。Mark 还处理了几十个 Coverity Scan 报告。

Mark 的其他更改包括 arm64 大系统扩展（LSE）原子操作、低级 arm64 和 x86 工作、虚拟内存（VM）工作，以及 syslog、lagg(4) 链路聚合驱动程序、构建可复现性等方面的错误修复或其他改进。

許立文提交了对基本系统中多个测试的改动，例如关闭已知失败的测试（这些测试由 PR 跟踪）、pkgbase 相关的测试修复和其他改进。

#### 持续集成和质量保证

基金会提供了一名全职员工，致力于改善我们的自动化测试、持续集成和整体质量保证工作。

在 2020 年第一季度，基金会的员工继续改进项目的 CI 基础设施，与贡献者合作修复失败的构建和测试案例。我们正在为基金会购买的新机器建立 CI 阶段环境。我们还与项目中的其他团队合作，满足他们的测试需求。例如，我们新增了一个任务，用于在 Linuxulator 上运行 LTP（Linux 测试项目），以验证基金会赞助的 Linux 模拟工作中的改进。我们还与许多外部项目和公司合作，以提高它们对 FreeBSD 的支持。

有关已完成的工作项目和详细信息，请参见本报告中的 FreeBSD CI 部分。

#### 支持 FreeBSD 基础设施

基金会提供硬件和支持，以改善 FreeBSD 的基础设施。在上个季度，我们继续支持全球各地的 FreeBSD 硬件。我们为马来西亚的镜像站购买了一台服务器，并签署了伊利诺伊州新 NYI 联合托管设施的谅解备忘录。NYI 慷慨地将其作为实物捐赠提供给项目。

#### FreeBSD 宣传与教育

我们的大部分工作致力于为项目做宣传。这包括推广其他人对 FreeBSD 所做的工作；制作宣传资料，教导人们了解 FreeBSD，并帮助让开始使用 FreeBSD 或贡献项目的路径更容易；以及参加活动并邀请其他 FreeBSD 贡献者自愿组织 FreeBSD 活动、在 FreeBSD 展位上当值以及进行 FreeBSD 演讲。

FreeBSD 基金会赞助了全球多个会议、活动和峰会。这些活动可以是与 BSD 相关的、开源的，或者是面向弱势群体的技术活动。我们赞助与 FreeBSD 相关的活动，帮助提供一个知识分享的场所，推动合作项目，并促进开发者与商业用户之间的合作。这些都有助于提供一个健康的生态系统。我们还支持与 FreeBSD 无关的活动，以推广和提高 FreeBSD 的认知度，增加 FreeBSD 在不同应用中的使用，并吸引更多的贡献者加入项目。

请查看我们上个季度进行的部分宣传与教育工作：

* 组织并在澳大利亚黄金海岸举办的首次 FreeBSD Mini-Conf LinuxConfAu 2020 上进行了演讲，并赞助了会议本身。[回顾可以在这里找到](https://www.freebsdfoundation.org/blog/freebsd-miniconf-at-lca2020-conference-recap/)。
* 在比利时布鲁塞尔的 FOSDEM '20 上进行了 BSD Dev Room 演讲，并与其他社区成员一起在展位上代表 FreeBSD。[详细信息请参阅](https://www.freebsdfoundation.org/blog/fosdem-2020-conference-recap/)。
* 在澳大利亚墨尔本代表 FreeBSD 参加了 Apricot 2020，并赞助了该活动。
* 美国加利福尼亚州圣克拉拉的 USENIX FAST '20 活动的行业合作伙伴赞助商。
* 赞助了新加坡的 FOSSASIA 2020。
* 承诺在加利福尼亚州帕萨迪纳的 SCALE 18x 举行 FreeBSD Day。
* 在 SCALE 18x 举办了“FreeBSD 入门工作坊”，并进行了演讲，代表 FreeBSD 参加了博览会，并举行了“Why FreeBSD is Me”主题的 BoF 讨论会。[查看会议回顾](https://www.freebsdfoundation.org/blog/scale-18x-conference-recap/)。

我们继续制作 FreeBSD 宣传材料，帮助人们推广 FreeBSD。了解更多我们在 2019 年为 [FreeBSD 做宣传](https://www.freebsdfoundation.org/blog/2019-in-review-advocacy/) 的努力。

除了本报告开发项目更新部分的信息外，花点时间查看最新的更新博客：

* [POWER to the People: Making FreeBSD a First Class Citizen on POWER](https://www.freebsdfoundation.org/blog/power-to-the-people-making-freebsd-a-first-class-citizen-on-power/)。
* [开发项目更新：工具链现代化](https://www.freebsdfoundation.org/blog/project-update-toolchain-modernization/)。

阅读更多关于我们在会议上的冒险，查看我们的 [月度通讯](https://www.freebsdfoundation.org/news-and-events/newsletter/) 中的会议回顾和旅行报告。

我们通过出版专业制作的 FreeBSD 期刊来帮助全球教育 FreeBSD。正如之前所提到的，FreeBSD Journal 现在是免费的出版物。[了解更多并访问最新期刊](https://www.freebsdfoundation.org/journal/)。

[你可以在这里找到我们参加的活动和即将举行的活动的更多信息](https://www.freebsdfoundation.org/news-and-events/)。正如我们中大多数人所经历的那样，SCALE 是我们几个月内最后参加的活动。然而，我们已经在着手制作更多的在线教程和操作指南，以帮助更多人尝试 FreeBSD。与此同时，请查看我们已经提供的操作指南！

我们与新的网站开发者继续合作，帮助我们改进网站。已经开始了工作，使社区成员更容易找到信息，并提高网站的效率。

#### 法律/FreeBSD 知识产权

基金会拥有 FreeBSD 商标，并且有责任保护它们。我们还为核心团队提供法律支持，调查出现的问题。

请访问 [http://www.FreeBSDfoundation.org/](http://www.freebsdfoundation.org/) 了解我们如何支持 FreeBSD，以及我们如何为你提供帮助！

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

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

FreeBSD 核心团队是 FreeBSD 的管理机构。

* 核心团队批准了 Alfredo Dal'Ava J.nior 的源代码提交权限。Alfredo 一直在进行 powerpc64 支持的工作。Justin Hibbits (jhibbits) 将指导 Alfredo。
* 核心团队批准了 Ryan Moeller 的源代码提交权限。Ryan 一直在进行 ZoL 移植到 FreeBSD 的工作。Alexander Motin (mav) 和 Matt Macy (mmacy) 将指导 Ryan。
* 核心团队批准了 Nick O'Brien 的源代码提交权限。Nick 一直在 Axiado 从事 RISC-V 工作。Kristof Provost (kp) 和 Philip Paeps (philip) 将指导 Nick。
* 核心团队批准了 Richard Scheffenegger 的源代码提交权限。Richard 一直在贡献 TCP 相关工作。Michael Tuexen (tuexen) 将指导 Richard，Rodney Grimes (rgrimes) 将担任共同指导人。
* 核心团队批准了 Aleksandr Fedorov 的源代码提交权限。Aleksandr 一直在测试和审查 bhyve 网络代码。Vincenzo Maffione (vmaffione) 将指导 Aleksandr，John Baldwin (jhb) 将担任共同指导人。
* 核心团队请求退役 freebsd-mobile@ 列表，因为它几乎只接收垃圾邮件。postmaster@ 已经完成了核心团队的请求。
* 核心团队批准了某些项目服务的第三方身份验证，附带一些条件。例如，对于谷歌的身份验证，用户必须使用启用了双因素身份验证的 FreeBSD.org 账户。对于 GitHub，我们将启用并强制为我们的组织启用多因素身份验证。
* 核心团队发起的 Git 过渡工作组在 2020 年第一季度继续开会，报告仍在等待中。

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

| 链接                                                                               |
| -------------------------------------------------------------------------------- |
| [FreeBSD 11.4-RELEASE 时间表](https://www.freebsd.org/releases/11.4R/schedule.html) |
| [FreeBSD 12.2-RELEASE 时间表](https://www.freebsd.org/releases/12.2R/schedule.html) |
| [FreeBSD 开发快照](https://download.freebsd.org/ftp/snapshots/ISO-IMAGES/)           |

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

FreeBSD 发布工程团队负责设定和发布 FreeBSD 官方项目版本的发布计划，宣布代码冻结并维护相应的分支等。

FreeBSD 发布工程团队发布了即将到来的 11.4-RELEASE 和 12.2-RELEASE 的时间表。

Glen Barber 花了大量时间更新各种构建工具，增加对来自 Subversion 和 Git 的构建支持。这项工作仍在进行中，因为有很多相互关联的动态部分。

此外，在整个季度中，还发布了多个开发快照构建，涉及 *head*、*stable/12* 和 *stable/11* 分支。

这项工作大部分得到了 Rubicon Communications, LLC（netgate.com）和 FreeBSD 基金会的赞助。

### [集群管理团队](https://www.freebsd.org/status/report-2020-01-2020-03.html#Cluster-Administration-Team)

| 链接                                                                   |
| -------------------------------------------------------------------- |
| [集群管理团队成员](https://www.freebsd.org/administration.html#t-clusteradm) |

联系方式：集群管理团队 <<clusteradm@FreeBSD.org>>

FreeBSD 集群管理团队负责管理项目所依赖的机器，这些机器用于同步项目的分布式工作和通信。在本季度，团队完成了以下工作：

* 升级所有的 ref- 和 universe- 机器
* 南非镜像（JINX）已上线
* 美国西雅图镜像（TUK）的包服务已上线
* 持续的系统管理工作：
  * 为新提交者创建账户。
  * 关键基础设施的备份。
  * 跟进第三方软件的安全更新。

进行中的工作：

* 设置马来西亚（KUL）镜像
* 设置巴西（BRA）镜像
* 设置阿姆斯特丹（PKT）镜像
* 审查服务 Jail 和服务管理员的操作。
* 构建 aarch64 和 powerpc64 包的基础设施
  * PowerPC64 Power9 上的 NVME 问题，阻止双插槽机器作为 pkg 构建器使用。
  * 为 pkg 构建器进行驱动器升级测试（固态硬盘），由 FreeBSD 基金会赞助。
  * Aarch64 参考机器的启动问题。
* 新的 NYI.net 赞助的位于芝加哥地区的共址空间。
* 为 git 工作组准备资源。
* 寻找更多的镜像提供商
  * <https://wiki.freebsd.org/Teams/clusteradm/generic-mirror-layout>
  * <https://wiki.freebsd.org/Teams/clusteradm/tiny-mirror>

### [持续集成](https://www.freebsd.org/status/report-2020-01-2020-03.html#Continuous-Integration)

| 链接                                                               |
| ---------------------------------------------------------------- |
| [FreeBSD Jenkins 实例](https://ci.freebsd.org/)                    |
| [FreeBSD 硬件测试实验室](https://ci.freebsd.org/hwlab)                  |
| [FreeBSD CI 工件归档](https://artifact.ci.freebsd.org/)              |
| [FreeBSD CI 每周报告](https://hackmd.io/@FreeBSD-CI)                 |
| [FreeBSD Jenkins 维基](https://wiki.freebsd.org/Jenkins)           |
| [托管 CI 维基](https://wiki.freebsd.org/HostedCI)                    |
| [第三方软件 CI](https://wiki.freebsd.org/3rdPartySoftwareCI)          |
| [与 freebsd-testing@ 相关的工单](https://preview.tinyurl.com/y9maauwg) |
| [FreeBSD CI 仓库](https://github.com/freebsd/freebsd-ci)           |

联系方式：Jenkins 管理员 <<jenkins-admin@FreeBSD.org>>\
联系方式：許立文 <<lwhsu@FreeBSD.org>>

联系方式：[freebsd-testing 邮件列表](https://lists.freebsd.org/mailman/listinfo/freebsd-testing)\
联系方式：EFNet 上的 IRC #freebsd-ci 频道

FreeBSD CI 团队维护着 FreeBSD 项目的持续集成系统及相关任务。CI 系统定期检查提交的更改是否能够成功构建，并执行各种测试和结果分析。构建任务的工件会存档在工件服务器中，以便进行进一步的测试和调试需求。CI 团队成员会检查失败的构建和不稳定的测试，并与该领域的专家合作，修复代码或调整测试基础设施。这些努力的详细信息可以在 [每周 CI 报告](https://hackmd.io/@FreeBSD-CI) 中找到。

在 2020 年第一季度，我们继续与项目中的贡献者和开发者合作，满足他们的测试需求，并继续与外部项目和公司合作，提升他们对 FreeBSD 的支持。

重要更改：

* 所有的 -head 任务都在使用 clang/lld 工具链
* 所有的 -head 测试都在使用 base 中的 kyua
* RISC-V 任务现在生成完整的磁盘映像并在 QEMU 中运行测试，使用 OpenSBI
* freebsd-doc 任务还检查 [www.freebsd.org](http://www.freebsd.org) 的构建

新增任务：

* [FreeBSD-head-amd64-test\_ltp](https://ci.freebsd.org/job/FreeBSD-head-amd64-test_ltp/)
* [FreeBSD-head-powerpc64-images](https://ci.freebsd.org/job/FreeBSD-head-powerpc64-images/)
* [FreeBSD-head-powerpc64-testvm](https://ci.freebsd.org/job/FreeBSD-head-powerpc64-testvm/)

进行中的工作：

* 在 [这里](https://hackmd.io/@FreeBSD-CI/freebsd-ci-todo) 收集和整理 CI 任务和想法
* 设置 CI 阶段环境并将实验性任务放入其中
* 在裸机硬件上实现自动化测试
* 为 -CURRENT 添加 drm Port 构建测试
* 在 [FreeBSD-ci 仓库](https://github.com/freebsd/freebsd-ci/pulls) 中测试和合并拉取请求
* 规划运行 ztest 和网络栈测试
* 通过托管 CI 解决方案帮助更多第三方软件在 FreeBSD 上进行 CI
* 添加非 x86 测试任务
* 添加与外部工具链相关的任务
* 向硬件实验室添加更多硬件

有关更多工作进展信息，请查看与 freebsd-testing@ 相关的工单，并加入相关工作。\
赞助方：FreeBSD 基金会

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

| 链接                                                                                                      |
| ------------------------------------------------------------------------------------------------------- |
| [关于 FreeBSD Ports](https://www.freebsd.org/ports/)                                                      |
| [如何贡献 Ports](https://www.freebsd.org/doc/en_US.ISO8859-1/articles/contributing/ports-contributing.html) |
| [FreeBSD Ports 监控](http://portsmon.freebsd.org/index.html)                                              |
| [Ports 管理团队](https://www.freebsd.org/portmgr/index.html)                                                |

联系方式：René Ladan <<portmgr-secretary@FreeBSD.org>>

联系方式：FreeBSD Ports 管理团队 <<portmgr@FreeBSD.org>>

Ports 管理团队负责监督 Ports 的整体方向、构建软件包以及人员事务。以下是上个季度的情况。

在上个季度，Port 数量稳定在 39,000 个。目前有超过 2,400 个开放的 PR，其中 640 个没有分配。上个季度，共有 173 名提交者向 HEAD 分支提交了 8146 次提交，52 名提交者向 2020Q1 分支提交了 357 次提交。这意味着 PR 数量有所增长，尽管提交者的活跃度保持大致不变。

像往常一样，人员有所更替。我们欢迎了 Loïc Bartoletti (lbartoletti@)、Mikael Urankar (mikael@)、Kyle Evans (kevans@，他已经是 src 提交者) 和 Lorenzo Salvadore (salvadore@，我们之前认识他，因为他为你阅读的这些报告做了编译工作)。我们向 dbn@ 和 theraven@ 道别，希望以后能再见到他们。

在基础设施方面，添加了 USES=qca，移除了 USES=zope。后者也因为与 Python 3 不兼容而被移除，同时 portmgr 正在从 Ports 中移除 Python 2.7。这意味着当前依赖于 Python 2.7 的所有 Port 需要更新以支持 Python 3，或者被移除。

经过多人的长时间努力，Xorg 从 1.18 更新到了 1.20 版本系列。此外，网页浏览器也进行了更新：Firefox 升级到 75.0 版本，Firefox ESR 升级到 68.7.0 版本，Chromium 升级到 80.0.3987.149 版本。包管理器本身也更新到了 1.13.2 版本。

antoine@ 在上个季度进行了 29 次实验性运行，更新了 KDE、poppler、pkg 和构建工具；并测试与 src 变更的兼容性：移除基于 procfs 的调试功能、修复 TLS 对齐问题，仅在 i386 和 Power 架构的 libc 中包含 libssp\_nonshared.a。

### [FreeBSD 图形团队状态报告](https://www.freebsd.org/status/report-2020-01-2020-03.html#FreeBSD-Graphics-Team-status-report)

| 链接                                                |
| ------------------------------------------------- |
| [项目 GitHub 页面](https://github.com/FreeBSDDesktop) |

联系方式：FreeBSD 图形团队 <<x11@freebsd.org>>\
联系方式：Niclas Zeising <<zeising@freebsd.org>>

FreeBSD X11/图形团队维护 FreeBSD 图形栈的底层部分。这包括图形驱动、图形库（如 MESA OpenGL 实现）、X.org xserver 及其相关库和应用程序，以及 Wayland 和相关库与应用程序。

上个季度最大的亮点是长期期待的 `xorg-server` 更新至 1.20 版本。在多方努力数年后，终于推出了 `xorg-server` 1.20.7 版本。随着这一更新，最显著的变化是，FreeBSD 12 及以后版本默认改为使用 udev/evdev 后端来处理输入设备，如鼠标和键盘。与此同时，OpenGL 库实现 `mesa` 也改为默认使用 DRI3，而非旧版的 DRI2。

这些更新在首次提交时引发了一些问题，尤其是键盘相关问题。但在 Michael Gmelin 等人和邮件列表的帮助下，大多数问题迅速得到解决。不幸的是，自此不再支持 nVidia 图形驱动的 304 版本。

自此更新后，xorg-server 已经更新至 1.20.8，这是最新的上游版本。

除了这次更新外，我们还在不断努力保持各种 Port 和软件包 drm-kmod 的更新，主要是响应 FreeBSD CURRENT 中的变更以及 Intel i915 驱动中发现的安全问题。

我们还按需进行更新，以确保图形和输入栈保持最新并正常运行，同时弃用并移除了几个不再使用的旧驱动、应用程序和库。

我们也继续按计划举行每两周一次的会议。

有兴趣帮助的人可以通过 <x11@FreeBSD.org> 邮件列表联系我们，或通过我们的 gitter 聊天（<https://gitter.im/FreeBSDDesktop/Lobby）与我们交流。我们还可以在> EFNet 上的 #freebsd-xorg 频道找到。

我们还在 GitHub 上有一个团队区域，可以找到我们的工作仓库： (<https://github.com/FreeBSDDesktop>)

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

这些项目跨越多个类别，从内核和用户空间到 Ports 和外部项目。

### [NFS over TLS 实现](https://www.freebsd.org/status/report-2020-01-2020-03.html#NFS-over-TLS-implementation)

联系方式：Rick Macklem <<rmacklem@freebsd.org>>

为提高 NFS 的安全性，我预计很快将成为 RFC 的一份互联网草案，规定使用 TLS 1.3 加密所有通过 Sun RPC 连接进行的 NFS 数据流量。

尽管 NFS 可以使用 sec=krb5p 来加密传输数据，但这需要 Kerberos 环境，因此并未被广泛采用。此外，它还需要在软件中进行加解密，因为只有 RPC 消息 NFS 参数被加密。由于内核 TLS 能够利用硬件加速提高性能，并且不需要 Kerberos，待有可用的实现，NFS over TLS 可能会得到更广泛的应用。

由于 FreeBSD 的内核 TLS 要求数据以 ext\_pgs mbufs 的形式传输，因此到目前为止，大部分工作集中在修改构建协议参数的 NFS 代码，以便选择性地使用 ext\_pgs mbufs。对于接收的 ext\_pgs mbufs 也进行了编码更改，尽管接收内核 TLS 可能不需要这些更改。

内核 RPC 也已经被修改，以执行 STARTTLS Null RPC，并进行回调到用户空间守护进程，执行 SSL\_connect()/SSL\_accept()，因为内核 TLS 并不执行这个初始握手。到目前为止，只在服务器上实现了自签名证书，而不要求客户端有证书。

对于 NFS 客户端预期拥有签名证书的情况，仍需要完成工作。特别是，对于没有固定 IP 地址或 DNS 名称的客户端，正确的解决方案尚不清楚。目前的代码已经准备好进行测试，但需要内核 TLS 支持接收和发送。<jhb@freebsd.org> 正在为接收方面的内核 TLS 编写补丁。

待接收端内核 TLS 可用，存储在 subversion 中的 base/projects/nfs-over-tls 代码将需要第三方测试，并由熟悉 TLS 的人员进行安全评估。

### [Kyua 测试框架导入](https://www.freebsd.org/status/report-2020-01-2020-03.html#Import-of-the-Kyua-test-framework)

| 链接                                                 |
| -------------------------------------------------- |
| [FreeBSD 测试套件](https://wiki.freebsd.org/TestSuite) |

联系方式：Brooks Davis <<brooks@FreeBSD.org>>

FreeBSD 测试套件使用 Kyua 测试框架来运行测试。

历史上，Kyua 是从 Ports (`devel/kyua`) 安装的。虽然这种方式对于主流架构没有问题，但在新架构上可能会引发启动问题，并且在仿真环境或基于 FPGA 的系统中，包的安装非常慢。通过将其纳入 FreeBSD 基本系统，我们可以避免这些问题。

我们希望这一举措能够促进嵌入式平台的测试，并简化在持续集成系统中的测试过程。

我们目前计划保留 Port `devel/kyua`，用于服务没有此框架的 FreeBSD 版本，并作为开发版本。

赞助商：DARPA

### [更新 Linux 兼容层](https://www.freebsd.org/status/report-2020-01-2020-03.html#Linux-compatibility-layer-update)

联系方式：Edward Tomasz Napierala <<trasz@FreeBSD.org>>

本季度的工作主要集中在源代码清理和简化调试缺失功能的过程。然而，也有一些用户可见的变化：添加了对 `TCP_CORK` 的支持，这是 Nginx 所要求的，添加了对参数 `MAP_32BIT` 的支持，修复了来自 Ubuntu Bionic（**译者注：18.04 LTS**）的 Mono 二进制文件，修复了影响 CentOS 8 的 glibc 2.30 版本及以上的 DNS 解析问题。

现在作为 FreeBSD 持续集成基础设施一部分运行的 Linux 测试项目包含了 Open POSIX 测试套件。

仍有很多工作要做：

* 有一些补丁需要审查，这些补丁添加了 [扩展属性支持](https://reviews.freebsd.org/D13209) 和 [fexecve(2) 系统调用](https://reviews.freebsd.org/D10275)，需要完成并提交
* 目前有超过 [400 个失败的 LTP 测试](https://ci.freebsd.org/job/FreeBSD-head-amd64-test_ltp/)。其中一些是错误的正面结果，有些是易于修复的错误，另外一些则需要添加新的系统调用。任何帮助都欢迎提供。

赞助商：FreeBSD 基金会

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

联系方式：Mark Johnston <<markj@FreeBSD.org>>\
联系方式：Michael Tuexen <<tuexen@FreeBSD.org>>

有关 syzkaller 的简介，请参见 2019q1 季度报告中的 syzkaller 条目。

通过 syzkaller 本季度发现并修复了若干内核 bug，主要集中在网络栈和文件描述符表代码中。对这些 bug 的调查促成了调试设施和断言的改进，例如在 SCTP 堆栈中的改进。syzkaller 的重现器已被添加到 Peter Holm 的 stress2 测试套件中，帮助确保回归问题能够快速被发现。

由 backtrace.io 托管的 syzkaller 实例（参见 2019q3 报告）在测试 syzkaller 改进和发现 bug 上非常有用。尽管 Google 运行了一个专门针对 FreeBSD 的 syzkaller 实例 [targeting FreeBSD](https://syzkaller.appspot.com/freebsd)，但运行多个实例被证明是有益的，因为它们最终会构建不同的语料库，从而发现不同但有所重叠的 bug。

已增加对多个新系统调用的模糊测试支持，包括新的 copy\_file\_range() 和 \_\_realpathat() 系统调用，以及 Capsicum 系统调用。同时，也进行了一些工作，审查现有的系统调用定义，以确保涵盖 FreeBSD 特有的 POSIX 系统调用扩展。正在进行的工作包括将目标扩展到 Linux 模拟层，并收集内核转储，以便通过收集无法重现的崩溃来帮助诊断和修复问题。

赞助商：backtrace.io

赞助商：FreeBSD 基金会

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

内核子系统/功能、驱动程序支持、文件系统等的更新。

### [if\_bridge](https://www.freebsd.org/status/report-2020-01-2020-03.html#if_bridge)

联系方式：Kristof Provost <<kp@FreeBSD.org>>

当前的 if\_bridge 实现使用单个互斥锁来保护其内部数据结构。因此，它的性能远远不如可能的水平。这对于希望运行许多 vnet jail 或将虚拟机桥接在一起的用户来说尤其重要。

作为该项目的一部分，已经为 if\_bridge 添加了多个新测试。这些测试通常对于验证任何锁定更改非常有用，并且也将有助于防止未来更改中的回归问题。这些测试位于 /usr/tests/sys/net/if\_bridge\_test。

当前的工作集中在调查是否可以利用 ConcurrencyKit epoch 代码来优化数据路径（即 `bridge_input()`、`bridge_output()`、`bridge_forward()` 等）。

赞助商：FreeBSD 基金会

### [sigfastblock(2)](https://www.freebsd.org/status/report-2020-01-2020-03.html#sigfastblock\(2\))

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

Rtld 服务需要是异步信号安全的。这是必要的，例如，为了在信号处理程序中提供有效的符号绑定。

对于线程化进程，libthr 会拦截所有用户安装的信号处理程序，并在 rtld 或 libthr 处于受保护代码段时保存信号和相关上下文。

在非线程化进程中，通过改变线程的信号屏蔽来提供异步安全。实际上，这比 libthr 的拦截方法更好，因为信号会在正确的上下文中传递，而不是 libthr 尝试稍后重建它。然而，不幸的副作用是，每个 rtld 调用都需要两个系统调用，一个用于设置屏蔽，另一个用于恢复它。通常，这会在每个进程启动时增加大约 40 次或更多的系统调用。更糟糕的是，典型语言运行时异常处理系统使用的 rtld 服务也有信号屏蔽操作的成本。

新增的 sigfastblock(2) 系统调用允许线程将内存位置指定为快速信号屏蔽。如果该位置包含非零值，内核将把线程的状态解释为“所有可屏蔽的信号都已屏蔽”。此功能极大地提高了 FreeBSD 上异常处理的速度。

由于信号可能会中断可中断的睡眠，因此初始实现会在每次系统调用入口时读取屏蔽字。这是为了确保当信号被该字屏蔽时，用户空间不会看到伪造的 EINTR/ERESTART 错误。如果内核缓存了过时的屏蔽字值，它会中断睡眠，但然后 ast 会看到正确的屏蔽并不会传递待处理的信号。

有一些担忧认为读取该字会导致系统调用微基准测试的减速，特别是在带有 SMAP 的机器上。原因是 SMAP 要求所有用户空间访问都由 STAC/CLAC 指令对括起来，而这些指令实际上是串行化的（这并非架构性要求，但所有当前的微架构都这样做）。决定是消除对该字的读取，代价是可能会返回伪造的 EINTR 错误。由于 sigfastblock(2) 不应是对用户可用的服务，它仅假定用于 rtld 和 libthr 实现，因此影响应最小。

赞助商：FreeBSD 基金会

### [arm64 LSE 原子指令](https://www.freebsd.org/status/report-2020-01-2020-03.html#arm64-LSE-atomic-instructions)

联系方式：Mark Johnston <<markj@FreeBSD.org>>

对 EC2 Graviton 2 实例上一些性能异常的调查结果，支持在 FreeBSD 内核中使用大系统扩展（LSE）原子指令。

LSE 是 ARMv8.1 中规定的强制性 ISA 扩展。它由一组新的原子指令组成，当 LSE 没有实现时，它取代了 Load-Linked/Store-Conditional（LL/SC）指令对。该扩展出现在多个 ARMv8 服务器平台中，包括 Cavium ThunderX2 和 AWS Graviton 2。新指令提供了显著更好的可扩展性。

一组新的补丁修改了 FreeBSD 内核，以检测 LSE 的支持，并在所有 CPU 实现扩展时，动态选择基于新指令的 atomic(9) 实现。最初的 atomic(9) 实现由 Ali Saidi 提供。在 64-vCPU Graviton 2 实例上的一些基准测试显示，内核构建的墙钟时间减少了约 4%，系统 CPU 时间减少了约 15%。

一些 ARMv8 多处理器系统实现了异构 CPU 架构，称为 big.LITTLE，其中使用了多种处理器类型。令人惊讶的是，这类系统可能只在其部分 CPU 上实现 LSE，在这种情况下，内核无法使用 LSE 指令。因此，FreeBSD 当前会等到所有处理器都上线后再选择 atomic(9) 实现，这排除了使用 ifuncs 提供动态选择的可能。

目前，atomic(9) 对 LSE 的使用仅限于内核。未来的项目将扩展到用户空间，使得 FreeBSD 系统库能够在 LSE 指令可用时利用这些指令。

赞助商：FreeBSD 基金会

赞助商：亚马逊

### [FreeBSD 在 Microsoft HyperV 和 Azure 上](https://www.freebsd.org/status/report-2020-01-2020-03.html#FreeBSD-on-Microsoft-HyperV-and-Azure)

| 链接                                                                    |
| --------------------------------------------------------------------- |
| [FreeBSD 在 微软 Azure 上的 Wiki](https://wiki.freebsd.org/MicrosoftAzure) |
| [FreeBSD 在微软 HyperV 上的 Wiki](https://wiki.freebsd.org/HyperV)         |

联系方式：FreeBSD 集成服务团队 <<bsdic@microsoft.com>> 联系方式：Wei Hu <<whu@FreeBSD.org>> 联系方式：許立文 <<lwhsu@FreeBSD.org>>

Wei 正在为 FreeBSD 开发 HyperV Socket 支持。HyperV Socket 提供了一种无需网络即可通过公共套接字接口让 HyperV 主机和客户机进行通信的方式。Azure 中的一些功能要求客户机支持 HyperV Socket。

有关 HyperV Socket 的详细信息，请参见 [这里](https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/user-guide/make-integration-service)。

进行中的工作可以 [在这里](https://reviews.freebsd.org/D24061) 查看。

该项目由微软赞助。

Li-Wen 正在为 Azure 上的 FreeBSD 发布代码，涉及 -CURRENT 和 12-STABLE 分支。12.1-RELEASE 在 Azure 上的发布也在进行中。

进行中的工作可以 [在这里](https://reviews.freebsd.org/D23804) 查看。

该项目由 FreeBSD 基金会赞助。

### [FreeBSD 在 ARM Morello 平台上的应用](https://www.freebsd.org/status/report-2020-01-2020-03.html#FreeBSD-on-the-ARM-Morello-platform)

| 链接                                                                                         |
| ------------------------------------------------------------------------------------------ |
| [Arm Morello 板](https://www.cl.cam.ac.uk/research/security/ctsrd/cheri/cheri-morello.html) |
| [CHERI 项目](https://www.cl.cam.ac.uk/research/security/ctsrd/cheri/)                        |

联系方式：Andrew Turner <<andrew@FreeBSD.org>> 联系方式：Ruslan Bukin <<br@FreeBSD.org>> 联系方式：Brooks Davis <<brooks@FreeBSD.org>> 联系方式：John Baldwin <<jhb@FreeBSD.org>> 联系方式：Robert Watson <<rwatson@FreeBSD.org>>

CHERI（能力硬件扩展 RISC 指令）扩展了常规的硬件指令集架构（ISA），增加了新的架构特性，以启用细粒度的内存保护和高度可扩展的软件分区。CHERI 内存保护功能使得历史上不安全的编程语言，如 C 和 C++，能够进行适应性修改，从而提供强大、兼容且高效的防护，抵御当前广泛利用的许多漏洞。CHERI 的可扩展分区功能使操作系统（OS）和应用程序代码能够进行细粒度的分解，从而在当前架构无法支持的方式下限制安全漏洞的影响。CHERI 是一种混合能力架构，它能够将架构能力与常规的基于 MMU 的架构和微架构、以及基于虚拟内存和 C/C++ 的常规软件堆栈相结合。这种方法允许在现有生态系统中进行逐步部署，我们已经通过硬件和软件原型验证了这一点。

2019 年 10 月 18 日，Arm 宣布了 Morello，一款实验性的 CHERI 扩展、多核、超标量的 ARMv8-A 处理器、系统芯片（SoC）以及原型板，预计将在 2021 年底推出。Morello 是英国数字安全设计挑战（DSbD）计划的一部分，该计划获得了英国工业战略挑战基金（UKRI）的支持，其中包括 Arm 对该计划的超过 5000 万英镑的承诺。该计划旨在以大规模方式测试和验证 CHERI 扩展到 ARM ISA 的效果，“成功的概念预计将进入架构中。”Morello 板计划于 2021 年第三季度发货。

在过去十年里，我们开发了 CheriBSD，这是一个支持 CHERI 的 FreeBSD 版本。我们的公开工作曾在 MIPS64 和最近的 RISC-V 上进行。Andrew 还开发了一个针对早期版本 Morello ISA 的移植，我们将在模拟器和编译器可用时将其合并到我们的公共仓库中。

Morello 板基于 Arm Neoverse N1 平台，派生自 N1SDP 开发平台。（AWS Graviton2 系统也基于 N1 核心。）Ruslan 和 Andrew 目前正在努力启用 N1 和 N1SDP 的所有相关功能，以为 Morello 的工作提供一个稳固的基线。这些功能包括 PCI 根复合体、系统内存管理单元（SMMU）和 CoreSight。我们正在尽可能将这些功能上游提交到 FreeBSD。

赞助商：DARPA，UKRI

### [NXP ARM64 SoC 支持](https://www.freebsd.org/status/report-2020-01-2020-03.html#NXP-ARM64-SoC-support)

联系方式：Marcin Wojtas <<mw@semihalf.com>>

联系方式：Artur Rojek <<ar@semihalf.com>>

联系方式：Dawid Gorecki <<dgr@semihalf.com>>

Semihalf 团队开始为 [NXP LS1046A SoC](https://www.nxp.com/products/processors-and-microcontrollers/arm-based-processors-and-mcus/qoriq-layerscape-arm-processors/qoriq-layerscape-1046a-and-1026a-multicore-communications-processors:LS1046A) 开发 FreeBSD 支持。

LS1046A 是四核 64 位 ARMv8 Cortex-A72 处理器，集成了数据包处理加速和高速外设，包括 10 Gb 以太网、PCIe 3.0、SATA 3.0 和 USB 3.0，广泛应用于网络、存储、安全和工业领域。

自上次更新以来已完成：

* 清理并将支持代码基于 FreeBSD-HEAD 进行重定基。为上游提交准备功能：
  * QorIQ 平台时钟生成器驱动
  * LS1046A 时钟生成器驱动
  * QorIQ 板的 GPIO 支持
  * QorIQ LS10xx AHCI 驱动
  * VF610 I2C 控制器支持
  * TCA6416 GPIO 扩展器
  * Epson RX-8803 RTC
  * QorIQ LS10xx SDHCI 驱动

待办事项\*将开发的功能上游提交。预计此项工作将在 2020 年第二季度提交/合并到 HEAD。

赞助商：阿尔斯通集团

### [ENA FreeBSD 驱动更新](https://www.freebsd.org/status/report-2020-01-2020-03.html#ENA-FreeBSD-Driver-Update)

| 链接                                                                                    |
| ------------------------------------------------------------------------------------- |
| [ENA README](https://github.com/amzn/amzn-drivers/blob/master/kernel/fbsd/ena/README) |

联系方式：Michal Krawczyk <<mk@semihalf.com>>

联系方式：Maciej Bielski <<mba@semihalf.com>>

联系方式：Marcin Wojtas <<mw@semihalf.com>>

ENA（弹性网络适配器）是亚马逊网络服务（AWS）虚拟化环境中的智能网卡。ENA 驱动程序支持多个传输和接收队列，能够处理高达 100 Gb/s 的网络流量，具体取决于所使用的实例类型。

自上次更新以来已完成：

* 将驱动程序上游更新到 v2.1.1，引入：
  * 修复 LLQ 模式中的错误，该模式在使用多个 IO 队列时会导致竞争条件。

进行中的工作：\*ENA v2.2.0 发布的最后调整，新增支持：

* 为即将推出的硬件特性（如 Rx 偏移、报告 Tx 丢包）增加驱动支持
* 添加 sysctl 调优选项以配置 IO 队列数
* 创建具有可选大小回退的 IO 队列
* 重构 drbr 和 Rx 环大小的配置方式，使其更稳定和健壮
* 新的 HAL 版本
* 其他小修复和改进

赞助商：亚马逊公司

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

更新特定平台的功能并引入对新硬件平台的支持。

### [FreeBSD/powerpc 项目](https://www.freebsd.org/status/report-2020-01-2020-03.html#FreeBSD/powerpc-Project)

联系方式：Mark Linimon <<linimon@FreeBSD.org>>\
联系方式：Justin Hibbits <<jhibbits@FreeBSD.org>>\
联系方式：Piotr Kubaj <<pkubaj@FreeBSD.org>>

FreeBSD/powerpc 项目持续发展。

除了上述人员，我们还要感谢 adalava、bdragon、luporl 和 mikael 等人的贡献。

关键要点：

* 在 -CURRENT 分支上，所有平台已切换到 LLVM 10.0 编译器和 lld10。因此，ld.bfd 已从基础代码中移除。
* 在 powerpc64 上，-CURRENT 已切换到 ELFv2 ABI。以前使用 GCC 或带 ELFv1 ABI 的 LLVM 的 -CURRENT 版本不再受到支持。
* 在 powerpc64 FreeBSD-STABLE（11 和 12）上，这些平台仍然使用过时的 gcc4.2.1 编译器。注意：已从 -CURRENT 源代码树中移除该版本的 GCC。对该配置的支持现在处于“尽力而为”状态。
* 在 powerpc（32 位）上，ABI 没有像 powerpc64 那样改变，因此升级应该比 powerpc64 更容易。

硬件状态：

* aacraid(4) 驱动已为大端字节序修复，感谢 luporl。这意味着购买了 SAS 选项的 Talos 用户现在可以使用板载的 SAS。
* ixl(4) 驱动也已为大端字节序修复，同样感谢 luporl。

软件状态：

* 由于 -CURRENT 切换到 LLVM/ELFv2，ifuncs 可用，这意味着当运行在支持 VSX 指令的处理器上时，我们现在可以使用优化的 memcpy/bcopy 和 strncpy 函数。
* powerpc64 现在能够在没有 Huge Pages 支持的情况下在 QEMU 上运行。
* virtio 驱动已修复。
* 内核 minidump 已修复。

软件包状态：

* 可用于 powerpc64/12（季度）的 FreeBSD.org 软件包集已经发布。-quarterly 构建已经从 12.0 更新到 12.1，因 12.0 被弃用。第一个更新的构建已经完成，提供 29776 个软件包。
* 我们目前正在将包构建器升级到最新的 -CURRENT。因此，当前可用的 -CURRENT 软件包仍为 ELFv1，这些软件包不可用。如需更多信息，请联系 Mark Linimon。
* mesa 已切换到 llvm90，修复了某些问题。
* firefox 及相关 Port 的工作仍在继续。
* 每天都有更多 Port 修复被提交。

团队感谢 IBM 借给我们两台 POWER8 和一台 POWER9 机器，感谢俄勒冈州立大学（OSU）提供的托管服务。同时，我们也感谢 clusteradm 团队保持 Tyan POWER8 机器在线，这些机器托管在 [NYI](https://www.nyi.net/)。

另外，Piotr 想感谢 FreeBSD 基金会赞助他的个人 Talos 服务器，感谢 Raptor（通过其 IntegriCloud 子公司）借给我们一台服务器，talos.anongoth.pl 就运行在这台服务器上。

### [FreeBSD/RISC-V 项目](https://www.freebsd.org/status/report-2020-01-2020-03.html#FreeBSD/RISC-V-Project)

| 链接                                     |
| -------------------------------------- |
| [Wiki](https://wiki.freebsd.org/riscv) |

联系方式：Ruslan Bukin <<br@FreeBSD.org>>\
联系方式：Mitchell Horne <<mhorne@FreeBSD.org>>\
联系方式：John Baldwin <<jhb@FreeBSD.org>>\
联系方式：Kristof Provost <<kp@FreeBSD.org>>\
联系方式：Philip Paeps <<philip@FreeBSD.org>>

联系方式：[freebsd-riscv 邮件列表](https://lists.freebsd.org/mailman/listinfo/freebsd-riscv)\
联系方式：IRC #freebsd-riscv 频道（freenode）

自上次 RISC-V 项目状态报告以来，已经过去了一年。在此期间，RISC-V 移植受到了更多关注，获得了各种改进。

RISC-V 项目引入了两位新的源码提交者。我们欢迎 Jessica Clarke（jrtc27@），她是 CheriBSD 的成员，以及 Nick O'Brien（nick@），来自 Axiado。

去年的一些亮点：

* 在 SiFive 的 Hifive Unleashed 开发板上的启动
* 支持 OpenSBI 固件和版本 0.2 的 SBI 规范
* 为 HiFive Unleashed 添加 UART、SPI 和 PRCI 设备驱动

上个季度，默认编译器和链接器已切换到 clang/lld。这需要我们进行少量的集成更改，但主要得益于上游对 RISC-V LLVM 后端的改进。LLVM 对 RISC-V 的支持在 [LLVM 9](https://lists.llvm.org/pipermail/llvm-dev/2019-September/135304.html) 中正式推出，LLVM 10 带来了更多的改进。预计 LLVM 后端将继续成熟，因为目前有许多方积极参与其开发。GCC 仍然作为 RISC-V 的外部工具链得到支持。

[HEAD 的 CI 工作](https://ci.freebsd.org/job/FreeBSD-head-riscv64-build/) 已更新为使用 clang/lld 工具链，未来将添加 GCC 工作。CI 系统中构建的 RISC-V 磁盘映像现在包含完整的基本系统，并可在 [CI 产物服务器](https://artifact.freebsd.org/) 上获取，以供进一步测试。CI 测试作业已更新为在 qemu 中使用 OpenSBI。正在进行为 RISC-V 在 CI 系统中运行 FreeBSD 测试套件的工作。

在 RISC-V 上支持 ports 框架方面取得了一些进展，直到最近，RISC-V Port 大部分未经过测试。首先，`emulators/qemu-user-static-devel` 更新，添加了对 RISC-V 64 位 ABI 的支持，允许通过 `poudiere(8)` 进行交叉编译。其次，改进了对软浮点 ABI riscv64sf 的检测。运行硬浮点或软浮点 ABI 的系统现在可以本地编译和运行 Port。目前，一小部分 Port 可以成功构建，未来几个月我们将致力于将其扩展到包括一组关键 Port（例如 python 或 perl）。

CheriBSD 项目在本季度首次移植到 RISC-V。为 Spike 和 QEMU 模拟器添加了对 CHERI ISA 的初步支持，并在 CheriBSD 端进行了必要的更改。目前，CheriBSD RISC-V 内核已启动，大多数静态编译的 CHERI 二进制文件运行良好。

尽管真正的 RISC-V 硬件仍然稀缺，但任何有兴趣尝试或为 RISC-V 移植做出贡献的用户都受到鼓励。请访问最近更新的 Wiki 页面获取设置信息，或查看《FreeBSD/RISC-V 入门》，该内容将刊登在 1 月/2 月版的《FreeBSD Journal》中。

赞助商：DARPA，AFRL，Axiado，FreeBSD 基金会

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

影响基本系统及其程序的变更。

### [GCC 4.2.1 退役](https://www.freebsd.org/status/report-2020-01-2020-03.html#GCC-4.2.1-Retirement)

联系方式：Ed Maste <<emaste@freebsd.org>>\
联系方式：Warner Losh <<imp@freebsd.org>>

2007 年，GNU 编译器集合（GCC）迁移到 GPLv3，这引发了关于 FreeBSD 工具链未来的讨论。我们在 BSDCan 2010 举行了 [工具链峰会](https://wiki.freebsd.org/201005ToolchainSummit)。Roman Divacky 在会上更新了 ClangBSD 项目的进展，展示了使用新并快速发展的 Clang 编译器构建 FreeBSD 的情况。

从那时起，Clang 被引入到 FreeBSD 基本系统中，并得到越来越广泛的使用——最初作为安装工具但不是默认的 `cc`，随后在 i386 和 amd64 上作为默认编译器使用，后来扩展到更多的目标。此后，Dimitry Andric 一直在保持 FreeBSD 版本的 Clang 更新。

GCC 4.2.1 被保留在树中，以支持那些尚未迁移到 Clang 的 FreeBSD 目标，如 MIPS 和 Sparc64。到今年年初，所有剩余的目标都已经迁移到外部工具链（来自 Port 或软件包的现代 GCC），或已被弃用。

随着树中不再有 GCC 4.2.1 的消费者，该版本已于 2020 年 2 月 29 日在 [r358454](https://svnweb.freebsd.org/changeset/base/358454) 中从 FreeBSD 中移除。

赞助商：FreeBSD 基金会

### [elfctl 工具](https://www.freebsd.org/status/report-2020-01-2020-03.html#elfctl-utility)

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

在 [r340076](https://reviews.freebsd.org/rS340076) 中，Ed 添加了 *NT\_FREEBSD\_FEATURE\_CTL* ELF 注释，用于让二进制文件选择是否启用或禁用漏洞缓解和其他功能。FreeBSD 基金会实习生 Bora Özarslan 随后添加了一个工具，用于解码和修改 ELF 注释，但该工具尚未默认安装。

在上个季度，Ed 将该工具重命名为 *elfctl*，并将其安装在 /usr/bin 中。Ed 还提交了一些小的 bug 修复、代码风格改进等。

使用示例 - 列出已知的功能标志：

```sh
$ elfctl -l
已知功能有：
aslr            禁用 ASLR
protmax         禁用隐式 PROT_MAX
stackgap        禁用堆栈间隙
wxneeded        需要 W+X 映射
```

列出二进制文件上设置的功能标签：

```sh
$ elfctl /bin/ls
文件 '/bin/ls' 的功能：
aslr            '禁用 ASLR' 未设置。
protmax         '禁用隐式 PROT_MAX' 未设置。
stackgap        '禁用堆栈间隙' 未设置。
wxneeded        '需要 W+X 映射' 未设置。
```

表示一个二进制文件请求选择退出地址随机化：

```sh
$ elfctl -e +aslr binary
```

赞助商：FreeBSD 基金会

### [ELF 工具链](https://www.freebsd.org/status/report-2020-01-2020-03.html#ELF-Tool-Chain)

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

在上个季度，许多性能和功能改进被提交到了 ELF 工具链工具中。

FreeBSD 基金会实习生 Tiger Gao 为 addr2line 添加了 DWARF 调试信息条目（DIE）缓存，在翻译多个条目时提供了显著的改进（甚至超过了 GNU addr2line，尤其是在处理大列表时）。

Tiger 还重新基于并更新了一个上游 ELF 工具链提交，以处理 *DW\_AT\_ranges*，并解决了两个 elfcopy/objcopy bug：在将二进制文件转换为 ELF 时正确设置操作系统/ABI 字段，以及在没有 *.shstrtab* 节时正确添加新节。

Ed 提交了多个 readelf 改进，包括解码 *PROTMAX\_DISABLE*、*STKGAP\_DISABLE* 和 *WXNEEDED* ELF 功能控制标志，解码 Xen 和 GNU Build-ID ELF 注释，并改进了输入验证。

Mark Johnston 解决了 Coverity Scan 报告的许多内存和文件描述符泄漏等问题。

赞助商：FreeBSD 基金会

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

影响 Ports 的更改，无论是涉及大部分树的广泛更改，还是单个 Port 本身。

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

| 链接                                                         |
| ---------------------------------------------------------- |
| [KDE FreeBSD](https://freebsd.kde.org/)                    |
| [KDE Community FreeBSD](https://community.kde.org/FreeBSD) |

联系方式：Adriaan de Groot <<kde@FreeBSD.org>>

*KDE 在 FreeBSD 上* 项目为 FreeBSD 打包了 KDE 社区制作的软件。该软件包括完整的桌面环境 KDE Plasma、艺术应用程序 [Krita](https://krita.org/)、视频编辑器 [Kdenlive](https://kdenlive.org/) 以及其他数百个可用于任何 FreeBSD 桌面计算机的应用程序。

本季度开始时，新的 kstars（业余天文应用）版本已在 Ports 中发布，随后进行了一些常规更新：

* 三个 KDE Frameworks 版本（按月发布），
* 三个 KDE 软件包的 bug 修复版本（来自 KDE 发布服务，原为 *KDE Applications*，但它总是包含更多内容，不仅仅是应用程序），
* 三个 KDE Plasma 桌面环境的 bug 修复版本。

没有对 Qt 进行 substantial 更新，但对 `devel/cmake` 进行了四个 bug 修复版本的更新，以及对 Ports 的常规工作。

SDDM 登录管理器已更新为一个更现代的版本——比旧版本更新了超过一年——并进行了补丁，以支持更多 FreeBSD 功能。

对 `devel/qca` 的更新删除了对 FreeBSD 11 的支持，因为上游不再支持旧版 OpenSSL。现在，Ports 中有一个基础设施，为需要加密支持的 Qt 应用程序添加了 `USES=qca`。

[开放 bug 列表](https://bugs.freebsd.org/bugzilla/buglist.cgi?bug_status=New\&bug_status=Open\&bug_status=In%20Progress\&bug_status=UNCONFIRMED\&email1=kde%40FreeBSD.org\&emailassigned_to1=1\&emailtype1=substring\&f0=OP\&f1=OP\&f2=product\&f3=component\&f4=alias\&f5=short_desc\&f7=CP\&f8=CP\&f9=assigned_to\&j1=OR\&j_top=OR\&o2=substring\&o3=substring\&o4=substring\&o5=substring\&o9=substring\&query_format=advanced\&v2=kde%40\&v3=kde%40\&v4=kde%40\&v5=kde%40\&v9=kde%40\&human=1) 稳定在大约 28 个未解决的问题，其中一些有趣的 xkb 问题值得注意。我们欢迎详细的 bug 报告和补丁。KDE 打包更新是在 GitHub 上的 [Ports 仓库副本](https://github.com/freebsd/freebsd-ports-kde/) 中准备的，然后合并到 SVN 中。我们也欢迎在那里提交拉取请求。

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

联系方式：Guido Falsi <<xfce@FreeBSD.org>>

在 XFCE 更新到 4.14 后，观察到 XFCE 窗口管理器 xfwm4 出现回归问题。它导致某些图形硬件设置下窗口装饰绘制错误或缺失。报告称，最近在 Ports 中更新的 Xorg 服务器修复了此问题。更新后的 Xorg 服务器将在下一个季度的分支中提供。

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

| 链接                                 |
| ---------------------------------- |
| [Wine 主页](https://www.winehq.org/) |

联系方式：Gerald Pfeifer <<gerald@FreeBSD.org>> 联系方式：Lorenzo Salvadore <<salvadore@FreeBSD.org>>

标准 Wine Port 已从 Wine 4.0.3 更新至 Wine 5.0，代表着超过 7400 项单独更改，包括 PE 格式的内置模块、多显示器支持、Vulkan 1.1 支持和 XAudio2 的重实现。

在我们在上个季度报告中请求帮助之后，i386 wine Port 已由 salvadore 接管，并立即开始解决现有的 bug 并改进这些 Port。大部分工作已经完成，我们将在 3 月开始提交这些更新。由于这项工作比最初预期的花费更多时间，因此我们也将在此过程中更新 i386-wine-devel Port，以便需要更近期版本的用户可以轻松地从 Ports（或二进制包）中获取。另一方面，我们计划在 i386-wine-devel 更新完成后，回溯将这些改进应用于 i386-wine，之后才更新该 Port，以确保 i386-wine 始终保持稳定版本。

### [reebsd/arm64 上的 Go](https://www.freebsd.org/status/report-2020-01-2020-03.html#Go-on-freebsd/arm64)

| 链接                                                    |
| ----------------------------------------------------- |
| [Go 1.14 发布说明](https://golang.org/doc/go1.14#freebsd) |

联系方式：Mikaël Urankar <<mikael@FreeBSD.org>>\
联系方式：Dmitri Goutnik <<dmgk@FreeBSD.org>>

从最近发布的版本 1.14 开始，Go 现在正式支持在 FreeBSD 12.0 或更高版本上运行的 64 位 ARM 架构。这个移植工作最初由 Greg V（又名 myfreeweb）启动，后来由 Shigeru Yamamoto、Dmitri Goutnik 和 Mikaël Urankar 继续进行。Dmitry 设置了一个 CI 构建器，用于捕捉 FreeBSD aarch64 上的回归问题（这是 golang 政策要求，在将新 Port 添加到主 Go 仓库时必须执行）。

正在进行的工作：

* 许多 Port 使用旧版本的 golang.org/x/sys 或 golang.org/x/net（举几个例子），这些版本不包含 FreeBSD aarch64 的支持，正在进行修复这些 Port 的工作（详细信息见 [bug 跟踪条目](https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=242312)）

### [sysctlmibinfo2 API](https://www.freebsd.org/status/report-2020-01-2020-03.html#sysctlmibinfo2-API)

| 链接                                                        |
| --------------------------------------------------------- |
| [sysctlmibinfo2](https://gitlab.com/alfix/sysctlmibinfo2) |

联系方式：Alfonso Sabato Siciliano <<alfonso.siciliano@email.com>>

在 2019 年的第三和第四季度状态报告中，描述了 sysctlinfo 接口及其扩展，用于改进 sysctlbyname() 系统调用，它们可以访问 sysctl MIB 并将对象的属性传递给用户空间，但两者都属于较低级别且与内核相关。

sysctlmibinfo2 库提供了一个 API，用于探索 sysctl MIB，转换对象名称为其对应的对象标识符，并查找对象以获取其属性，因此它对于正确处理对象和构建类似 sysctl 的工具非常有用。

sysctlmibinfo2 主要封装了低级接口，以提供一个简单的 API，以下是一些示例：sysctlmif\_desc() 检索对象的描述，sysctlmif\_kind() 获取类型（字符串、整数等），sysctlmif\_fmt() 指定格式（例如，整数可以表示分贝开尔文、毫开尔文等），然后可以正确打印对象值。

此外，sysctlmibinfo2 提供了一个高级 API：定义了结构体 sysctlmif\_object 并提供了构建对象数据结构的函数。例如，假设我们要管理声音系统，sysctlmif\_grouplistbyname(`hw.snd`) 返回声音驱动程序对象的列表，sysctlmif\_treebyname(`dev.pcm`) 返回一个树结构，其中 "dev.pcm" 是根节点，每个子树代表一个音频设备。

显然，sysctlmibinfo2 受益于 sysctlinfo 的特性：处理最多到 CTL\_MAXNAME 级别的 OID，支持能力模式，可以按名称查找对象（避免仅为找到相应 OID 而探索 MIB），一次获取对象的所有信息，管理具有 NULL 级别或通过 sysctl 处理器输入扩展的名称。

该库可以通过 devel/libsysctlmibinfo2 Port 安装，公共领域中提供了手册页和示例，以帮助你开始你的项目。

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

在文档树、手册页或外部书籍/文档中的重要更改。

### [Weblate 上的 FreeBSD 翻译](https://www.freebsd.org/status/report-2020-01-2020-03.html#FreeBSD-Translations-on-Weblate)

| 链接                                                                             |
| ------------------------------------------------------------------------------ |
| [在 Weblate 上翻译 FreeBSD wiki](https://wiki.freebsd.org/DocTranslationOnWeblate) |
| [FreeBSD Weblate 实例](https://translate-dev.freebsd.org/)                       |

联系方式：Danilo G. Baio <<dbaio@FreeBSD.org>>\
联系方式：Edson Brandi <<ebrandi@FreeBSD.org>>

正如 [1 月](https://www.freebsd.org/news/newsflash.html#event20200121:01) 的公告所述，FreeBSD 项目正在采用 Weblate 作为其基于 Web 的持续本地化平台。

我们正在吸引新的志愿者加入这一努力，到目前为止，已经有以下数量：

#### 2020 年第一季度状态

* **10** 种语言
* **47** 名注册用户

**语言**

* 中文（简体）(zh\_CN)
* 中文（繁体）(zh\_TW) - **新增**
* 法语 (fr\_FR) - **新增**
* 德语 (de\_DE) - **新增**
* 意大利语 (it\_IT) - **新增**
* 挪威博克 mål - **新增** - FreeBSD 上的新语言
* 波斯语 (fa\_IR) - **新增** - FreeBSD 上的新语言
* 葡萄牙语（巴西）
* 西班牙语
* 土耳其语 (tr-TR) **\[1]** - **新增** - FreeBSD 上的新语言

1 - 过去曾有过翻译努力。我们感谢所有贡献者，无论是翻译还是审阅文档。

请帮助推广这一努力，尤其是在你所在的本地用户组中，我们始终需要更多的志愿者。

### [重构 FreeBSD 手册页](https://www.freebsd.org/status/report-2020-01-2020-03.html#FreeBSD-Manpages-overhaul)

联系方式：Gordon Bergling <<gbergling@gmail.com>>

我目前正在进行 FreeBSD 手册页的重构工作，更新 HISTORY 和 STANDARDS 部分，并在此过程中为系统中缺少文档的部分创建新的手册页。FreeBSD 已经拥有类 UNIX 操作系统中最好的文档之一，但仍有一些部分可以改进。

对于那些已经改进的部分，你可以查看 [我的 Phabricator 账户](https://reviews.freebsd.org/p/gbergling_gmail.com/)。

如果你希望帮助改进文档工作，请联系 Benedict Reuschling <bcr@freebsd.org> 或我本人，邮箱是 <gbergling@gmail.com>。

## [第三方项目](https://www.freebsd.org/status/report-2020-01-2020-03.html#Third-Party-Projects)

许多项目基于 FreeBSD 构建，或将 FreeBSD 组件纳入他们的项目中。由于这些项目可能对更广泛的 FreeBSD 社区感兴趣，我们有时会在季度报告中简要更新这些项目提交的进展。FreeBSD 项目对这些提交中的任何声明的准确性或真实性不做任何声明。

### [pot 和 nomad pot 驱动](https://www.freebsd.org/status/report-2020-01-2020-03.html#pot-and-the-nomad-pot-driver)

| 链接                                                          |
| ----------------------------------------------------------- |
| [pot 项目](https://pot.pizzamig.dev/)                         |
| [pot 在 github 上](https://github.com/pizzamig/pot)           |
| [Nomad pot 驱动](https://github.com/trivago/nomad-pot-driver) |
| [minipot](https://github.com/pizzamig/minipot)              |

联系方式：Luca Pizzamiglio <<pizzamig@FreeBSD.org>>\
联系方式：Esteban Barrios <<esteban.barrios@trivago.com>>

我们已经开始为 pot 项目编写正式的文档和指南。尽管文档尚不完整，但已经可以在 [这里](https://pot.pizzamig.dev/) 查阅。还提供了一个 [常见问题解答](https://pot.pizzamig.dev/FAQ/) 页面，欢迎用户提交问题。

在上个季度，有一些 bug 被报告到 pot 和 nomad-pot-driver。两个项目都发布了新的 bug 修复版本。特别感谢 'grembo' 和 'Crest' 报告问题、测试并尝试了我们的解决方案。同时感谢 Mateusz（0mp）提交的 Pull Requests！

pot 将很快发布新版本（0.11.0），该版本主要集中在网络方面：

* 网络堆栈支持：仅 ipv4，仅 ipv6，双栈。
* 别名的灵活网络设置：增加了为别名网络类型使用任意网络设置的能力。

欢迎贡献！我们已为一些问题添加了 "good first issue" 标签，以鼓励新手为项目做贡献！

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

| 链接                                                          |
| ----------------------------------------------------------- |
| [NomadBSD 网站](https://www.nomadbsd.org/)                    |
| [NomadBSD Github](https://www.github.com/NomadBSD/NomadBSD) |
| [NomadBSD 论坛](https://forum.nomadbsd.org/)                  |

联系方式：NomadBSD 团队 <<info@NomadBSD.org>>

NomadBSD 是一个基于 FreeBSD 的持久化直播系统，适用于 USB 闪存驱动器。它具有自动硬件检测和配置，配置为开箱即用的桌面系统，但也可以用于数据恢复、教育用途，或测试 FreeBSD 的硬件兼容性。

我们在 3 月发布了新的次要版本 1.3.1，改进了网络接口的配置，修复了一些 bug，并新增了 nomadbsd-chusr 和 nomadbsd-sysinfo。此外，一些新特性也被包含在此次版本中。

几天后，YouTube 频道 explainingcomputers 发布了关于 NomadBSD 的评测视频。explaingcomputers 频道有近 60 万订阅者，评测结果积极，因此我们看到了历史上下载量的最高峰！与此同时，很多人开始在我们的邮件列表和 Twitter 上寻求帮助，所以我们决定建立一个新的支持论坛。

我们正在寻找帮助项目的人。在各个方面的帮助都非常感谢：

* 程序界面的翻译
* 设计艺术作品
* 编程新工具，扩展现有工具
* 测试和错误报告 / 用户体验和功能建议
* 欧洲以外的镜像

待办事项

* 支持在磁盘分区上安装并添加分区编辑器 GUI。
* 完整的磁盘加密
* 添加用户友好的网络管理器
