# FreeBSD 2021 年第二季度状态报告

* 原文链接：[FreeBSD Quarterly Status Report 2nd Quarter 2021](https://www.freebsd.org/status/report-2021-04-2021-06/)

本报告涉及了 2021 年 4 月至 6 月期间与 FreeBSD 相关的项目，是计划中的四份报告中的第二份。

本报告的一些亮点包括但不限于实验性安装程序的工作、pf 的变更、Linuxulator 的额外工作、内核 sanitizers 状态的更新、ZFS 的 raidz 扩展功能的覆盖，以及有关资源账务的一些新闻。

此致，\
Daniel Ebdrup Jensen，状态团队。

## FreeBSD 团队报告

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

### FreeBSD 基金会

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

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

以下是我们在上个季度为帮助 FreeBSD 所做的一些亮点：

#### 疫情对基金会的影响

像大多数组织一样，我们的团队继续在家工作。我们对员工出差的临时禁令仍然有效，但由于大多数会议仍为虚拟形式，这并未对我们的工作产生太大影响。随着世界逐步重新开放，我们将重新评估这一出差禁令。我们继续通过常规渠道支持社区和项目。

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

我们帮助促进商业用户与 FreeBSD 开发者之间的合作。我们还与公司会面，讨论他们的需求，并将这些信息反馈给项目方。由于 Q2 期间我们的出差禁令仍在实施，因此我们继续以虚拟形式与公司用户会面。如果秋季情况良好，我们将开始将面对面会议纳入到面对面与虚拟会议的混合形式中。

#### 筹款工作

首先，我们要感谢今年所有为我们做出财务贡献的人！在上个季度，我们筹集了 70,410 美元，其中包括来自 Verisign、VMware 和 Stormshield 等组织的捐款，以及许多个人捐款。

我们依赖这些捐款来赞助我们支持 FreeBSD 的工作。去年年底，我们决定投入更多资金来帮助改善 FreeBSD。我们聘请了一名高级软件开发人员负责 arm64 的工作，并聘请了一名项目协调员来管理我们的项目并与社区互动。我们还将两名兼职软件开发人员聘为全职。这些措施的目的是为 FreeBSD 提供更多资源，以实施和改进重要功能，审查补丁和 bug 报告，修复 bug，并支持安全工作。这确保了 FreeBSD 仍然是你所依赖的创新、安全和可靠的操作系统。

你将在我们的报告中了解我们如何使用你在第二季度的捐款，以及在本报告中的各个单独报告。

我们对 2021 年的计划感到兴奋，包括更多的 FreeBSD 在线宣传和培训、操作系统课程内容以及上述的软件开发工作。尽管我们仍处于大流行中，但我们正努力帮助社区成员通过更多虚拟机会进行联系。

请考虑捐赠，以帮助我们在 2021 年继续并增加对 FreeBSD 的支持：<https://www.freebsdfoundation.org/donate/>。

我们还有合作伙伴计划，为我们的更大商业捐赠者提供更多福利。了解更多信息并与你的公司分享！<https://www.freebsdfoundation.org/FreeBSD-foundation-partnership-program/>

#### 改进操作系统

在二季度，基金会工作人员和赞助受益者提交了 348 个源代码树更改、19 个 Ports 更改和 11 个文档树更改。这代表了 40% 的源代码提交标明了赞助商。对于 Ports 提交，这一比例为 15%，文档提交为 18%。基金会工作人员和赞助受益者还参与了多个第三方项目的工作。两个显著的例子是 LLVM 项目的 LLDB 调试器和 Syzkaller 基于代码覆盖的系统调用模糊测试工具。

你可以在各个季度报告中了解更多基金会项目。较小的项目和改进包括：

* 通过 `ptrace(PT_COREDUMP)` 实现按需内核核心转储生成
* 改进一般内核调试
* 删除过时的内核 mcount 性能分析
* Nullfs 和 tmpfs 错误修复
* 清理和改进 libc
* rtld dlerror 和线程局部变量修复（由 Julia 开发者报告）
* kqueue 和 POSIX 定时器修复
* UFS 错误修复
* Capsicum 套接字操作改进
* hwpmc（硬件性能分析）维护和 CPU 支持
* Cirrus-CI 启动烟雾测试
* sndstat(4) [架构更新](https://cgit.freebsd.org/src/commit/?id=4ce1ba6523839b5c88331de22937b1e0483fc40b)
* vmm(4) 中的 AMD PCI 直通修复，详见：[提交 1](https://cgit.freebsd.org/src/commit/?id=9d7eb557c1574f879b4bb4adee285cc9f2d5f18e)，[提交 2](https://cgit.freebsd.org/src/commit/?id=6fe60f1d5c39c94fc87534e9dd4e9630594e0bec) 和 [审查](https://reviews.freebsd.org/D30827)
* 在 bhyve(8) 中支持现代 [Virtio 1.0](https://reviews.freebsd.org/D29708)

一如既往，基金会工作人员还通过大量代码审查、一般 bug 分类和修复支持项目。此外，Ka Ho 添加了一篇名为 [在 FreeBSD 源代码树中使用语言服务器进行开发](https://docs.freebsd.org/en/articles/freebsd-src-lsp/) 的文章。

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

基金会提供了一名全职员工并赞助项目，致力于提高 FreeBSD 项目的持续集成、自动化测试和整体质量保证工作。

在 2021 年第二季度，持续进行了预提交测试和在 CI 环境中构建发布工件的工作。正在规划使用 netperf 集群进行网络相关 CI 工作的项目。

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

#### 支持 FreeBSD 基础设施

基金会提供硬件和支持，以改善 FreeBSD 基础设施。在上个季度，我们支持了 Sentex 的测试集群，购买了一些基础设施所需的零部件，并开始与 clusteradm 团队合作，改进和提高硬件请求/采购流程。

#### FreeBSD 宣传与教育

我们的大部分工作致力于为项目进行宣传。这包括推广他人使用 FreeBSD 所做的工作；制作宣传材料，教育人们了解 FreeBSD，并帮助简化开始使用 FreeBSD 或为项目贡献的过程；以及参加并组织其他 FreeBSD 贡献者志愿参与 FreeBSD 活动，管理 FreeBSD 展位，和做 FreeBSD 演讲。

FreeBSD 基金会赞助了全球范围内的许多会议、活动和峰会。这些活动可以是 BSD 相关、开源的，或是面向弱势群体的技术活动。我们支持以 FreeBSD 为重点的活动，旨在为分享知识、合作开展项目以及促进开发者与商业用户之间的协作提供场所，这有助于构建一个健康的生态系统。我们还支持非 FreeBSD 活动，以推广并提高 FreeBSD 的知名度，增加 FreeBSD 在不同应用中的使用，并吸引更多贡献者参与项目。尽管由于 Covid-19 我们仍未能参加线下会议，但我们能够参加虚拟活动并帮助组织了 2021 年 6 月的 FreeBSD 开发者峰会。除了参加和规划虚拟活动外，我们还在不断开展新的培训计划，并更新我们的操作指南，帮助更多人尝试 FreeBSD。

以下是我们上个季度在宣传和教育方面的一些工作：

* 作为行业合作伙伴参与了 USENIX LISA21
* 举办了两场新的 FreeBSD Friday 活动：[BastilleBSD 入门](https://youtu.be/IOUr7Is5FSU) 和 [如何向 FreeBSD 提交补丁](https://youtu.be/6fwfRoDt9bQ)
* 组织内容并宣传了 2021 年 6 月 18-19 日的 FreeBSD Day
* 帮助组织并运行了 2021 年 6 月的 FreeBSD 开发者峰会——视频现已发布在 [wiki](https://wiki.freebsd.org/DevSummit/202106)
* 在 6 月 18 日的第 16 届开源中国开源世界高峰论坛中做了演讲
* 发布了有关我们赞助的 Linux 兼容层工作和 FreeBSD 13.0 新特性的博客文章
* 发布了新的 Git 操作指南
* 继续推广 FreeBSD Office Hours 系列——一小时的会议视频可在项目的 [YouTube 频道](https://www.youtube.com/c/FreeBSDProject) 查找。更多信息请参见本报告中的 Office Hours 部分
* 承诺成为 EuroBSDcon 的银牌赞助商

请通过我们的时事通讯了解我们的最新工作：<https://www.freebsdfoundation.org/news-and-events/newsletter/>

我们通过发布专业制作的 FreeBSD 期刊来帮助世界了解 FreeBSD。如前所述，现在 FreeBSD 期刊是免费的出版物。了解更多并访问最新期刊，请访问 [https://www.FreeBSDfoundation.org/journal/](https://www.freebsdfoundation.org/journal/)

你可以在 [https://www.FreeBSDfoundation.org/news-and-events/](https://www.freebsdfoundation.org/news-and-events/) 查找我们参加的活动和即将举行的活动。

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

基金会拥有 FreeBSD 商标，保护这些商标是我们的责任。我们还为核心团队提供法律支持，以解决出现的相关问题。

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

### FreeBSD 发布工程团队

链接： [FreeBSD 13.0-RELEASE 时间表](https://www.freebsd.org/releases/13.0R/schedule/) 链接：<https://www.freebsd.org/releases/13.0R/schedule/>

[FreeBSD 13.0-RELEASE 公告](https://www.freebsd.org/releases/13.0R/announce/) 链接：<https://www.freebsd.org/releases/13.0R/announce/>

[FreeBSD 发布版](https://download.freebsd.org/ftp/releases/ISO-IMAGES/) 链接：<https://download.freebsd.org/ftp/releases/ISO-IMAGES/>

[FreeBSD 开发快照](https://download.freebsd.org/ftp/snapshots/ISO-IMAGES/) 链接：<https://download.freebsd.org/ftp/snapshots/ISO-IMAGES/>

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

FreeBSD 发布工程团队负责设定和发布 FreeBSD 官方项目发布的时间表，宣布代码冻结以及维护各自的分支等工作。

在 2021 年第二季度，发布工程团队完成了 13.0-RELEASE 周期的工作，这是 stable/13 分支的第一次发布。在发布周期中，增加了一个额外的 BETA 构建和两个额外的 RC 构建，但总体上发布周期顺利进行。

此外，在整个季度，发布了多个开发快照构建，涵盖 **main**、**stable/13** 和 **stable/12** 分支。将不再提供 **stable/11** 的开发快照构建。

感谢所有帮助测试 13.0 构建并报告问题的人。正如我们所做的，我们始终追求质量而非数量。

赞助商：Rubicon Communications, LLC ("Netgate")

赞助商：FreeBSD 基金会

### 集群管理团队

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

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

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

* 将 Phabricator (reviews.freebsd.org) 迁移到更快的机器
* 将 [https://www.freebsd.org](https://www.freebsd.org/) CGI 后端迁移到更快的机器
* 改进了我们主要集群站点的网络设计
  * 移除不托管面向公众服务的 VLAN 上的公共 IPv4 连接
  * 整理了 pkgbuild 和 pkgexp VLAN，其中托管生产和实验性包构建器
  * 将开发者参考机器和宇宙构建机器迁移到不同的 VLAN，以更好地支持 aarch64 和 ppc64 机器
* 升级了运行重要内部 FreeBSD.org 服务的机器
  * DNS、Kerberos、LDAP、LetsEncrypt.org certbot 等
  * FTP、Subversion、Git 镜像种子
* 将开发者参考机器和宇宙构建器升级到更新的 FreeBSD 14-CURRENT
* 将包构建机器升级到更新版本的 FreeBSD 14-CURRENT
* 协助邮件管理员将邮件列表从 Mailman 迁移到 mlmmj
* 对一个特别棘手的 PowerPC64 包构建机器进行了彻底的清理（愿其安息）
* 安装了一台新的生产用 PowerPC64 包构建器
* 与 Git 迁移工作组合作进行 Ports 迁移
* 持续进行日常集群管理工作
  * 处理紧急问题
  * 监控 pkgsync

进行中的工作：

* 将 pkg-master.nyi 迁移到新硬件
* 改进包构建基础设施
* 审查服务 jail 和服务管理员的操作
* 设置 PowerPC pkgbuilder/ref/universal 机器
* 寻找更多符合 [通用镜像布局](https://wiki.freebsd.org/Teams/clusteradm/generic-mirror-layout) 或 [小型镜像](https://wiki.freebsd.org/Teams/clusteradm/tiny-mirror) 要求的服务提供商
* 将公共面向用户的集群服务从 12.2-STABLE 升级到 13.0-STABLE
* 在日本安装新的集群站点
  * 完整的镜像站点（ftp、pkg、git、doc、dns 等）
  * 该镜像的网络和机器资源由位于东京的宽带塔公司（BroadBand Tower, Inc.）的云与 SDN 实验室慷慨赞助，该公司是东京的一家互联网数据中心服务提供商，拥有超过 300 Gbps 的国际 IP 传输带宽
* 改进 GeoDNS 路由，特别是在亚洲地区
* 与 doceng@ 合作，改进 [https://www.freebsd.org](https://www.freebsd.org/) 和 [https://docs.freebsd.org](https://docs.freebsd.org/)
* 改进 Web 服务架构
* 改进集群备份计划

### 持续集成

链接：

[FreeBSD Jenkins 实例](https://ci.freebsd.org/) 链接：[https://ci.FreeBSD.org](https://ci.freebsd.org/)

[FreeBSD 硬件测试实验室](https://ci.freebsd.org/hwlab) 链接：[https://ci.FreeBSD.org/hwlab](https://ci.freebsd.org/hwlab)

[FreeBSD CI 工件存档](https://artifact.ci.freebsd.org/) 链接：[https://artifact.ci.FreeBSD.org](https://artifact.ci.freebsd.org/)

[FreeBSD CI 每周报告](https://hackmd.io/@FreeBSD-CI) 链接：<https://hackmd.io/@FreeBSD-CI>

[FreeBSD Jenkins wiki](https://wiki.freebsd.org/Jenkins) 链接：<https://wiki.freebsd.org/Jenkins>

[托管 CI wiki](https://wiki.freebsd.org/HostedCI) 链接：<https://wiki.freebsd.org/HostedCI>

[第三方软件 CI](https://wiki.freebsd.org/3rdPartySoftwareCI) 链接：<https://wiki.freebsd.org/3rdPartySoftwareCI>

[与 freebsd-testing@ 相关的票据](https://preview.tinyurl.com/y9maauwg) 链接：<https://preview.tinyurl.com/y9maauwg>

[FreeBSD CI 仓库](https://github.com/freebsd/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)

联系人：IRC #freebsd-ci 频道（EFNet）

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

在 2021 年第二季度，我们继续与项目中的贡献者和开发者合作，满足他们的测试需求，并与外部项目和公司合作，改进他们的产品和 FreeBSD。

重要更改：

* main (-CURRENT) 和 stable/13 分支的构建环境已更改为 13.0-RELEASE

已退役的作业：

* [GCC 6 构建的 main on amd64](https://ci.freebsd.org/job/FreeBSD-main-amd64-gcc6_build)

进行中的工作和待办事项

* 设计并实现预提交 CI 构建和测试
* 设计并实现使用 CI 集群来构建发布工件，就像发布工程团队一样
* 收集和整理 CI 任务和想法 [这里](https://hackmd.io/@FreeBSD-CI/freebsd-ci-todo)
* 测试并合并 [FreeBSD-ci 仓库](https://github.com/freebsd/freebsd-ci/pulls) 中的拉取请求
* 减少 CI/测试环境设置程序，以便贡献者和开发者使用
* 设置 CI 阶段环境，并将实验性作业放入其中
* 为运行测试的虚拟机访客设置公共网络访问
* 实现使用裸金属硬件运行测试套件
* 添加 drm Port 构建测试，以支持 -CURRENT
* 计划运行 ztest 和网络堆栈测试
* 增加更多外部工具链相关的作业
* 改进硬件实验室，使其更加成熟，并增加更多硬件
* 帮助更多软件在其 CI 流水线中获得 FreeBSD 支持（Wiki 页面：[3rdPartySoftwareCI](https://wiki.freebsd.org/3rdPartySoftwareCI)，[HostedCI](https://wiki.freebsd.org/HostedCI)）
* 与托管 CI 提供商合作，获得更好的 FreeBSD 支持

请查看 [freebsd-testing@ 相关的票据](https://bugs.freebsd.org/bugzilla/buglist.cgi?bug_status=%3Cem%3Eopen%3C/em%3E\&email1=testing%40FreeBSD.org\&emailassigned_to1=1\&emailcc1=1\&emailreporter1=1\&emailtype1=substring\&query_format=advanced) 获取更多的进行中信息，并且不要犹豫加入我们的工作！

赞助商：FreeBSD 基金会

### Ports

链接： [关于 FreeBSD Ports](https://www.freebsd.org/ports/) 链接：[https://www.FreeBSD.org/ports/](https://www.freebsd.org/ports/)

[为 Ports 贡献](https://docs.freebsd.org/en/articles/contributing/ports-contributing/) 链接：<https://docs.freebsd.org/en/articles/contributing/ports-contributing/>

[FreeBSD Ports 监控](http://portsmon.freebsd.org/) 链接：<http://portsmon.freebsd.org/>

[Ports 管理团队](https://www.freebsd.org/portmgr/) 链接：<https://www.freebsd.org/portmgr/>

[Ports Tarball](http://ftp.freebsd.org/pub/FreeBSD/ports/ports/) 链接：<http://ftp.freebsd.org/pub/FreeBSD/ports/ports/>

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

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

Ports 管理团队负责监督 Ports Tree 的整体方向、构建软件包和人员事务。以下是上个季度的工作总结。

根据 FreshPorts 的数据，当前 Ports 中共有超过 44,200 个 Port，同时有 2,532 个 PR，其中 526 个尚未分配。在过去的季度里，main 分支上有 10,428 次提交，由 164 名提交者完成，2021Q2 分支上有 618 次提交，由 59 名提交者完成。与 2021Q1 相比，Ports 和 PR 的数量基本保持不变，而 main 树本季度的提交量增长了 10%。

在过去的季度里，我们欢迎了 Charlie Li (vishwin@) 和 Guangyuan Yang (ygy@)，同时向 jlaffaye@、jpaetzel@、kmoore@、lifanov@、miwi@ 和 shurd@ 告别。

在基础设施方面，新增了一个 USES，ansible，这样与 Ansible 相关的 Port 就可以更容易地定义插件和模块。若干默认版本已更新：

* PYTHON 和 PYTHON3 的默认版本切换为 3.8
* PowerPC 上 librsvg2 的默认版本切换为 rust

关于许可证框架，维护不善的 LEGAL 被移除，取而代之的是每个 Port 的 LICENSE，并添加了 BSD0CLAUSE 许可证。在选项框架中，添加了预定义的共享版本控制 OPTIONS 和描述。

一些重要的 Port 更新：

* Firefox 89.0.2
* Firefox-esr 78.11.0
* Chromium 91.0.4472.114
* Ruby 3.0.1
* Xorg 服务器 1.20.11

最后，antoine@ 执行了 18 次 exp-runs，测试了 cmake、expat2、KDE、meson、poppler、rust、Xorg 和 lapack 系列的更新，切换了 Python 默认版本为 3.8，并移除了过时的 qtchooser。

### 文档工程团队

链接：

[FreeBSD 文档项目](https://www.freebsd.org/docproj/) 链接：<https://www.freebsd.org/docproj/>

[FreeBSD 文档项目新贡献者入门](https://docs.freebsd.org/en/books/fdp-primer/) 链接：<https://docs.freebsd.org/en/books/fdp-primer/>

[文档工程团队](https://www.freebsd.org/administration/#t-doceng) 链接：<https://www.freebsd.org/administration/#t-doceng>

联系人：FreeBSD Doceng 团队 <<doceng@FreeBSD.org>>

doceng@ 团队负责处理与 FreeBSD 文档项目相关的一些元项目问题，更多信息请参阅 [FreeBSD Doceng 团队章程](https://www.freebsd.org/internal/doceng/)。

在过去的季度里，我们迎回了 Ceri Davies (ceri@) 作为文档提交者。Sergio Carlavilla (carlavilla@) 和 Danilo G. Baio (dbaio@) 加入了 doceng@ 团队。

Ka Ho Ng (khng@) 在 FreeBSD 文档中添加了一篇新文章：[在 FreeBSD Src Tree 中使用语言服务器进行开发](https://docs.freebsd.org/en/articles/freebsd-src-lsp/)。

关于 Hugo/Asciidoctor 的过渡工作进展顺利，但在迁移后，FreeBSD 文档项目仍然有一些待解决的问题。我们感谢所有帮助查找和修复问题的人。[TODO 项目](https://wiki.freebsd.org/Doc/IdeaList) Wiki 列表已更新，欢迎大家参与贡献。

## 项目

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

### BSDDialog - TUI 小部件

链接： [BSDDialog 项目](https://gitlab.com/alfix/bsddialog) 链接：<https://gitlab.com/alfix/bsddialog>

[Dialog 项目](https://invisible-island.net/dialog) 链接：<https://invisible-island.net/dialog>

[GPLinBase Wiki 页面](https://wiki.freebsd.org/GPLinBase) 链接：<https://wiki.freebsd.org/GPLinBase>

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

本项目的目的是提供一个工具和一个库，用于在终端中构建具有 UI 小部件的脚本和工具。该项目灵感来自 Dialog；然而，BSDDialog 采用 BSD-2-Clause 许可证发布，而 Dialog 则是 LGPL 许可，因此已将该项目的链接添加到“Base 系统中的 GPL 软件”Wiki 页面。

目标是实现与 dialog 工具的完全兼容（挑战在于实现超过七十个选项和近三十个小部件）。与库的 API 兼容性不是优先事项，因为 libbsddialog 应满足 FreeBSD 的需求，例如，它提供了新的 mixedlist() 函数，可以将 checklists、radiolists 和分隔符作为参数传递，因此可以用于构建 dialog4ports 的克隆：更容易实现且不依赖于非宽松的依赖项。

BSDDialog 当前正在开发中，尚未完成任何小部件（自动调整大小、重调整大小和滚动功能尚缺），然而工具和库的可运行示例已包含在示例文件夹中，并在 README 中进行了描述。

最后一个小插曲：BSDDialog 起初基于 MixerTUI 的代码库，但原始代码已几乎被完全重写。

### 实验性安装程序

链接： [安装程序代码库](https://github.com/yangzhong-freebsd/lua-httpd) 链接：<https://github.com/yangzhong-freebsd/lua-httpd>

[包含安装程序的 Live ISO](https://github.com/yangzhong-freebsd/ISO) 链接：<https://github.com/yangzhong-freebsd/ISO>

联系人：Yang Zhong <<yzhong@freebsdfoundation.org>>

bsdinstall 是 FreeBSD 当前的安装程序。它是一个终端应用程序，界面笨拙，并且会提出一些对普通用户来说很难理解的模糊问题。因此，本项目的目的是创建一个具有更简洁界面的 FreeBSD 图形化安装程序，并改进 FreeBSD 安装过程的其他方面。

实验性安装程序使用 Web 前端：一个本地运行的 Web 服务器从安装介质中启动，用户通过在安装介质上运行的浏览器填写 Web 表单来配置安装。Web 界面灵活且易于访问，非常适合用作安装程序。该界面还支持远程安装，其中服务器运行在目标机器上，安装通过其他机器进行配置，尽管目前对此方面的工作还不多。

该安装程序还旨在采用模块化设计，用户配置选项将写入一个安装配置文件，然后该文件用于实际安装。虽然 bsdinstall 已经支持脚本化安装，但其配置文件格式非常自由。更加严格的配置文件设计将使将来编写其他安装前端变得更容易。

该安装程序目前是一个粗略的概念验证，但它能够处理基本的安装并进行有限的配置。欢迎提供测试帮助；你可以通过下载 ISO 仓库中的一个版本来尝试安装程序。此外，如果你对安装程序的设计或应具有的有用功能有任何想法，请通过电子邮件与我联系。

赞助商：FreeBSD 基金会

### Git 迁移工作组

链接： [FreeBSD 开发使用 Git Wiki](https://wiki.freebsd.org/Git) 链接：<https://wiki.freebsd.org/Git>

[Git 迁移 Wiki](https://wiki.freebsd.org/GitTransition) 链接：<https://wiki.freebsd.org/GitTransition>

[文档 Git 仓库网页](https://cgit.freebsd.org/doc) 链接：[https://cgit.FreeBSD.org/doc](https://cgit.freebsd.org/doc)

[Ports Git 仓库网页](https://cgit.freebsd.org/ports) 链接：[https://cgit.FreeBSD.org/ports](https://cgit.freebsd.org/ports)

[源代码 (基本系统) Git 仓库网页](https://cgit.freebsd.org/src) 链接：[https://cgit.FreeBSD.org/src](https://cgit.freebsd.org/src)

[提交者指南 Git 入门](https://docs.freebsd.org/en/articles/committers-guide/#git-primer) 链接：<https://docs.freebsd.org/en/articles/committers-guide/#git-primer>

[手册 使用 Git 附录](https://docs.freebsd.org/en/books/handbook/mirrors/#git) 链接：<https://docs.freebsd.org/en/books/handbook/mirrors/#git>

[Game of Trees](http://gameoftrees.org/) 链接：<http://gameoftrees.org/>

[gitup](https://github.com/johnmehr/gitup) 链接：<https://github.com/johnmehr/gitup>

联系人：許立文 <<lwhsu@FreeBSD.org>>

联系人：Warner Losh <<imp@FreeBSD.org>>

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

联系人：Ulrich Spörlein <<uqs@FreeBSD.org>>

联系人：[FreeBSD-git 邮件列表](https://lists.freebsd.org/mailman/listinfo/freebsd-git)

联系人 IRC #gitcvt 频道 (EFnet)

Git 工作组一直在致力于将 Ports 仓库迁移到 Git，这项任务始于 3 月底，3 月 31 日的最终 Subversion 提交标志着迁移的开始。整个迁移工作于 4 月 6 日完成。从 2021Q2 开始，Ports 季度分支仅在 Git 仓库中创建。我们继续在 portsnap 和其他 Ports 基础设施上进行工作，以适应 Git。

我们继续致力于实现和更新提交钩子。工作内容包括帮助将 FreeBSD 13.0 发布过程更改为使用 Git。同时，我们正在整理并向公众提供基础设施以及文档。

6 月 8 日，我们与 ZFS 开发人员合作，以便更好地跟踪上游 OpenZFS 的开发。vendor/openzfs 分支被重命名为 vendor/openzfs/legacy。两个新分支直接从上游导入，vendor/openzfs/master 和 vendor/openzfs/zfs-2.1-release，并合并到 main 和 stable/13 分支。关于如何纠正错误的详细信息，请参考 <https://lists.freebsd.org/archives/freebsd-current/2021-June/000153.html>

Git 工作组继续跟踪两个宽松许可的 Git 兼容工具的进展：Gitup 和 Game of Trees。Gitup 是一款小巧、无依赖的工具，用于克隆和更新 Git 仓库。它仅用于保持本地树的最新状态，不支持本地提交。

Game of Trees 是一个与 Git 仓库兼容的版本控制客户端。它提供了一个与 Git 不同的用户界面和工作流程。它绝不是 Git 的替代品，但可以用于开发托管在 Git 仓库中的软件。

[Gitup](https://www.freshports.org/net/gitup) 和 [Game of Trees](https://www.freshports.org/devel/got) 目前作为 Ports 和软件包提供。未来的工作将评估它们作为基本系统的候选工具。

核心团队在 2021 年 6 月的 DevSummit 上开始了一项新的努力，调查和评估新的工作流变化。在 2021 年第三季度，我们预计完成剩余的迁移任务，并创建一个新的工作组来帮助刷新工作流。我们已经结束了定期会议，剩余的迁移任务由个人完成（許立文主要负责此项工作）。新的工作组将包括参与本工作组的人员，以及带来新视角的新人。

赞助商：FreeBSD 基金会（部分赞助）

### 改进 LLDB 调试器

链接：

[Moritz Systems 项目概述](https://www.moritz.systems/blog/lldb-freebsd-cpu-target-support-and-userland-debugging-improvements/) 链接：<https://www.moritz.systems/blog/lldb-freebsd-cpu-target-support-and-userland-debugging-improvements/>

[进展报告 1](https://www.moritz.systems/blog/freebsd-remote-process-plugin-on-non-x86-architectures/) 链接：<https://www.moritz.systems/blog/freebsd-remote-process-plugin-on-non-x86-architectures/>

[进展报告 2](https://www.moritz.systems/blog/freebsd-legacy-process-plugin-removed/) 链接：<https://www.moritz.systems/blog/freebsd-legacy-process-plugin-removed/>

[进展报告 3](https://www.moritz.systems/blog/lldb-support-for-fork-and-vfork/) 链接：<https://www.moritz.systems/blog/lldb-support-for-fork-and-vfork/>

[进展报告 4](https://www.moritz.systems/blog/lldb-core-dump-support-improvements/) 链接：<https://www.moritz.systems/blog/lldb-core-dump-support-improvements/>

[Git 仓库](https://github.com/moritz-systems/llvm-project) 链接：<https://github.com/moritz-systems/llvm-project>

联系人：Kamil Rytarowski <kamil@moritz.systems>

联系人：Michał Górny <mgorny@moritz.systems>

LLDB 项目基于 LLVM 和 Clang 提供的库，旨在提供一个现代化的调试器。它使用 Clang 的 AST 和表达式解析器、LLVM JIT、LLVM 反汇编器等工具，提供“即插即用”的体验。它的速度极快，并且比 GNU 调试器 GDB 拥有更宽松的许可证。

FreeBSD 将 LLDB 包含在基本系统中。目前，它与 GNU GDB 调试器相比，存在一些限制，尚未提供完整的替代方案。该项目从 2021 年 1 月持续到 2021 年 4 月，旨在改善 LLDB 与 FreeBSD 的兼容性并扩展其新功能。

初期的工作集中在完成 FreeBSD 进程插件的客户端 - 服务器模型的移植。我们将之前支持的所有架构移植完成后，成功移除了遗留插件。随后，我们实现了对 `fork(2)` 和 `vfork(2)` 系统调用的跟踪支持，采用与 GDB 的 `follow-fork-mode` 设置兼容的模型。最后，我们改善了 LLDB 对核心转储的支持，使用新引入的 `PT_COREDUMP` `ptrace(2)` 请求支持在不崩溃的情况下创建停止程序的核心转储。在此过程中，我们修复了许多 bug，并改进了在 amd64 和 arm64 架构上的测试套件状态。

这些改进预计将随 LLDB 13.0 一道发布。

FreeBSD/LLDB 开发人员和高级用户在这个稳定的操作系统上获得的整体体验达到了其他环境中已知的状态。此外，专注于 FreeBSD 的工作也带来了通用的改进，增强了 LLDB 对 Linux 和 NetBSD 的支持。

赞助商：FreeBSD 基金会

### 性能监控计数器

联系人：Mitchell Horne <<mhorne@FreeBSD.org>>

本季度，对内核模块 `pmc(3)` 库和 `hwpmc(4)` 进行了若干改进。

背景：传统上，PMC 事件代码在 `sys/dev/hwpmc/pmc_events.h` 头文件中手动定义，并静态编译进内核。这些定义提供了事件名称与其编码之间的转换，并通过 `pmc(3)` 库被 PMC 工具如 `pmcstat(8)` 使用。2018 年，为 amd64 和 i386 架构引入了新的事件定义源，即 pmu-events 表。这些是由 Linux 内核维护的一组 JSON 文件，它们被直接编译进 libpmc，提供了更完整的事件定义集。

这项工作的主要成果是将 pmu-events 定义迁移到 arm64。对 libpmc 进行了少量重构，使将来迁移到其他平台更加容易。在此过程中发现并修复了一些小 bug；值得注意的是，`pmcstat(8)` 的别名 `instructions` 现在应该可以在 Intel CPU 上正常工作。增加了当 pmu-events 中没有所需事件时查询遗留事件表的功能，恢复了在 x86 上使用 `pmc.soft(3)` 事件的能力。最后，导入了新的 AMD Zen3 CPU 的事件定义（致谢：Greg V）。

计划在 2021 年第三季度进行 PMU 事件定义的更大更新。这将使我们与过去三年的 x86 CPU 更新同步，并大大增加 arm64 平台上可用的事件数量。

鼓励那些定期或偶尔使用 FreeBSD PMC 工具的用户测试其典型工作流，并报告任何回归问题。

赞助商：FreeBSD 基金会

### syzkaller 在 FreeBSD 上的应用

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

联系人：Simran Kathpalia <<skathpalia3@gmail.com>>

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

在通过私有实例和公共的 [syzbot](https://syzkaller.appspot.com/freebsd) 实例发现的 bug 修复上，取得了稳定的进展。已修复的 bug 涉及 TCP、[ktrace(2)](https://man.freebsd.org/cgi/man.cgi?query=ktrace\&sektion=2\&format=html)、[kqueue(2)](https://man.freebsd.org/cgi/man.cgi?query=kqueue\&sektion=2\&format=html)、POSIX 定时器、[fork(2)](https://man.freebsd.org/cgi/man.cgi?query=fork\&sektion=2\&format=html)、[crypto(4)](https://man.freebsd.org/cgi/man.cgi?query=crypto\&sektion=4\&format=html)，以及 VFS 和 UFS 代码。同时，syzkaller 的定义扩展工作也在进行，因此遗憾的是，积压任务的规模仍然保持稳定。Simran Kathpalia，参与本年度谷歌编程之夏（GSOC）项目的 FreeBSD 学生，已在扩展 syzkaller 以涵盖更多 FreeBSD 内核方面取得了显著进展。她已为多个系统调用添加了定义，并且还在致力于自动化生成这些定义。

此外，也进行了一些工作，使得设置 syzkaller 实例变得更加容易。例如，许多工作可以通过使用 [BastilleBSD 模板](https://github.com/markjdb/bastille-syzkaller) 来自动化，该模板通过 jail 简化了配置。虽然这个示例仍然需要一些手动配置且不太灵活，但比手动设置实例要简单得多，并有助于推动 FreeBSD jails 的一些计划中的 UI 改进和 bug 修复。

未来的工作包括：

* 进一步努力减少 syzkaller 积压任务的规模。
* 完成一些概念验证工作，将 syzkaller 扩展以模糊测试 Linuxulator 子系统。
* 继续添加系统调用和 ioctl 定义。
* 启用内核 sanitizer 后的自动化模糊测试。

赞助商：FreeBSD 基金会

## 内核

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

### NXP DPAA 驱动程序

联系人：Jakub Klama <<jakub@conclusive.pl>>

Conclusive Engineering 团队正在为 NXP QorIQ Layerscape ARMv8 SoC 以及基于 PowerPC 的 QorIQ SoC 提供对 NXP 数据路径加速架构（[DPAA](https://www.nxp.com/files-static/training_pdf/VFTF09_AN129.pdf)）的支持。

这项工作的重点是为 ARM 目标（如 LS1046A）提供 DPAA 驱动程序及其相关组件（如 BMan、QMan、FMan 和 mEMAC）的干净、原生实现。

预计在 2021 年 Q3 时间框架内完成支持 1Gbps 和 10Gbps MAC 的驱动程序的第一个功能版本。

### 更新 FreeBSD ENA 驱动程序

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

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

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

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

ENA（Elastic Network Adapter）是 Amazon Web Services (AWS) 虚拟化环境中的智能网卡。ENA 驱动程序支持多个发送和接收队列，能够处理高达 100 Gb/s 的网络流量，具体取决于所使用的实例类型。

自上次更新以来已完成的工作：

* 将 ENA 驱动程序更新到 v2.4.0
* 更新 ENA 手册页
* 重构日志系统
* 隐藏未使用的 IO 队列的 sysctl 节点
* 添加对大 LLQ 头部的支持
* 更新 HAL 版本

正在进行的工作：

* 引入完整的内核 RSS API 支持
* 允许重新配置 RSS 间接表和哈希键
* 驱动程序迁移到 iflib 框架的原型开发
* 将 ENA v2.4.0 驱动程序 MFC 到 FreeBSD 11/12/13-STABLE 分支
* 支持在 c6gn/m6i AWS 实例类型上的 netmap
* 修复 detach 函数与一些程序化 sysctl 节点之间的竞争条件
* 添加新的统计计数器

赞助商：亚马逊公司

### 来自 Linux 5.7 的图形驱动更新

链接：[WIP GitHub 仓库](https://github.com/neelchauhan/drm-kmod/tree/5.7-wip) 链接：<https://github.com/neelchauhan/drm-kmod/tree/5.7-wip>

联系人：Neel Chauhan <<nc@FreeBSD.org>>

联系人：Hans Petter Selasky <<hselasky@FreeBSD.org>>

联系人：Emmanuel Vadot <<manu@FreeBSD.org>>

联系人：Mark Linimon <<linimon@FreeBSD.org>>

我们正在尝试将 drm-kmod 图形驱动更新到基于现有 drm-kmod 5.5-wip 分支的 Linux 5.7 代码。

目前，当前版本的 drm-kmod 不支持更新的 GPU，例如英特尔的 Tiger Lake/Iris Xe，这些 GPU 被用于 2020 年款的 HP Spectre x360 等笔记本电脑。这使得我们无法在包含英特尔或 AMD GPU 的新硬件上支持加速图形。

一些任务已经完成，包括：

* 启动 amdgpu
* 控制台启动 i915kms

一些任务尚未完成，包括：

* 启动 i915kms Xorg（当前在 `remap_io_sg()` 页面地址上发生页面错误）
* 启动 amdgpu VA-API
* 启动 radeonkms

我们欢迎对这些未完成任务的帮助，特别是来自那些希望使用新硬件（或一般支持 FreeBSD 作为桌面系统）的用户。

### Intel 无线驱动支持

链接：[iwlwifi 状态 FreeBSD 维基页面](https://wiki.freebsd.org/WiFi/Iwlwifi) 链接：<https://wiki.freebsd.org/WiFi/Iwlwifi>

Intel 无线驱动更新项目旨在为新芯片组提供支持，并加入 mac80211 LinuxKPI 兼容代码。过去，双许可的 Intel 驱动代码已经为 iwm(4) 原生驱动移植，并且使用 LinuxKPI 兼容框架使我们能够直接使用该驱动，仅需非常少的修改。去年开发过程中的多次更新表明，拉取新版本的工作可以在 1-2 小时内完成。

经过一段时间的停顿，兼职工作已经恢复，最后的 LinuxKPI 冲突已解决，其他大部分 LinuxKPI 更改已提交到 FreeBSD 主分支。

在更新过程中，意外遇到固件崩溃问题，已解决，并且 802.11 兼容代码得到了改进。iwlwifi 驱动程序和固件从 iwlwifi-next git 分支和 linux-firmware 仓库进行了更新。

集成到 FreeBSD 主分支的工作因政策原因暂时挂起。有关开发或代码的最新状态，请参考上述维基页面或 freebsd-wireless 邮件列表。

在此，我要感谢所有审阅更改、进行了初步测试、帮助 drm-kmod、以各种方式提供帮助、回答问题、鼓励或耐心等待任何结果或运行代码的人。

赞助商：FreeBSD 基金会

### Kernel sanitizers

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

Sanitizers 是一种 bug 检测工具，利用编译器（在此为 LLVM）插入的工具和运行时状态跟踪相结合来检测 C 代码中的 bug。它们能够自动检测多种类型的 C 编程错误，例如使用已释放内存（use-after-free）和使用未初始化变量，这些错误通常需要花费大量精力才能识别。它们在与回归测试套件或像 [syzkaller](https://github.com/google/syzkaller) 这样的模糊测试工具结合使用时尤其有效。与 Valgrind 等工具不同，软件必须重新编译以启用给定的 sanitizer，但 sanitizer 可以在内核中使用。启用 sanitizer 的内核在运行时会造成显著的性能开销，影响 CPU 利用率和内存使用。

目前正在进行的工作是将一对内核 sanitizer 从 NetBSD 移植到 FreeBSD。这两个 sanitizer 分别是内核地址 sanitizer（KASAN）和内核内存 sanitizer（KMSAN）。KASAN 的移植工作已完成，并已提交到 FreeBSD 的开发分支，同时也提交了一个小的 LLVM 补丁，用于在 FreeBSD 上启用 KASAN 和 KMSAN。KMSAN 会拦截所有内存访问，并通过为每个内存分配保存的隐藏状态验证它们是否有效；有关详细信息，请参见 [kasan(9)](https://man.freebsd.org/cgi/man.cgi?query=kasan\&sektion=9\&format=html)。它可以通过编译 GENERIC-KASAN 内核配置来在 amd64 内核中启用。目前 FreeBSD 回归测试套件在启用 KASAN 的情况下能够通过。

KMSAN 的移植工作目前正在进行，并接近完成。KMSAN 使用 [原始 MemorySanitizer 论文](https://static.googleusercontent.com/media/research.google.com/en/pubs/archive/43308.pdf) 中描述的算法来检测未初始化内存的使用。特别是，它可以检测将未初始化的内核内存复制到用户空间的情况。内核子系统还可以调用 KMSAN 运行时来验证给定缓冲区的状态。例如，这可以用于在网络堆栈中增加检查，以确保出口数据包中的字节未初始化。使用 KMSAN 和 FreeBSD 回归测试套件已经发现了许多 bug，许多已经被修复（可以在 `src` 提交日志中搜索 "KMSAN" 查看示例），并为迄今发现的所有其他问题编写了补丁。

后续的工作包括：

* 完成 KMSAN 的移植并提交到 FreeBSD 主分支。
* 启用 CI 作业，运行启用了 KASAN 和 KMSAN 的测试套件。
* 在启用 KASAN 和 KMSAN 的情况下，添加 [syzbot](https://syzkaller.appspot.com/freebsd) 配置，并修复发现的 bug。
* 减少当前无法通过 KASAN 或 KMSAN 验证的内存访问范围；这主要涉及在内核的各个部分使 amd64 直接映射变为可选，并消除 UMA\_ZONE\_NOFREE 的使用。

赞助商：FreeBSD 基金会

### 更新 Linux 兼容层

联系人：Dmitry Chagin <<dchagin@FreeBSD.org>>\
联系人：Edward Tomasz Napierala <<trasz@FreeBSD.org>>

该项目的目标是提高 FreeBSD 执行未经修改的 Linux 二进制文件的能力。当前特定 Linux 应用程序的支持状态正在 [Linux 应用程序状态 Wiki 页面](https://wiki.freebsd.org/LinuxApps) 上跟踪。

现在接受 `timespec` 参数的 32 位系统调用具有其 64 位 `timespec` 对应项：`clock_settime64(2)`、`clock_gettime64(2)`、`clock_nanosleep_time64(2)`、`clock_getres_time64(2)`、`futex_time64(2)`、`pselect6_time64(2)`、`rt_sigtimedwait_time64(2)`、`utimensat_time64(2)`。

`open(2)` 系统调用的 `O_PATH` 标志现在已得到支持，此外还支持 `fstatat(2)`（需要用于 Ubuntu Focal 中的 Qt5 应用程序）、`fchownat(2)`、`linkat(2)` 和 `utimensat(2)` 的 `AT_EMPTY_PATH` 标志。

现在支持 `F_GETPIPE_SZ` `fcntl(2)`。

`ppoll(2)` 系统调用已经重构，以修复 POLLRDHUP 语义问题。

`COMPAT_LINUX` 和 `COMPAT_LINUX32` 内核构建选项已被移除；这些选项容易混淆且功能不完全。这不影响通常使用作为内核模块加载的 Linuxulator 设置。

FreeBSD 内核现在可以为 Linux 进程生成核心转储，支持 amd64 和 arm64 架构。这些核心可以使用 Linux 的 `gdb(1)` 进行分析。

对 `ptrace(2)` 实现进行了多个修复，结果是 Linux 的 `strace(1)` 在多线程程序中不再出现混乱。

内核版本已升级到 4.4.0，以满足新的 Arch Linux 二进制文件的需求。

对 arm64 上的 Linuxulator 进行了许多修复，从 ELF 辅助向量（auxv）和线程局部存储（TLS）修复到文档改进。目前正在进行的工作包括使 arm64 上的 Linuxulator 达到与 amd64 上相同的水平，还在改进 vDSO 功能。

Port `sysutils/debootstrap` 及其对应的 `debootstrap` 包现在也支持 arm64，而不仅仅是 x86。它现在也更快了。同时，启动脚本也进行了进一步改进。

赞助商：EPSRC

### 支持 NXP LS1028A SoC

联系人：Kornel Dulęba <<mindal@semihalf.com>>

联系人：Lukasz Hajec <<lha@semihalf.com>>

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

Semihalf 团队正在为 [NXP LS1028A](https://www.nxp.com/products/processors-and-microcontrollers/arm-processors/layerscape-processors/layerscape-1028a-applications-processor:LS1028A) SoC 添加 FreeBSD 支持。

NXP LS1028A SoC 是一款双核 64 位 ARMv8 Cortex-A72 应用处理器，具有高速外设，如 2 个支持时间敏感网络（TSN）的以太网控制器、四端口 TSN 启用交换机、PCIe、SD/MMC、USB3.0 等。

新增的支持包括：

* ENETC 以太网和 MDIO 控制器 [驱动程序](https://cgit.freebsd.org/src/log/sys/dev/enetc)
* LS1028A 支持和 [FSL SDHCI 驱动程序](https://cgit.freebsd.org/src/log/sys/dev/sdhci/sdhci_fsl_fdt.c) 的其他改进
* LS1028A 时钟生成器 [驱动程序](https://cgit.freebsd.org/src/commit/?id=4dfb620ea4a7a443284bdcf39c8de1f75cd8c80c)
* 通用 PCI 改进：
  * 为 PCI 添加 ofw 接口支持 - 提交 [28c4e511c23f](https://cgit.freebsd.org/src/commit/?id=28c4e511c23f8b7fd131a13cc2a027aefcb520b7) 和 [40429103cd0](https://cgit.freebsd.org/src/commit/?id=240429103cd05bcecb20fbfd8310cf3faff39681)
  * 清理并为 pci\_host\_generic\_fdt 中的 DTS 节点映射到 PCI 设备添加适当支持 - 提交 [f0f7b0868a94](https://cgit.freebsd.org/src/commit/?id=f0f7b0868a94d33ca3362702832b772bc01c65d6) 和 [ea52e815887b](https://cgit.freebsd.org/src/commit/?id=ea52e815887b48f7eb10219777dc89ee0d99e8b6)

待办事项

* 上游四端口 TSN 交换机支持

赞助商：Alstom 集团

### 支持 Marvell ARM64 SoC

联系人：Zyta Szpak <<zr@semihalf.com>>

联系人：Kornel Dulęba <<mindal@semihalf.com>>

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

Semihalf 团队正在为 [Marvell Octeon TX2 CN913x](https://www.marvell.com/content/dam/marvell/en/public-collateral/embedded-processors/marvell-infrastructure-processors-octeon-tx2-cn913x-product-brief-2020-02.pdf) 和 [Armada 7k](https://www.marvell.com/content/dam/marvell/en/public-collateral/embedded-processors/marvell-embedded-processors-armada-7040-product-brief-2017-12.pdf)/[8k](http://wiki.macchiatobin.net/tiki-index.php?page=Armada+8040) SoC 系列改进 FreeBSD 支持。

Marvell Armada 7k8k 和 Octeon TX2 CN913x SoC 系列是四核 64 位 ARMv8 Cortex-A72 处理器，具有包括 10 Gb 以太网、PCIe 3.0、SATA 3.0 和 USB 3.0 在内的高速外设，适用于广泛的网络、存储、安全和工业应用。

尽管这些 SoC 在 FreeBSD HEAD 中基本得到支持，但仍需进行一些改进。

已应用的更改：

* 上游 PCIe 改进
  * PCIe Designware 驱动程序（pci\_dw）修复：
    * 正确设置外部 I/O ATU 窗口 ([提交 57dbb3c25936](https://cgit.freebsd.org/src/commit/?id=57dbb3c25936f0d61fef152eb224ca86a73af0e9))
    * 允许映射超过 4GB 的 ATU 窗口 ([提交 243000b19f8b](https://cgit.freebsd.org/src/commit/?id=243000b19f8b4ab104b584b2d16bc6aa9131c9b5))
  * 通用改进，启用适当的用户空间映射和访问 PCI BARs - 提交 [f2f1ab39c040](https://cgit.freebsd.org/src/commit/?id=f2f1ab39c04088ce53287528549e652cf68cee09) 和 [1c1ead9b94a1](https://cgit.freebsd.org/src/commit/?id=1c1ead9b94a1a731646327ec3b09e8f3acd577b8)
* SDHCI 改进
  * 64 位 DMA 操作 ([提交 7d8700bc291b](https://cgit.freebsd.org/src/commit/?id=7d8700bc291b4b3be1a592cae539f9e682592d9d))
  * sdhci\_xenon UHS 支持 ([提交 43e31350f8f6-4fa977f854e2](https://cgit.freebsd.org/src/log/?id=43e31350f8f67087b641d85520e20176e152dda7\&qt=range\&q=43e31350f8f6%5E..4fa977f854e2))

待办事项

* 改进并合并 ICU 支持重构 ([D28803](https://reviews.freebsd.org/D28803))

赞助商：Marvell

### 重构多播路由

联系人：Wojciech Macek <<wma@semihalf.com>>

Semihalf 团队一直在重构现有的 ip\_mroute 模块。之前的实现已经有 20 多年历史，且未使用现代内核特性。

对锁机制进行了完全重构，消除了为单个任务获取多个锁的情况。部分代码被修改为使用无锁结构，带宽计量器 API 被重构为在单一上下文中工作，路由热路径得到了识别并变得更加高效。所有这些修复帮助实现了多播路由的速度提升超过 5 倍。

新增的重构内容包括：

* mroute: 修复 mrouter 关闭时的竞争条件 [竞争条件](https://cgit.freebsd.org/src/commit/?id=65634ae748e7f6b7b9f11e8838c65060c3f31347)
* mrouter: 不要无条件回环数据包 [回环](https://cgit.freebsd.org/src/commit/?id=0b103f72376b5ec7c9a9d574c976e42805ae88a4)
* ip\_mroute: 重构 bw\_meter API [带宽计量](https://cgit.freebsd.org/src/commit/?id=741afc6233915ba33156c2221aa80d2dd2b76b9c)
* ip\_mroute: 重构 ip\_mroute [锁定](https://cgit.freebsd.org/src/commit/?id=d40cd26a86a79342d175296b74768dd7183fc02b)

赞助商：Stormshield

### VFS 路径描述符 API

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

Unix VFS API，从一个非常高的角度来看，提供了两种接口。一种是基于路径的操作，通常操作元数据，如删除、重命名、更改权限等。第二种是文件描述符操作，典型的如读取、写入、截断等。众所周知的 open(2) 系统调用从路径返回一个文件描述符。

文件描述符是一个可靠的句柄，用于指向目标文件。无论对文件执行了其他什么操作，重命名甚至删除，文件描述符仍然引用相同的文件，且对其进行的任何操作都影响该文件。

直到最近，才有类似的可靠方法来获取文件路径的句柄，并且可以可靠地用于第一类操作。现在，Linux 引入了一些功能，使得这变得可能，FreeBSD 尝试提供一个兼容的 API。

首先，可以通过路径获取文件描述符。它是通过 open(2) 系统调用创建的，当指定 O\_PATH 标志时。返回的描述符不能用于常规的文件操作，它仅标识文件系统命名空间中的一个位置。尝试例如使用它读取或写入会导致 EBADF 错误。但系统在打开时也不会检查目标文件的访问权限。只要进程能够读取目录的文件名内容，open(O\_PATH) 就会成功。

要实际使用这样的描述符，存在一个新标志 AT\_EMPTY\_PATH，它被 \*at(2) 系列系统调用识别。当提供此标志并将路径参数设置为 ""（空路径）时，\*at(2) 系统调用将对 dirfd 参数指定的文件进行操作。

对于例如 fstatat(2)，这并不太令人兴奋，因为已存在的 fstat(2) 可以在任何类型的文件描述符上操作。但考虑到 linkat(2)，结合 AT\_EMPTY\_PATH，它现在允许将任何打开的文件描述符重新链接到命名文件（这需要 root 权限）。其他可用的操作示例有 chownat(2)、chmodat(2) 等；请参见手册页。当提供文件描述符和 AT\_EMPTY\_PATH 时，程序可以确保操作是在特定文件上进行的，而不会因文件被重命名或其他文件替换而发生竞争条件，提供一个不同的文件路径。在使用 O\_PATH 时，我们获得与普通 chmod 相同的访问规则，而无需对文件内容具有读写权限。

将路径描述符转换为可以读取或写入的正常文件描述符的方法是使用 openat(2) 并指定 O\_EMPTY\_PATH 标志。该系统调用检查当前的访问权限并返回正常的描述符。

在 Linux 中，并没有 O\_EMPTY\_PATH 标志的等效实现。相反，它实现了我们等效的 fdescfs，它在 open(2) 对 /dev/fd/N 名称进行操作时打开底层文件。这种行为与现有的 FreeBSD fdescfs 暴露的操作不兼容，因此无法改变默认挂载在 /dev/fd 上的 fdescfs。为 fdescfs 添加了一个新挂载标志 "nodup"，它模拟了 Linux 中的行为，用于由 vnodes 支持的描述符。详细信息请参见 fdescfs(5) 手册页。

所描述的新的 Unix VFS API 已被 Samba 使用。将其添加到 FreeBSD 应该能使我们的系统仍然成为 Samba 的一流平台，并且这是 Samba 移植者的请求。

赞助商：FreeBSD 基金会

### pf 的 Dummynet 支持

链接： [dummynet 进行中的代码库](https://github.com/kprovost/freebsd-src/tree/netgate/dummynet) 网址：<https://github.com/kprovost/freebsd-src/tree/netgate/dummynet>

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

pf 防火墙当前依赖于 ALTQ 进行流量整形。ALTQ 在默认的内核构建中没有启用，且与并非所有网络驱动程序兼容（仅与实现 if\_start() 的驱动程序兼容）。

目前正在进行工作，旨在为 pf 添加对 dummynet 流量整形的支持。Dummynet 已经被 ipfw 用于流量整形。

作为这项工作的一部分，正在为 dummynet 添加自动化测试，涵盖 ipfw 和 pf。这需要扩展 dummynet 以支持 vnet，Tom Jones <<thj@FreeBSD.org>> 提供了这项贡献。

尽管这项工作尚未完成，但欢迎对架构和功能提供反馈。

待办事项

* 添加更多测试用例
* 调试 IPv6 队列测试用例失败
* 修复 vnet 关闭时如果仍有 IPv6 数据包排队导致的 panic（这些数据包最终会被发送到 ip6\_input()，并且现在已释放的 rcvif 指针会导致错误。）

赞助商：Rubicon Communications, LLC ("Netgate")

### pf 的以太网支持

链接： [pf-link 进行中的代码库](https://github.com/kprovost/freebsd-src/tree/netgate/pf-link) 网址：<https://github.com/kprovost/freebsd-src/tree/netgate/pf-link>

正在进行工作，旨在为 pf 添加基本的以太网过滤支持。

这将允许使用第二层地址标记数据包，以便在现有的 pf 代码中进行后续过滤或流量整形。第二层代码是严格无状态的。

此功能的预期使用场景是改善 pf 在强制门户设置中的能力（例如，根据客户端 MAC 地址允许或拒绝互联网访问）。

待办事项

* （可选）锚点支持
* 将 nvlist 接口代码移入 libpfctl
* 审计 nvlist 代码中的错误（最近在现有的 ioctl 调用替代方案中发现了多个错误）
* （可选）VLAN ID 过滤
* （可选）MAC 地址表支持

尽管这项工作尚未完成，但欢迎对架构和功能提出反馈。

赞助商：Rubicon Communications, LLC ("Netgate")

### pf 的 syncookie 支持

链接： [pf syncookie 进行中的代码库](https://github.com/kprovost/freebsd-src/tree/modirum/pf-syncookie-cleanup) 网址：<https://github.com/kprovost/freebsd-src/tree/modirum/pf-syncookie-cleanup>

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

SYN cookies 是一种抵抗 SYN 洪水拒绝服务攻击的机制。FreeBSD 网络堆栈自 2001 年以来便支持此机制。然而，这并不能防止此类攻击通过洪水般的 SYN 请求填充 pf 状态表。

OpenBSD 于 2018 年将此机制从 FreeBSD 移植到了其 pf 中。现在，这段代码正在被移植到 FreeBSD 的 pf 中。

该工作仍在进行中，但当前版本展示了基本功能。下一步包括进一步的测试、额外的自动化测试用例以及实现自适应模式。

自适应模式在 FreeBSD 的 pf 中需要更多的注意，与 OpenBSD 做法不同，因为锁策略有所不同。

赞助商：Modirum MDPay

### 支持 Microchip PolarFire SoC

联系人：Jakub Klama <<jakub@conclusive.pl>>

联系人：Wojciech Kloska <<wojciech@conclusive.pl>>

Conclusive Engineering 团队正在为 Microchip PolarFire FPGA SoC 芯片系列添加支持。PolarFire SoC 基于五个 64 位硬件 RISC-V 核心，其中四个配备了 MMU，能够运行 FreeBSD。该 SoC 还具有 FPGA 和各种外设，包括千兆以太网、PCIe 和多功能 12.3Gbps SERDES 收发器。

在撰写时，已完成以下任务：

* 初步平台启动，支持 SMP
* 添加创建适用于 RISC-V 的 "booti" 风格镜像的支持
* 以太网支持

进行中的工作：

* 时钟和复位域支持
* USB 驱动程序
* PCI Express 驱动程序
* I2C 驱动程序
* SPI 驱动程序
* GPIO 驱动程序
* eNVM 驱动程序

### Racct（资源计费）错误修复和改进

链接： [racct PR for runj](https://github.com/samuelkarp/runj/pull/11) 网址：<https://github.com/samuelkarp/runj/pull/11>

联系人：Cyril Zhang <<cyril@freebsdfoundation.org>>

racct 是 FreeBSD 内核中的一个资源计费系统。它跟踪资源使用情况，如内存使用和 CPU 运行时间。此外，它提供了一个易于使用的接口，用于限制诸如用户和 jails 等实体的资源使用。例如，可能需要设置限制，以控制一个 jail 可以使用的 CPU 数量。

我与其他 FreeBSD 开发人员讨论了将 racct 支持作为实验性功能添加到符合 OCI 标准的容器运行时 runj（由 Samuel Karp 开发）的前景。这将模仿 Linux 的 cgroups 功能，该功能允许 Linux 容器设置内存、CPU 使用等限制。它还允许我们考虑将 FreeBSD 特定的配置添加到 OCI 规范中。作为这项工作的部分内容，我一直在改进 racct，使其在与 jails 一起使用时更加实用。

改进内容包括：

* 一个新的、更精确的方案，用于计算 jail 中所有进程的总 CPU 使用情况
* 修复一个错误，该错误错误地计算了所有子进程的运行时间，将其计入父进程的运行时间
* 修复一个错误，该错误在进程退出时错误地减少了持久资源（如共享内存）的计数
* 计入 POSIX 特性，如共享内存和信号量，之前仅计入了 SysV 特性
* 添加测试

欢迎随时联系。

赞助商：FreeBSD 基金会

### 更新 OpenZFS RAIDZ 扩展

联系人：Matthew Ahrens <<matt@mahrens.org>>

链接：

[OpenZFS 拉取请求](https://github.com/openzfs/zfs/pull/12225) 网址：<https://github.com/openzfs/zfs/pull/12225>

[2021 年 FreeBSD 开发者峰会视频](https://youtu.be/3SUKJye54aI?t=6166) 网址：<https://youtu.be/3SUKJye54aI?t=6166>

[2021 年 FreeBSD 开发者峰会幻灯片](https://docs.google.com/presentation/d/1FeQgEwChrtNQBHfWSNsPK3Y53O5BnPh3Cz5nRa5GAQY/view) 网址：<https://docs.google.com/presentation/d/1FeQgEwChrtNQBHfWSNsPK3Y53O5BnPh3Cz5nRa5GAQY/view>

[来自 Ars Technica 的新闻文章](https://arstechnica.com/gadgets/2021/06/raidz-expansion-code-lands-in-openzfs-master/) 网址：<https://arstechnica.com/gadgets/2021/06/raidz-expansion-code-lands-in-openzfs-master/>

#### 项目

此功能可将硬盘一次性添加到 RAID-Z 组中，逐步扩展其容量。此功能对于小型池（通常只有一个 RAID-Z 组）特别有用，因为这些池没有足够的硬件来通过添加一个完整的新 RAID-Z 组（通常是将硬盘数量加倍）来扩展容量。

FreeBSD 的 ZFS 实现来源于 OpenZFS 项目。此工作将被整合到 OpenZFS 仓库中，并支持 FreeBSD 和 Linux。

#### 状态

该功能已完成实现，且已提交拉取请求。

#### 剩余工作

剩余工作包括一些代码清理、设计文档编写以及解决测试失败的问题。

我们还需要征求代码审查员的意见，并回应代码审查反馈。

赞助商：FreeBSD 基金会

### Microchip Switchtec 支持

联系人：Jakub Klama <<jakub@conclusive.pl>>

联系人：Paweł Eichler <<pawel@conclusive.pl>>

Conclusive Engineering 团队正在为 Microchip Switchtec PCI Express 存储交换机系列添加支持。

Switchtec 设备是 PCI Express Gen3/Gen4/Gen5 包交换机，提供内置的 NTB 支持，最多可支持 48 个 NT 分区，广泛的诊断功能和可编程固件，可用于实现额外的功能，如 NVMe 外壳管理。

在撰写时，已完成以下功能：

* NTB 支持
* 固件管理和诊断功能

进行中的工作：

* 事件日志记录
* NVMe 外壳管理

这项工作由 AGILESTORAGE Europe GmbH 共同赞助。

## Ports

影响 Ports 的更改，无论是触及整个树的大规模更改，还是针对单个 Port 的更改。

### Port Emacs

链接：

[PR255706](https://bugs.freebsd.org255706/) 网址：[https://bugs.freebsd.org255706](https://bugs.freebsd.org255706/)

[提交 bb995aaf6e25e33b028fa4b32321864b48f49055](https://cgit.freebsd.org/ports/commit/?id=bb995aaf6e25e33b028fa4b32321864b48f49055) 网址：<https://cgit.freebsd.org/ports/commit/?id=bb995aaf6e25e33b028fa4b32321864b48f49055>

联系人：Emacs Port 团队 <<emacs@FreeBSD.org>>

Emacs 开发 Port editors/emacs-devel 继续每月更新两次，以与上游的主分支保持同步。2021 年 6 月首次更新时的一个显著变化是添加了 Port 选项 NATIVECOMP。NATIVECOMP 增加了通过 libgccjit 将 Emacs Lisp 编译为本地代码的支持，这一功能最早在 lang/gcc11-devel 中启用，现在也包含在 lang/gcc11 中。

有关 Emacs Lisp 的本地编译的更多信息，请参见 [Gcc Emacs Wiki](https://www.emacswiki.org/emacs/GccEmacs)。

### FreeBSD Erlang 生态系统 Port 更新

链接：

[FreeBSD Erlang wiki](https://wiki.freebsd.org/Erlang) 网址：<https://wiki.freebsd.org/Erlang>

[Erlang/OTP 语言](https://erlang.org/) 网址：<https://erlang.org/>

[Elixir 语言](https://elixir-lang.org/) 网址：<https://elixir-lang.org/>

[Gleam 语言](https://gleam.run/) 网址：<https://gleam.run/>

联系人：FreeBSD Erlang 邮件列表 <<erlang@FreeBSD.org>>

Erlang 运行时系统，通常称为 BEAM，提供了一个运行时环境，供多个编程语言和应用程序在 FreeBSD Ports 中使用。

2021 年的显著变化包括：

* 添加了 OTP24，支持 amd64 架构的 JIT 编译，并弃用了以前的 NATIVE 和 HIPE 选项
* 为 `devel/rebar3` 构建工具修复了安全漏洞
* 为 [Gleam 语言](https://gleam.run/) 添加了新的语言运行时
* 在过去一个季度中，为 Erlang 运行时进行了超过 40 次的点发布更新

由于上游 Erlang OTP 团队承诺支持当前的两个版本，越来越多的点更新正在发布到 OTP22-24，但对于旧版本的 Erlang 运行时，更新和修复的可能性较小，因此这些版本现在不太可能收到安全和 bug 修复。

Erlang 团队计划：

* 在 2021Q3 中弃用所有不兼容过去两年 OTP 发布版本的 Port
* 在 2021Q4 删除已弃用的运行时
* 删除直接依赖 Erlang 和 Elixir 语言的 Port，因为它们通常通过 `mix` 和 `rebar3` 工具进行安装，这些是标准的社区构建工具链
* 更新 RabbitMQ 至下一个主要版本，该版本需要 OTP23 最低版本，并引入对 JIT 的支持
* 将主 `lang/erlang` 运行时版本提升至 OTP24，因为 JIT 非常强大

欢迎进行额外的测试和社区贡献，特别是如果你能帮助测试特定 Ports 更新，请通过邮件列表与我们联系。

### Ports 中的 GCC (lang/gcc\*)

链接： [GCC 项目](https://gcc.gnu.org/) 网址：<https://gcc.gnu.org>

[GCC 10 发布系列](https://gcc.gnu.org/gcc-10/) 网址：<https://gcc.gnu.org/gcc-10/>

联系人：Gerald Pfeifer <<gerald@pfeifer.com>>

在 linimon@ 的大力帮助下，GCC 10 成为 Ports 中的默认 GCC 版本，带来了许多改进和修复。

展望未来，GCC 11 现在已经作为 Port 提供，并可以通过 Mk/bsd.default-versions.mk 使用作为 GCC\_DEFAULT。

现代的 GCC Port 现在支持 powerpcle，并且大部分相关更改也已经上游提交。

在基础设施方面，USE\_GCC 现在允许仅在构建时作为依赖项，例如 USE\_GCC=yes:build。

如果你正在开发其他 Port，USE\_GCC=any 已经成为过去式，USE\_GCC 不再尝试使用旧的基于 4.2 的系统编译器（`/usr/bin/gcc`），即使该编译器存在。

最后，在维护了 FreeBSD 的 Port lang/gcc\* 约二十年后，时机已到，我将逐步卸下这一责任。如果你愿意提供帮助，请与我们联系——我们不想简单地放弃维护工作，愿意与你合作并过渡。

### FreeBSD 上的 KDE

链接： [KDE FreeBSD](https://freebsd.kde.org/) 网址：<https://freebsd.kde.org/>

[KDE Community FreeBSD](https://community.kde.org/FreeBSD) 网址：<https://community.kde.org/FreeBSD>

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

KDE on FreeBSD 项目的目标是将 KDE 社区开发的所有软件打包到 FreeBSD Ports 中。这些软件包括一个完整的桌面环境，称为 KDE Plasma，图形应用程序、即时通讯工具、视频编辑套件，以及一个茶时计和其他数百个可以在任何 FreeBSD 机器上使用的应用程序。

KDE 团队（kde@）也是 desktop@ 和 x11@ 的一部分，构建软件栈，使 FreeBSD 成为一个美观且适合日常使用的基于图形的桌面机器。

#### 组织

KDE-FreeBSD 团队已将其主要的沟通渠道（在 IRC 上）与其他 [FreeBSD 社区](https://wiki.freebsd.org/IRC/Official-FreeBSD-IRC-channels-now-on-Libera-Chat) 合并。现在，你可以在 [Libera.Chat](https://libera.chat/) 上找到我们，在 `#freebsd-desktop` 频道。

为什么要重命名？自 2003 年以来，我们一直使用 `#kde-freebsd`。然而，IRC 网络环境的变化使我们迁移到 Libera.Chat，并与其他桌面开发者一起加入 — 毕竟我们有许多共同关心的问题。

#### 大局观

* 新的 KDE Gear 发布 — 所有不特指 KDE Frameworks 或 KDE Plasma 的 KDE 软件产品，以协调的方式定期发布 — 在发布的当天已进入 Ports。Albert Astals Cid 撰写了一个很好的 [博客文章](https://tsdgeos.blogspot.com/2021/04/kde-gear-2104-is-coming-this-week-but.html)，解释了 KDE Gear 背后的基本理念。
* Wayland 支持已在 KDE Plasma 中上线。现在，可以在启用了 DRM 的图形卡（Intel iGPU 或 AMDGPU）的 FreeBSD 机器上运行 KDE Plasma Wayland 环境。
* KDE 应用程序的依赖关系减少取得了缓慢但稳定的进展。大多数 FreeBSD Port 都带有“电池” — 包括所有用于构建应用程序的工具，但实际上，一个 IDE 不应该是你的照片库应用程序的依赖项。
* 一些 Qt Port 中的 X11 被设置为可选；这为“仅 Wayland”的 Qt 或“仅 Framebuffer”提供了可能性。默认情况下，X11 仍然启用。
* Qt6 卡在了“它可以构建，部分运行，但不足以满足需求”的阶段，并未进入 Ports；它可能会等到下一个季度发布后再添加。

#### 亮点

* Poppler、CMake、polkit 等 FreeBSD 上的自由桌面基础设施都收到了定期更新。
* 在三方合并 `extproc/kdiff3` 时遇到了一些严重问题。Ed Maste 提出了该问题，并发现它已在上游修复。
* `x11/konsole`，该终端模拟器，无法接受 `/bin/sh` 作为 shell；这个问题在 FreeBSD 上比在 Linux 上更为突出，因为 Linux 上通常选择 `bash`。该问题已在上游解决，并已进入 Ports。
* 定期发布的 KDE Frameworks 更新（每月）和 KDE Plasma 更新（每月）以及 KDE Gear，都已在上游发布并顺利进入 FreeBSD Ports。上游的 CI 继续更新，以反映最新的 FreeBSD Ports，从而确保它与 KDE-on-FreeBSD 团队为 FreeBSD 用户提供的内容一致。

### FreeBSD 上的 libglvnd

链接： [libglvnd](https://gitlab.freedesktop.org/glvnd/libglvnd) 网址：<https://gitlab.freedesktop.org/glvnd/libglvnd>

联系人：Kevin Bowling <<kbowling@FreeBSD.org>>

libglvnd（GL Vendor-Neutral Dispatch）“是一个供应商中立的调度层，用于在多个供应商之间调度 OpenGL API 调用。它允许来自不同供应商的多个驱动程序共存于同一文件系统中，并在运行时确定将每个 API 调用调度给哪个供应商。GLX 和 EGL 都得到支持，可以与 OpenGL 和 OpenGL ES 任意组合使用。”

将其作为 FreeBSD Ports 中的默认 GL 实现，将解锁许多工作并使我们与未来的图形堆栈保持一致。

它清理了在一个系统或镜像上拥有多个 GL 实现的能力，消除了对这些库的“二选一”硬链接的需求。这样可以支持 Nvidia Optimus 设置，或使用你的高级 PCIe 互联来支持多个供应商的 GPU，无论出于何种原因。它还将支持未来的 Mesa 版本，在这些版本中，可以使用一个并行的 LTS（长期支持）分支安装，以填补在新版 Mesa 版本中将被移除的驱动程序。

像 KDE 和 Firefox 这样的软件可以在 X11（与 OpenGL）和 Wayland 下使用 EGL 上下文，在即将发布的 Firefox 版本中，使用 EGL 上下文时的速度可能与 Google Chrome 相匹配。

该库使用各种实现细节来最小化间接调用带来的性能影响，并为 aarch64、amd64、armv7、i386 和 powerpc64（ELFv2）提供平台特定的支持。

最后，它通过提供没有 X11 的 OpenGL 实现来减少过度链接，以支持无头服务器或 kms 或 Wayland 环境。

如果此更改有任何残留影响，请将 kbowling@ 添加到 PR 观察者中。

感谢 Jan Beich <<jbeich@FreeBSD.org>> 进行 Ports 基础设施工作，以及 Matt Turner（Gentoo/freedesktop）帮助我理解架构及如何处理这种源代码分发的更改，并合并了上游的 libGLU 更改，以支持在没有 X11 依赖项的情况下构建。

### 在科学领域的 FreeBSD

链接：

[Biostar 手册工具的元 Port](https://www.freshports.org/biology/biostar-tools/) 网址：<https://www.freshports.org/biology/biostar-tools/>

[简单、便携的集群管理器](https://acadix.biz/spcm.php) 网址：<https://acadix.biz/spcm.php>

[桌面安装程序](https://acadix.biz/desktop-installer.php) 网址：<https://acadix.biz/desktop-installer.php>

联系人：Jason Bacon <<jwb@FreeBSD.org>>

联系人：Yuri Victorovich <<yuri@FreeBSD.org>>

FreeBSD 长期以来为科学计算提供了坚实的基础，其卓越的可靠性、网络和存储性能，以及 FreeBSD Ports 系统，不仅提供了大量的科学软件，还通过允许用户使用额外的编译器标志轻松地从源代码安装来优化安装过程。

上一季度，我们引入了 sysutils/spcm（简单、便携的集群管理器），这是一个集成的工具集，用于基于 FreeBSD 构建和管理高性能计算（HPC）集群。

本季度，我们看到了生物学类别的快速增长，许多成果最终体现在 biology/biostar-tools 元 Port 的完成上。这个元 Port 安装了几乎所有生物信息学培训人员需要的软件。现在，生物信息学学生在 FreeBSD 上安装和运行所需的软件，比在任何其他平台上都更容易。生物信息学是分析如基因和蛋白质序列等生物数据的学科。

我们还在生物学类别中达到了 200 个 Port 的里程碑，这要感谢 21 位维护者的贡献。软件安装一直是并且仍然是许多研究人员面临的主要难题。研究人员常常尝试“原始人”安装方式，遵循开发者网站上关于手动运行配置脚本和 make 的简单说明。在许多其他情况下，他们则与低质量的应用容器或易出错、难以使用的第三方包管理器作斗争。安装所需软件的问题经常导致研究的重大延误，甚至最终失败。FreeBSD Ports 中科学软件的快速增长，再加上 SPCM 的引入和 sysutils/desktop-installer 的许多改进，消除了许多可能延迟或阻止科学发现的障碍。

## 文档

文档树、手册页或外部书籍/文档中的值得注意的更改。

### FreeBSD 在 Weblate 上的翻译

链接： [在 Weblate 上翻译 FreeBSD](https://wiki.freebsd.org/Doc/Translation/Weblate) 网址：<https://wiki.freebsd.org/Doc/Translation/Weblate>

[FreeBSD Weblate 实例](https://translate-dev.freebsd.org/) 网址：<https://translate-dev.freebsd.org/>

联系人：Danilo G. Baio <<dbaio@FreeBSD.org>>

Weblate 项目 [文档（书籍和文章）](https://translate-dev.freebsd.org/projects/documentation/) 向公众开放。

自动翻译功能已在所有语言中执行，重新使用了前一个项目（Docbook）的翻译。

关于新翻译过程仍存在待处理问题，状态可以在 [IdeaList#Translation](https://wiki.freebsd.org/Doc/IdeaList#Translation) 上查看。

网站翻译尚未通过 Weblate 发布。因此，我们决定暂时保留它，直到我们获得有关重新设计网站和文档门户的工作组的更多细节，以避免重复工作。

#### FreeBSD 网站改版 - WebApps 工作组

联系人：Sergio Carlavilla <<carlavilla@FreeBSD.org>>

该工作组负责创建新的 FreeBSD 文档门户；并重新设计 FreeBSD 主网站及其组件。FreeBSD 开发者可以在 FreeBSD Slack 频道 #wg-www21 中关注并加入该工作组。该工作将分为四个阶段：

1. 文档门户的重新设计\
   创建一个新的设计，支持响应式布局和全局搜索。（*进行中*）
2. Web 上手册页的重新设计\
   使用 mandoc 生成 HTML 页面的脚本。（*尚未开始*）
3. Web 上 Port 页面的重新设计\
   创建一个应用程序门户的 Port 脚本。（*尚未开始*）
4. FreeBSD 主网站的重新设计\
   新设计，支持响应式布局和暗色主题。（*尚未开始*）

## 杂项

无法归类的项目。

## 第三方项目

许多项目在 FreeBSD 的基础上构建，或将 FreeBSD 的组件融入到他们的项目中。由于这些项目可能对更广泛的 FreeBSD 社区有所帮助，我们有时会在季度报告中包括这些项目提交的简要更新。FreeBSD 项目对这些提交中的任何声明的准确性或真实性不做任何表态。

### FreshPorts

链接： [FreshPorts](https://freshports.org/) 网址：<https://freshports.org/>

[FreshPorts 博客](https://news.freshports.org/) 网址：<https://news.freshports.org/>

联系人：Dan Langille <<dvl@FreeBSD.org>>

FreshPorts 及其姊妹网站 FreshSource 已经报告了 20 年的 FreeBSD 提交记录。它们覆盖所有提交，但主要聚焦于 Ports。

FreshPorts 跟踪提交并从 Port 的 Makefile 中提取数据，以创建一个对 Ports 开发者和 Ports 用户都有用的数据库。

例如，<https://www.freshports.org/security/acme.sh/> 展示了这个 Port 的历史，从 2017 年 5 月开始。

#### git

从 subversion 到 git 的过渡非常顺利。现在工作集中在分支上。我们接近将所有分支（包括 src、doc 和 ports）整合到网站中。

现在，网站每三分钟查询一次主仓库并拉取更新。git 下的提交处理更快、更可靠。从 git 直接创建 XML 而不是解析提交邮件具有其优势。

#### 寻求帮助

自 [上一份报告](https://www.freebsd.org/status/report-2020-10-2020-12.html#FreshPorts) 以来，[Jethro Nederhof](https://github.com/jethron) 在将网站升级为 HTML5 及其现代化方面做了出色的工作。对于用户而言，没有什么戏剧性的变化，因为大多数工作都发生在幕后。

我们始终需要更多的帮手。网站大多能自我运行，几乎不需要持续的维护（pkg 升级、操作系统补丁等）。大多数工作是设计新功能、修复错误、识别问题以及与用户讨论。Ports 的变化通常对网站影响不大。

任务包括：

* 网站的 [问题列表](https://github.com/FreshPorts/freshports/issues)。
* [git\_proc\_commit 项目](https://github.com/FreshPorts/git_proc_commit/issues) 也有一组问题，主要是 Python 的，有些可能与网站相关。
* 需要文档来说明各个项目如何协同工作及其工作原理。
* 我有一些 subversion 仓库需要转换为 git 并上传到 GitHub。这将使人们能够处理后台代码（提交入口和处理）。
* 可以更新 FreshSource 网站到现代标准，并将仓库转换为 git。

感谢你的支持。

### helloSystem

链接： [文档](https://hellosystem.github.io/docs/) 网址：<https://hellosystem.github.io/>

联系人：Simon Peter <<probono@puredarwin.org>>

联系人：在 `irc.libera.chat` 上的 `#helloSystem`，镜像到 [Matrix 上的 `#helloSystem:matrix.org`](https://matrix.to/#/%23helloSystem:matrix.org?via=matrix.org)

#### 什么是 helloSystem？

helloSystem 是一款基于 FreeBSD 的桌面操作系统，专注于简洁、优雅和可用性。其设计遵循“少即是多”哲学。

#### 2021 年第二季度状态

* helloSystem 的 0.5.0 版本已发布。可安装的 Live ISO 镜像已上线。下载和更新日志请见 <https://github.com/helloSystem/ISO/releases/tag/r0.5.0>
* helloSystem 参加了 2021 年 FreeBSD 开发者峰会的桌面小组讨论。视频可观看：<https://www.youtube.com/watch?v=3SUKJye54aI&t=11410s>
* 工作已开始为 0.6.0 版本进行准备。感谢贡献的功能和 bug 修复。
  * 改进了空间文件管理器
  * 切换到 KWin（如果它的依赖项可以大幅减少，以便在 KDE Plasma 外使用）

可以在 <https://github.com/helloSystem/ISO/releases> 下载实验版和发布版的 Live ISO 镜像。

#### 贡献

[在多个领域寻求帮助](https://github.com/helloSystem/hello/blob/master/CONTRIBUTING.md)，特别是在 FreeBSD 核心操作系统和内核，以及 Qt/C++ 方面。

### 容器与 FreeBSD：Pot、Potluck 和 Potman

链接： [github 上的 Pot](https://pot.pizzamig.dev/) 网址：<https://github.com/pizzamig/pot>

[Potluck 仓库与项目](https://potluck.honeyguide.net/) 网址：<https://potluck.honeyguide.net/>

[Potluck 在 github 上](https://github.com/hny-gd/potluck) 网址：<https://github.com/hny-gd/potluck>

[Potman 在 github 上](https://github.com/grembo/potman) 网址：<https://github.com/grembo/potman>

联系人：Luca Pizzamiglio (Pot) <<pizzamig@freebsd.org>>

联系人：Stephan Lichtenauer (Potluck) <<sl@honeyguide.eu>>

联系人：Michael Gmelin (Potman) <<grembo@FreeBSD.org>>

Pot 是一款 jail 管理工具，[还支持通过 Nomad 进行编排](https://www.freebsd.org/news/status/report-2020-01-2020-03/#pot-and-the-nomad-pot-driver)。

在上一个季度，[v0.12.0](https://github.com/pizzamig/pot/releases/tag/0.12.0) 版本发布，并且许多新改进自那时以来一直在开发中。当前开发的主要新特性是能够 [创建分层 pot 镜像](https://github.com/pizzamig/pot/issues/148)，例如，在构建管道中快速添加应用程序到更大的基础镜像中，然后通过 Ansible 或 Nomad 部署。

Potluck 旨在成为 FreeBSD 和 Pot 的平台，类似于 Dockerhub 对 Linux 和 Docker 的作用：一个 Pot 版本和完整镜像的仓库，用于与 Pot 以及在许多情况下 Nomad 一起使用。

在这里，所有镜像首次为 FreeBSD 13.0 构建，FreeBSD 11.4 支持已被移除，并且 12.2 镜像已升级到最新的包版本。此外，还添加了新的镜像，例如 [PostgreSQL Patroni 集群](https://potluck.honeyguide.net/blog/postgresql-patroni/)，或者扩展了 [Nomad](https://potluck.honeyguide.net/blog/nomad-server/) 和 [Consul](https://potluck.honeyguide.net/blog/consul/) 镜像，以支持集群、加密和新的 [Vault](https://potluck.honeyguide.net/blog/vault/) 镜像。

另外，[PoC 已完成](https://honeyguide.eu/posts/potluck-containerd-poc/)，展示了 Potluck 镜像可以轻松与 containerd 和 [runj](https://github.com/samuelkarp/runj) 一起使用。

Potman 旨在简化基于 Potluck 方法的 Pot 镜像的构建，使用 Vagrant 和 VirtualBox，例如作为软件开发中的 DevOps 工作流的一部分，包括测试和将其发布到仓库。

在这里，上个季度，使用和文档已得到改善。

未来的计划包括完成分层 Pot 镜像、更多 Potman 工作流功能以及更多新和改进的 Potluck 镜像。

一如既往，欢迎反馈和补丁。
