本报告涉及了 2020 年 7 月至 9 月期间与 FreeBSD 相关的项目,这是计划中的四份报告中的第三份。
这一季度带来了 FreeBSD 项目和社区的一系列新增内容和变更,涉及多个团队和人员,涉及了从架构、持续集成、无线网络和驱动程序,到 drm、桌面以及第三方项目的工作,还有几份团队报告,以及其他许多无法一一列举的有趣话题。
由于全球仍然受到疫情影响,我们希望这份报告能够提醒大家,尽管我们身处不同地方,但人们依然可以通过合作完成优秀的工作。
我们希望你在阅读这份报告时能感到和我们在制作它时一样的兴趣。
Daniel Ebdrup Jensen,代表季度团队。
来自各个官方和半官方团队的条目,详情请见 管理页面。
联系人:Deb Goodkin <deb@FreeBSDFoundation.org>
FreeBSD 基金会是一家 501(c)(3) 非营利组织,致力于支持和推广全球范围内的 FreeBSD 项目和社区。资金来自个人和企业捐款,用于赞助和管理软件开发项目、会议和开发者峰会,并为 FreeBSD 贡献者提供差旅补助。基金会采购并支持硬件以改善和维护 FreeBSD 基础设施,并提供资源以提升安全性、质量保证和发布工程工作;出版营销材料以推广、教育和支持 FreeBSD 项目;促进商业厂商和 FreeBSD 开发者之间的合作;最终,代表 FreeBSD 项目执行合同、许可协议和其他需要合法实体的法律安排。
以下是我们上个季度为支持 FreeBSD 所做的一些亮点:
与其他组织一样,我们为所有员工制定了在家工作的政策,并对员工出差进行了临时禁令。我们继续支持社区和项目,但由于一些优先事项的变化以及部分员工子女照料的限制,我们的部分工作和响应可能会有所延迟。
我们帮助促进商业用户与 FreeBSD 开发者之间的合作。我们还与公司会面,讨论他们的需求,并将这些信息反馈给项目组。毫不奇怪,由于在第三季度的居家令以及我们公司出差禁令的结合,面对面的会议几乎不存在。然而,团队仍然能够继续与我们的合作伙伴和商业用户进行虚拟会议。这些会议帮助我们了解 FreeBSD 在一些应用中的使用情况。
我们目前正在安排第四季度的 Zoom 公司会议,如果你希望与我们安排会议,请联系我们。
上季度我们筹集了 $192,874.43!感谢那些伸出援手的个人和组织,帮助我们赞助我们的努力。我们特别感谢 Arm 在上季度的慷慨捐助,帮助我们将 2020 年的筹款总额提升至 $521,000。我们希望其他组织能效仿 Arm,回馈支持我们继续支持 FreeBSD。
这是一个充满挑战的时期,我们非常感激每一笔从 $5 到 $150,000 的捐款。我们仍然在这里,倾尽全力支持 FreeBSD!
我们的资金 100% 来自捐款,这些资金用于 FreeBSD 的软件开发、全球范围内的 FreeBSD 推广、确保 FreeBSD 安全、持续集成改进、赞助与 BSD 相关的计算机会议(即使是虚拟活动!)、为项目提供法律支持以及其他多个领域。
请考虑 捐款以帮助我们继续并扩大对 FreeBSD 的支持。
我们还提供了合作伙伴计划,为我们的较大商业捐助者提供更多福利。了解更多关于 合作伙伴计划 的信息,并与你的公司分享!
许多 FreeBSD 基金会的赞助项目在第三季度启动、继续进行或完成了项目,包括:
持续改进 WiFi 和 Linux KPI 层。
Linuxulator 应用兼容性。
更新 DRM / 显卡驱动。
OpenZFS 的 Zstd 压缩。
在线 RAID-Z 扩展。
为 FreeBSD 现代化 LLDB 目标支持。
你可以在其他季度报告中找到大部分项目的更多详细信息。
工作人员还参与了多个大型项目的工作,包括:
运行时动态链接器 (rtld) 和内核 ELF 加载器的改进。
重写 UNIX 域套接字锁定。
构建基础设施。
支持 Open 系统调用路径处理 O_BENEATH 和 O_RESOLVE_BENEATH。
arm64 支持。
迁移到 Git 仓库。
许多项目也在其他季度报告中有详细条目。
工作人员还在许多方面投入了大量的努力,不仅限于大型单独项目。这些工作包括协助代码审查、错误报告筛选、安全报告筛选和建议处理、解决 syzkaller 报告、以及在工具链、开发者工具、虚拟内存内核子系统、低级 x86 基础设施、套接字和协议等功能领域的持续维护和修复。
随着转向在家工作,基金会决定再次聘请三名滑铁卢大学的合作项目学生,参与 2020 年秋季学期(9 月至 12 月)。Tiger 返回参加第二学期,并加入了新学生 Yang 和 Zac。学期项目包括继续进行 ELF 工具链工作、将 Capsicum 应用于其他实用工具、测试和集成 FreePBX 和 Asterisk VOIP 软件、pkgbase,以及探索容器化工具。
基金会为改善持续集成、自动化测试以及 FreeBSD 项目的整体质量保证工作,提供了一名全职工作人员,并赞助相关项目。
在 2020 年第三季度,基金会工作人员继续改进并监控项目的 CI 基础设施,并与专家合作修复测试发现的构建失败和回归问题。专用虚拟机主机的设置已完成,新的功能开发和 CI 阶段环境正在进行中。我们还与项目中的其他团队合作,满足他们的测试需求。例如,非 x86 架构的测试现已定期运行,提升了嵌入式系统的 CI。我们还与许多外部项目和公司合作,改进它们的产品与 FreeBSD 之间的 CI 集成。
有关完成的工作项和详细信息,请参阅本报告中的 FreeBSD CI 部分。
基金会提供硬件和支持,以改善 FreeBSD 的基础设施。在上一季度,我们继续支持位于全球各地的 FreeBSD 硬件。我们协调了纽约互联网公司(NYI)芝加哥设施与 clusteradm 之间的合作,开始为我们计划购买的一些新 FreeBSD 硬件做好准备。NYI 慷慨地为项目提供免费支持。我们还与 Bridgewater 站点的新所有者进行了联系,该站点是 FreeBSD 大部分基础设施的所在地。
我们为支持项目基础设施所做的一些采购包括:
Spamhaus 垃圾邮件过滤软件,用于限制邮件列表中的垃圾邮件量。
5 台应用服务器,用于运行 Bugzilla、Wiki、网站、CGI、Phabricator、托管 Git 等任务。
1 台服务器,用于替换旧的 pkg 服务器,并提供更多的 IOPS,以避免在高峰时段磁盘无法跟上请求量导致的性能下降。
1 台服务器,用于加速 exp-runs。
1 台服务器,用于更频繁地构建软件包。
我们的大部分工作都致力于为项目进行宣传。这包括推广其他人使用 FreeBSD 所做的工作;制作宣传材料,教人们了解 FreeBSD,并帮助简化开始使用 FreeBSD 或为项目做贡献的路径;参加并组织其他 FreeBSD 贡献者志愿者运行 FreeBSD 事件、设立 FreeBSD 展台和进行 FreeBSD 演讲。
FreeBSD 基金会赞助了全球多个会议、活动和峰会。这些活动可以是 BSD 相关的、开源的或面向弱势群体的技术活动。我们支持 FreeBSD 相关的活动,为知识分享提供平台,推动项目合作,并促进开发人员与商业用户之间的合作,所有这些都为创建一个健康的生态系统提供支持。我们还支持非 FreeBSD 活动,以促进和提高 FreeBSD 的知名度,增加 FreeBSD 在不同应用中的使用,并招募更多贡献者参与项目。正如我们行业中的大多数人所经历的,COVID-19 已经使我们的面对面活动暂停。除了参加虚拟活动,我们还在持续开展新的培训计划,并更新我们的操作指南,以便更多人尝试 FreeBSD。
请查看我们在上一季度进行的一些宣传和教育工作:
启动了 FreeBSD Fridays 101 课堂系列。课程包括 FreeBSD 入门、FreeBSD 安装教程、安全性入门、ZFS 入门等。过去的课程视频和即将举行的活动日程可在 这里 找到。
参加并在 OSI 的 "State of the Source" 会议上进行了演讲。该活动于 2020 年 9 月 9 日至 11 日以虚拟方式举行。
启动了 FreeBSD 基金会网站的重新设计。
宣布 FreeBSD 基金会成立 20 周年。
作为谷歌编程之夏2020 的管理员参与其中。
继续推广 FreeBSD Office Hours 系列,包括举办我们自己的基金会主办的办公时间。关于这些一小时课程的视频可以在项目的 YouTube 频道 上找到。你可以观看我们的视频 这里。
采访了 离任的 FreeBSD 核心团队成员,了解他们对任期的看法。
开始与 FreeBSD 供应商峰会规划委员会合作,准备 2020 年 11 月的供应商峰会。
在 It's FOSS 文章中宣传了基金会的 20 周年和我们支持 FreeBSD 项目的工作。 FreeBSD 基金会庆祝 20 年支持和促进 FreeBSD 项目。
为 Fosslife 撰写了 FreeBSD 入门指南。
承诺作为媒体赞助商赞助 All Things Open。
承诺作为青铜级赞助商赞助 OpenZFS 开发者峰会。
成为国际 RISC-V 会员。
承诺在 10 月 20 日的 nerdear.la 会议上做 FreeBSD 演讲。
请通过我们的 每月通讯 了解我们最新的工作。
Netflix 在我们的最新 贡献者案例研究 中提供了关于他们如何以及为什么使用 FreeBSD 的更新。
我们通过出版专业制作的 FreeBSD 期刊来帮助全球教育大家了解 FreeBSD。正如之前提到的,FreeBSD 期刊现在是免费出版物。可以在 https://www.FreeBSDfoundation.org/journal/ 了解更多并访问最新的期刊。
你可以在 https://www.FreeBSDfoundation.org/news-and-events/ 了解更多我们参加的活动和即将举行的活动。
基金会持有 FreeBSD 商标,保护商标是我们的责任。我们还为核心团队提供法律支持,帮助调查出现的问题。我们在 2020 年 7 月 1 日更新了我们的 商标使用条款和条件。
请访问 FreeBSD 基金会的网站 了解我们如何支持 FreeBSD 以及我们如何帮助你!
我们欢迎 Andrew Wafaa 和 Kevin Bowling 加入我们的董事会,帮助管理基金会并引导我们制定战略方向。关于我们新董事会成员的 更多信息 可在我们的网站上找到。
联系方式:FreeBSD 发布工程团队 <re@FreeBSD.org>
FreeBSD 发布工程团队负责设置和发布 FreeBSD 官方项目发布的时间表,宣布代码冻结并维护相关分支等工作。
在 2020 年第三季度,发布工程团队开始了 12.2-RELEASE 的工作,这是 stable/12 分支的第三个版本。
截至目前,已发布了两个 BETA 构建,并预计将发布第三个 BETA 构建,仍在时间表中。
12.2-RELEASE 循环将持续到 10 月,计划发布两个 RC 构建,RC3 将根据需要安排。12.2-RELEASE 目前计划于 10 月 27 日最终发布。
除了 12.2-RELEASE,发布工程团队的 Glen Barber 完成了发布构建工具和脚本的工作,以为从 Subversion 到 Git 的转换做好准备,为 13.0-RELEASE 循环做准备。目前没有计划将这些更改合并到稳定分支中;正如在 Git 工作小组中讨论的那样,我们认为在稳定分支上进行这样的更改对用户基础以及下游的 FreeBSD 用户来说将过于干扰。最近,13.0-CURRENT 的开发快照已从项目中的 Git 仓库中构建,而 12.x 和 11.x 的进一步快照将继续从 Subversion 构建。
此外,整个季度内,发布了多个 head、stable/12 和 stable/11 分支的开发快照构建。
最后,发布工程团队感谢 Marius Strobl 曾在团队中的辛勤付出;由于时间限制,他最近辞去了副 RE 负责人职位。团队欢迎 Colin Percival,接受了这个角色。
这项工作由 Rubicon Communications, LLC(netgate.com)和 FreeBSD 基金会赞助。
联系方式:集群管理团队 <clusteradm@FreeBSD.org>
FreeBSD 集群管理团队负责管理项目依赖的机器,这些机器用于同步分布式工作和通信。在本季度,团队开展了以下工作:
与 FreeBSD 基金会合作,更新用于 Web 服务、镜像和软件包构建服务器的硬件。
禁用软件包镜像的目录索引,以解决机器的性能问题。
后来放宽了这一限制,允许对父目录进行索引,但仍然禁止大型软件包目录的索引。
持续的系统管理工作:
提交者的账户管理。
关键基础设施的备份。
跟进第三方软件的安全更新。
进行中的工作:
设置马来西亚(KUL)镜像站。
设置巴西(BRA)镜像站。
审查服务 jail 和服务管理员的操作。
构建 aarch64 和 powerpc64 软件包的基础设施。
PowerPC64 POWER9 上的 NVMe 问题阻止双插槽机器作为 pkg 构建机使用。
FreeBSD 基金会赞助的 pkg 构建机驱动升级测试(SSD)。
Aarch64 参考机器的启动问题。
新的 NYI.net 赞助的位于芝加哥地区的共置空间。
与 Git 工作组合作,为 Git 仓库做准备。
联系方式:Jenkins 管理员 <jenkins-admin@FreeBSD.org> 联系方式: 許立文 <lwhsu@FreeBSD.org>
联系方式:freebsd-testing 邮件列表 联系方式:IRC #freebsd-ci 频道(EFNet)
FreeBSD CI 团队负责维护 FreeBSD 项目的持续集成系统。CI 系统首先检查提交的更改是否能够成功构建,然后对新构建的结果执行各种测试和分析。这些构建的工件会被存档在工件服务器中,以供进一步的测试和调试需求。CI 团队成员检查失败的构建和不稳定的测试,并与相关领域的专家合作,修复代码或调整测试基础设施。这些工作的详细信息可以在 每周 CI 报告 中找到。
在 2020 年第三季度,我们继续与项目中的贡献者和开发者合作,满足他们的测试需求,并与外部项目和公司合作,改进他们的产品和 FreeBSD。
重要变更:
所有非 x86 测试构建现在每天 22:00 UTC 会触发一次新的构建;由于在 qemu 中运行所有测试需要大量时间,这一工作之前并不频繁进行。正在进行改进测试执行速度和并行性的工作。以下是受影响的工作列表:
构建和测试结果将很快发送到 dev-ci 邮件列表。非常感谢反馈和分析帮助!
已设置专门用于运行使用配置的虚拟机的构建器,这提高了稳定性并减少了执行时间。
在 OpenZFS 导入后,FreeBSD-head-amd64-test_zfs 的结果发生了变化;我们鼓励大家检查并修复失败和跳过的测试用例。
新增的工作:
进行中的工作:
在 此处 收集和整理 CI 任务和想法。
测试和合并 FreeBSD-ci 仓库中的拉取请求。
设计和实现预提交 CI 构建和测试。
减少为贡献者和开发者设置 CI/测试环境的程序。
设置 CI 阶段环境并将实验性工作放置其中。
为运行测试的虚拟机来宾设置公共网络访问。
在裸金属硬件上实施自动化测试。
为 -CURRENT 构建 drm Port 测试。
计划运行 ztest 和网络堆栈测试。
增加更多与外部工具链相关的工作。
改进硬件实验室,使其更加成熟并增加更多硬件。
帮助更多第三方软件通过托管 CI 解决方案在 FreeBSD 上进行 CI 测试。
与托管 CI 提供商合作,提供更好的 FreeBSD 支持。
请查看与 freebsd-testing@ 相关的票务,了解更多进行中的工作,欢迎加入我们的努力! 赞助商:FreeBSD 基金会
联系方式:René Ladan <portmgr-secretary@FreeBSD.org> 联系方式:FreeBSD Ports 管理团队 <portmgr@FreeBSD.org>
Ports 管理团队负责监督 Ports 的整体方向、构建包以及人事事务。以下是过去一个季度的工作进展。
我们突破了 Ports 40,000 个 port 的里程碑,目前大约有 40,400 个 port。上个季度,HEAD 分支有 9335 次提交,2020Q3 分支有 481 次提交,分别由 167 和 63 个提交者完成。目前有 2525 个未解决的问题报告,其中 595 个没有指派负责人。与上个季度相比,这意味着活动略有下降,同时未解决的 PR 稍有增加。
在过去的季度里,我们欢迎了 Rainer Hurling (rhurlin@),同时也向 Kevin Lo (kevlo@) 和 Grzegorz Blach (gblach@) 告别。
过去三个月,我们为 Perl(5.32)、PostgreSQL(12)和 PHP(7.4)更新了默认版本。许多软件包也进行了更新:Firefox 更新到 81.0.1,Chromium 更新到 84.0.4147.135,Gnome 更新到 3.36,Xorg 更新到 1.20.9,Qt5 更新到 5.15.0,Emacs 更新到 27.1,KDE Frameworks 更新到 5.74.0,pkg 本身更新到 1.15.8。
始终不知疲倦的 antoine@ 进行了 30 次 exp-runs 来测试 port 版本更新,涉及了以下多种内容:
将 base 中的 byacc 更新到 20200330。
检查 sed 命令 y
的平衡性。
使用括号。
删除现已冗余的 port
参数(来自 USES=readline)。
联系方式:FreeBSD Office 团队 ML <office@FreeBSD.org> 联系方式:Dima Panov <fluffy@FreeBSD.org> 联系方式: 許立文 <lwhsu@FreeBSD.org>
FreeBSD Office 团队致力于开发一系列办公软件套件和工具,如 OpenOffice 和 LibreOffice。
本季度的工作集中在为所有 FreeBSD 用户提供最新稳定版的 LibreOffice 套件及其配套应用。
除了将旧的稳定分支更新到最新的 6.4.x 版本外,当前的 Ports 现在还提供了功能完整的最新 7.0.1 套件。
保守用户可以通过切换到使用 all-in-one port editors/libreoffice6 来保留 6.4.x 稳定版本,甚至可以启用 i18n 语言包(默认关闭)。该版本将至少更新至 7.1.0 发布为止。
我们正在寻找有意帮助项目的人。所有不稳定的 LibreOffice 快照工作都被暂存到我们的 WIP 仓库。 已开 bug 列表 包含所有已报告的问题,亟需关注。补丁、评论和反对意见都欢迎通过邮件列表和 Bugzilla 提交。
联系方式:FreeBSD 图形团队 <x11@freebsd.org> 联系方式:Niclas Zeising <zeising@freebsd.org>
FreeBSD X11/图形团队负责维护 FreeBSD 图形栈的底层部分。这包括显卡驱动程序、图形库(如 MESA OpenGL 实现)、X.org xserver 及其相关库和应用程序,以及 Wayland 和相关库及应用程序。
自上次报告以来,FreeBSD 图形栈和相关库进行了多次更新。
最值得注意的是,MESA 相关的 port 已经转向使用 meson 构建系统,而不是基于 autotools 的系统。这是因为 Mesa 上游已经弃用并移除了 autotools 构建系统,这为进一步更新 Mesa 版本铺平了道路。尽管在初次更新后需要进行一些小的修正,但这次更新已经成功,并使得 FreeBSD 的 mesa port 能够进一步更新和改进。
此外,xorg-server
和 libX11
也进行了若干安全修复,因此这些 port 已更新以解决这些问题。
在此期间,FreeBSD 12 进行了更改,以提高与使用 udev/evdev 和 libinput 的输入设备的兼容性。这一更改去除了本地配置的需求,并使大多数鼠标、触摸板和键盘开箱即用。该更改将在即将发布的 FreeBSD 12.2 版本中包含。
同时,图形和输入栈中的各种库也进行了多次更新,多个用户空间驱动程序也已更新。像 libdrm
和 libevdev
等库已更新,以包括由团队成员开发并添加到上游的新的 FreeBSD 支持。
此外,持续的工作确保了各种 drm-kmod port 和包的最新状态,主要是响应不同 FreeBSD 版本的变化。
我们还继续按计划召开双周会议。
有兴趣帮助的人员可以通过 x11@FreeBSD.org 邮件列表与我们联系,或者在我们的 gitter 聊天 中找到我们。我们也可以在 EFNet 的 #freebsd-xorg 频道中找到。
我们在 GitHub 上也有一个团队区域,你可以在其中找到我们的工作仓库。
跨多个类别的项目,从内核和用户空间到 Ports 或外部项目。
联系方式:FreeBSD 集成服务团队 <bsdic@microsoft.com> 联系方式:Wei Hu <whu@FreeBSD.org> 联系方式: 許立文 <lwhsu@FreeBSD.org>
Li-Wen 正在处理与 Azure 相关的 FreeBSD 发布代码,涵盖 -CURRENT、12-STABLE 和 11-STABLE 分支。该进行中的工作可以在 这里 找到。Azure Marketplace 上的 11.4-RELEASE 镜像 已发布。我们正在测试 releng/12.2 分支,并将在 12.2-RELEASE 发布后尽快将其发布到 Azure Marketplace。
该项目由 FreeBSD 基金会赞助,微软提供资源支持。
联系方式:Alex Richardson <arichardson@freebsd.org>
直到最近,FreeBSD 只能在 FreeBSD 主机上构建。然而,许多流行的免费 CI 工具仅能在 Linux 和 macOS 上构建,因此无法用于构建 FreeBSD 基本系统。此外,即使构建机器不是运行 FreeBSD,跨平台构建 FreeBSD 以用于远程机器或仿真器有时也会很有用。该项目的目标是能在 Linux 和 macOS 主机上构建基本系统。
我在 2017 年开始了这个项目,旨在允许在许多参与 CHERI 项目 的 Linux 服务器和桌面上构建 CheriBSD。最初的几个补丁于 2018 年提交到上游(见 2018q3 报告),我很快将完整的补丁并到 CheriBSD 中。在过去的两年里,我慢慢地将剩余的补丁提交到上游,并最终在本报告的时间点提交了最后一个必需的更改。
截至 2020 年 9 月,应该可以使用 buildworld
和 buildkernel
make 目标,在 macOS 和 Linux 主机上构建一个完全功能的 FreeBSD 安装。我们在我们的持续集成系统中使用此方法来构建和测试多个架构的 CheriBSD 磁盘映像。我还将一个 GitHub Actions 配置提交到上游,构建一个 amd64 内核大约需要 10 分钟。这将确保可以轻松检测到破坏跨平台构建的更改。
将跨平台构建的更改提交到上游,导致了构建系统的清理。例如,我们现在 不再需要使用 lorder.sh 来构建库,这稍微加快了链接步骤。可移植性和引导更改也使得从旧版本升级变得更加容易,因为我们不再依赖于 /usr/include
中的主机头文件与目标系统的匹配(例如,在引导 localedef 等时)。
尽管在 Linux 和 macOS 上构建的支持仍应视为实验性,但在许多情况下应该能够正常工作。如果你想尝试一下,以下命令行应能在安装了 LLVM 10(或更新版本)包的 Linux 和 macOS 系统上成功构建 amd64 world:MAKEOBJDIRPREFIX=/somewhere ./tools/build/make.py TARGET=amd64 TARGET_ARCH=amd64 buildworld
。必须使用 ./tools/build/make.py
包装脚本来执行构建,因为大多数 Linux 和 macOS 系统不附带适当版本的 bmake。如果你遇到任何问题,请告诉我。
赞助:DARPA
联系方式:Ed Maste <emaste@FreeBSD.org> 联系方式:Warner Losh <imp@FreeBSD.org> 联系方式:Ulrich Spörlein <uqs@FreeBSD.org>
FreeBSD 正在从 Subversion 迁移到 Git 的工作持续进行。Ulrich 已经解决了 svn2git 中所有已知的问题,并能够绕过 Subversion 历史中的不一致元数据和强制提交问题。
我们仍需编写额外的文档,并完成提交钩子的安装(例如,限制分支创建,或确保 cherry-pick 提交中有适当的数据)。
我们预计在 10 月底之前开放 beta 仓库,以测试提交。这将允许测试提交钩子,并允许开发人员测试访问权限并熟悉 git 操作。此仓库中的提交将被删除,并且仓库将在最终迁移之前至少重新创建一次。
有兴趣参与 Git 迁移的人,鼓励订阅 FreeBSD-git 邮件列表,并测试 beta 的 src、ports、doc 仓库。
你也可以查看 Git 转换工具仓库中的 wiki、问题、README 和其他文档:Git 转换工具仓库。
我们目前预计在 11 月中旬过渡到 src 和 doc 仓库。对 ports 仓库的额外调查和实验仍在进行中。
赞助:FreeBSD 基金会(部分)
联系方式:Edward Tomasz Napierala <trasz@FreeBSD.org> 联系方式:Mark Johnston <markj@FreeBSD.org>
早期的 Linux 兼容层工作主要集中在代码清理和改进诊断工具上。现在的工作重点已经转向修复实际的应用程序。目前的进展正在 Linux 应用程序状态 Wiki 页面 上跟踪。最初的重点是不涉及 X11 的应用程序,主要是因为它们通常更容易测试和调试,并且修复的错误不具有应用程序特定性。
本季度的基金会赞助工作包括实现 devfs(5) 的一个解决方法,以修复 jail/chroot 内的 gettynam(3),以及修复缺失的 splice(2) 系统调用,这导致 grep 和 autotools 出现问题。报告给用户空间的 Linux 版本已提升至 3.10.0,这与 RHEL 7 中提供的内核匹配,并且对于 IBM DB2 数据库的安装成功至关重要。现在已经支持 Oracle 数据库所需的 BLKPBSZGET ioctl。同时,增加了对 kcov(4) 的支持,这是 syzcaller 所必需的;以及对 syzcaller 报告的多个问题的修复,如 futex 锁泄漏。还进行了更多清理,包括将一些与 Linux 兼容层特定的错误处理功能从系统调用的快速代码路径中移除。sysutils/debootstrap Port 已更新至版本 1.0.123,提供了一种创建 Debian 或 Ubuntu jail 的简单方法。最后,还对 文档 做了一些改进。
大多数这些更改已经合并到 FreeBSD 12-STABLE 中,以便与 12.2-RELEASE 一同发布。
其他开发人员的参与度有所增加;其中包括 termios 性能修复、改进的 memfd 支持、实现 CLOCK_MONOTONIC_RAW
(Steam 所需)、madvise 改进、新的 compat.linux.use_emul_path
sysctl。还在持续追踪 Steam 和 WebKit 相关故障的原因,修复首先在 linuxulator-steam-utils 中实现。
赞助:FreeBSD 基金会
联系方式:Kamil Rytarowski <kamil@moritz.systems> 联系方式:Michał Górny <mgorny@moritz.systems>
FreeBSD 内置 LLDB,这是 LLVM 家族中的调试器,作为基本系统的一部分。目前,与 GNU GDB 调试器相比,LLDB 存在一些限制,尚不能完全替代。它依赖于 LLDB 中一个过时的插件模型,导致技术债务不断增加。该项目旨在使 LLDB 更接近完全替代 GDB 的功能,因此为 FreeBSD 提供一个现代化的调试器,供软件开发人员使用。
传统的单体目标支持调试的应用程序与调试器处于同一进程空间中。现代 LLDB 插件方法(用于其他支持的目标)则在单独的 lldb-server 进程中执行目标进程。这提高了可靠性,并简化了 LLDB 本身的进程/线程模型。此外,远程和本地调试将使用相同的方法执行。
在完成迁移到新进程模型后,该项目还将包括审查 LLDB 测试套件的结果,并在时间允许的情况下修复测试。预计该工作将在 2020 年完成。
项目进度分为三个里程碑,每个里程碑大约需要一个月的时间:
为 x86_64 引入新的 FreeBSD 远程进程插件,提供基本支持并提交到 LLVM 上游。
确保并添加项目中要求的特性(进程启动、进程附加(pid)、进程附加(name)、用户空间核心文件、断点、观察点、线程、远程调试)对 FreeBSD/amd64 和 FreeBSD/i386 的支持。
迭代 LLDB 测试。检测并在时间允许的情况下修复 bugs。确保每个未修复和已知问题的 bug 报告。添加缺失的 man 页面,并更新 FreeBSD 手册。
我们即将完成第一个里程碑。新的插件正在成型,已经能够运行简单的单线程程序。支持的特性包括单步执行、断点、内存和寄存器 I/O(针对 amd64)。两个插件可以同时支持。如果设置了环境变量 FREEBSD_REMOTE_PLUGIN
,或者直接启动 lldb-server,则使用新插件。否则,出于兼容性原因,仍然使用旧插件。待新插件成熟,我们计划在其移植到的架构上无条件启用它。
赞助:FreeBSD 基金会
联系方式:Ed Maste <emaste@FreeBSD.org> 联系方式:Kyle Evans <kevans@FreeBSD.org> 联系方式:Ryan Moeller <freqlabs@FreeBSD.org>
在本季度,flua(FreeBSD Lua)被添加以支持 require
来加载由基本系统提供的 .lua 模块。flua 还获得了支持以加载二进制模块。
关于 libjail 绑定的审核也已经提交,正在等待审核。libjail 是如果想要在 flua 中编写 jail 管理工具的关键组件。
有兴趣在 FreeBSD 中使用 Lua 的人可以联系讨论其他项目想法。以下是一些有潜力的项目,这些模块尚未启动,但可能会非常有用(按顺序排列):
libcrypt
libexpat
libnv
libxo
此外,还有一些脚本,如果移植到 flua 上,效果会很好:
certctl(8)
联系方式:Rick Macklem <rmacklem@freebsd.org>
为了提高 NFS 的安全性,我预计将成为 RFC 的一份互联网草案,规定使用 TLS 1.3 来加密用于 NFS 的 Sun RPC 连接的所有数据流量。
尽管 NFS 一直能够使用 sec=krb5p 来加密传输中的数据,但这需要一个 Kerberos 环境,因此未得到广泛采用。它还要求在软件中执行加密/解密,因为只有 RPC 消息中的 NFS 参数被加密。由于内核 TLS 可以使用硬件辅助来提高性能,并且不需要 Kerberos,待实现可用,NFS over TLS 可能会得到更广泛的采用。
此项目的编码工作现已完成。所有必需的 NFS 和内核 RPC 代码更改已经提交到 -CURRENT。现在认为守护进程已完成,但仍将保留在 base/projects/nfs-over-tls 目录中,直到 -CURRENT 包含内核 TLS 支持的 OpenSSL 库。如果这在 FreeBSD-13 中没有实现,希望经过修补的 OpenSSL 和守护进程可以成为 Port。
为了支持像笔记本电脑这样的客户端,执行 TLS 握手的守护进程现在可以选择处理来自站点本地 CA 的客户端 X.509 证书。现在已经有 exports(5) 选项,要求客户端提供有效的 X.509 证书。
尽管设置系统以进行测试仍然有些不便,文档已经提供,供那些想帮助测试的人使用。
当前实现的主要限制是它使用 TLS1.2 而不是 TLS1.3。预计随着 KERN_TLS rx 补丁的发布,TLS1.3 的支持将得到实现。
非常欢迎第三方测试。
联系方式:Mark Johnston <markj@FreeBSD.org>
有关 syzkaller 的介绍,请参见 2019q1 季度报告中的 syzkaller 条目。
syzkaller,特别是公共的 syzbot 实例,继续在 FreeBSD 内核中发现错误。这些错误已经在 VFS 名称缓存、TCP 和 SCTP 栈、pf(4)、Unix 域套接字实现和 Linuxulator 等子系统中得到修复。
FreeBSD 基金会赞助了一些工作,以启用跨操作系统模糊测试。这使得可以使用 syzkaller 的 Linux 目标来模糊测试 Linuxulator。这个努力迅速找到了几个错误;待支持提交到上游,我们希望能够利用 syzbot 来获得对 Linux 系统调用接口的持续测试,除了本地和 32 位兼容性接口之外。
还做了一些工作,使得可以在 FreeBSD jail 中运行 syzkaller,最终目的是简化将包含所有运行 syzkaller 所需内容的二进制镜像分发到新主机的过程。目前需要执行多个设置步骤,使得部署过程有些麻烦。
赞助:FreeBSD 基金会
内核子系统/功能、驱动程序支持、文件系统等的更新。
联系方式:Emmanuel Vadot <manu@FreeBSD.Org>
已经更新 FreeBSD 13-CURRENT 的 drm 驱动程序,以匹配 Linux 5.4.62。随后,graphics/drm-current-kmod 也已更新,以跟进这一 Linux 的 LTS 版本。
目前,graphics/drm-devel-kmod 也在跟踪该版本,但将在不久的将来更新为 Linux drm 驱动程序的更高版本。
已从 Port 中移除大量的 linuxkpi 代码,或已用 BSD 许可证的实现替代。
赞助:FreeBSD 基金会
联系方式:Emmanuel Vadot <manu@FreeBSD.org>
DTS 文件(设备树源文件)已更新,HEAD 分支与 Linux 5.8 保持同步,12-STABLE 分支与 Linux 5.6 保持同步。
联系方式:Oleksandr Tymoshenko <gonzo@FreeBSD.org>
DesignWare 以太网适配器 IP 被广泛应用于 Rockchip 和 Allwinner 的 SoC。该驱动程序进行了以下修复:
初始化时钟,而不是依赖 u-boot 来执行正确的操作。
检测媒体类型并相应地调整控制器配置。
增加对 RMII PHY 模式的支持。
尚未提交的更改包括通过增加对多段 mbuf 传输的支持来优化性能。下一步是尝试通过使用中断合并来进一步提升性能。
联系方式:Ankur Kothiwal <ankur@freebsd.org>
eBPF eXpress Data Path (XDP) 允许运行 eBPF 程序来尽早过滤接收的包,从而避免在执行过滤之前的额外处理开销。该项目的目标是扩展现有的 FreeBSD 网络驱动程序(例如 VirtIO if_vtnet)以便在处理新接收的数据包时调用 eBPF 程序。简而言之,使用 XDP 时,驱动程序必须根据程序指定的操作来对数据包进行处理:PASS(接受并正常处理)、DROP(丢弃)、TX(发送)或 REDIRECT(重定向)。还将实现 eBPF 辅助函数和映射,以帮助包过滤。
已实现功能:
在接口注册到 pfil 时注册 eBPF 探针。
激活 eBPF 探针。
创建钩子并将其链接到 pfil 头部,当 eBPF XDP 探针被激活并成功列出 XDP 探针时。
创建 xdp_rx 函数,将接收到的数据包传递给 eBPF 程序,以便进一步处理。该函数将返回 XDP 操作:DROP 和 PASS。
注册 xdp 钩子并将其链接到 pfil 头部。
编写一个 eBPF 程序来处理(当前丢弃和传递)ICMP 流量——这是为了测试钩子是否正常工作。
编写加载程序函数,将 ICMP 过滤程序加载到内核中。
未来工作:
当前只能将 XDP 钩子附加到 PASS 和 DROP 数据包——钩子分离的工作尚未完成。
实现 XDP 动作以“TX”和“REDIRECT”数据包。
最终交付物:
实现了 XDP 钩子以传递和丢弃数据包。
创建了一个加载程序,将 eBPF 程序附加到内核。
一个测试程序,用于丢弃 ICMP 过滤器。
此代码是在 2020 年谷歌编程之夏(GSoC)的指导下完成的,由 Ryan Stone(rstone@)提供指导。FreeBSD 的 eBPF 实现仍在进行中,目前 FreeBSD 尚不支持 eBPF。eBPF 的基础实现是 2018 年 GSoC 项目的一部分,并且仍在开发中。该项目基于该实现,因此只有当 FreeBSD 支持 eBPF 时,XDP 实现才会合并到 FreeBSD 源代码中。
目前,该代码正在进行中,并已合并到 Ryan Stone 的 支持 eBPF 实现的分支。
赞助:谷歌编程之夏
联系方式:Michal Krawczyk <mk@semihalf.com> 联系方式:Artur Rojek <ar@semihalf.com> 联系方式:Marcin Wojtas <mw@semihalf.com>
ENA(Elastic Network Adapter)是亚马逊 Web 服务(AWS)虚拟化环境中的智能网卡。ENA 驱动程序支持多个发送和接收队列,并且可以处理高达 100 Gb/s 的网络流量,具体取决于使用的实例类型。
自上次更新以来完成的工作:
修复当 ENA 集成到内核二进制文件时的编译问题。
将 ENA v2.2.0 驱动程序合并到 FreeBSD 12.2。
进行中的工作:
添加功能,允许读取额外的 ENI(Elastic Network Interface)度量信息,关于带宽/包每秒(BW/pps)超限的情况。
引入完整的内核 RSS API 支持。
允许重新配置 RSS 间接表和哈希键。
评估并原型化驱动程序移植到 iflib 框架的工作。
赞助:亚马逊公司
联系方式:Grzegorz Jaszczyk <jaz@semihalf.com> 联系方式:Patryk Duda <pdk@semihalf.com> 联系方式:Marcin Wojtas <mw@semihalf.com>
扩展序列号(ESN)是 IPSec 的扩展,定义在 RFC4303 第 2.2.1 节 中。它使得能够实现高速度的 IPSec 实现,在标准的 32 位序列号不足以满足需求时,ESN 提供了解决方案。ESN 的一个关键特性是,仅低 32 位的序列号会通过网络传输。高 32 位由发送方和接收方维护。此外,高位位也包含在完整性检查值(ICV)字段的计算中。
ESN 支持包含以下内容:
修改现有的反重放算法,以满足 ESN 要求。
当禁用 ESN 时,在 UINT32_MAX 的 80% 时触发软生命周期过期。
实现对加密软引擎中包括 ESN 进行支持,支持加密模式和认证模式(例如,AES-CBC 和 SHA256 HMAC),以及组合模式(例如,AES-GCM)。
在 AES-NI 引擎中实现支持,支持加密模式和认证模式,以及组合模式。
自上次更新以来完成的工作:
调整加密部分的实现,以适应重新设计的开放加密框架。
将核心 ESN 实现从加密驱动程序移到 netipsec 层。
利用新引入的 crp_aad 机制来支持组合模式。
引入了一些小修复和改进。
待办事项
完成 Phabricator 中的审查过程,并将补丁合并到树中。
赞助:Stormshield
联系方式:Marcin Wojtas <mw@semihalf.com> 联系方式:Artur Rojek <ar@semihalf.com> 联系方式:Dawid Gorecki <dgr@semihalf.com>
Semihalf 团队开始为 FreeBSD 提供 NXP LS1046A SoC 的支持。
LS1046A 是一款四核 64 位 ARMv8 Cortex-A72 处理器,集成了数据包处理加速和高速外设,包括 10 Gb 以太网、PCIe 3.0、SATA 3.0 和 USB 3.0,适用于广泛的网络、存储、安全和工业应用。
自上次更新以来完成的工作:
上游提交了 QorIQ SDHCI 驱动程序(r365054)。
目前,Semihalf 上游提交活动已完成。主要的非树支持组件包括:
DPAA 网络控制器支持。
QSPI 控制器支持。
它们可以在 11.2-RELEASE 上工作,但仍然需要大量的工作以适应 FreeBSD-CURRENT。
赞助:Alstom Group
联系方式:Brandon Bergren <bdragon@freebsd.org>
自 r366063 起,-CURRENT 中为 POWER8 和 POWER9 机器提供了对小端 PowerPC64(PowerPC64LE)的实验性支持。
在 2010 年,当 FreeBSD 移植到 PowerPC64 时,平均用户使用的是 G5 PowerMac,这是一台纯大端机器。
当时,虽然 32 位 PowerPC 机器可以在小端模式下运行,同时 POWER6 和 POWER7 也支持小端,但在内核级管理中所涉及的复杂性以及固件支持的缺乏,使得其不适合广泛支持。
IBM 在设计 POWER8 时,主要关注点之一是改进小端支持,使其与大端支持平等。
这一改进使得在传统上主要是大端平台的环境中,支持小端操作系统变得可行。
到了 2020 年,得益于 Raptor Blackbird 的普及,许多用户能够负担得起 POWER9,部分 POWER8 硬件也变得容易获取,再加上 IBM 对 POWER 小端的未来重点关注,现代显卡和图形环境中的大端支持逐渐衰退,因此对 FreeBSD 在 POWER 上的 小端版本的需求增加。
随着 FreeBSD/PowerPC64 在 2019 年过渡到 ELFv2 ABI,作为 2019q4 PowerPC 在 Clang 上努力的一部分,最后一个重大障碍被清除。
由于没有其他人从事该工作,而且我具备所需的技能,因此我决定在一个周末实验一个小端内核,看看移植的难度。
结果比我预期的要简单得多。三天后,我在 qemu 中获得了控制台支持,再经过一周的调试后,我已经能在硬件上完全运行了。
现在,FreeBSD PowerPC64LE 已经成为基于系统的实验性 MACHINE_ARCH,并且在快速发展中。
大端 PowerPC64 仍然是未来可预见的首选平台,且不会被弃用。
赞助:Tag1 Consulting, Inc.
联系方式:John-Mark Gurney <jmg@FreeBSD.org>
ure 是处理 RealTek 以太网适配器的驱动程序,包括 RTL8153 USB 3.0 千兆以太网适配器。它在许多以太网加密狗和扩展坞中使用。
在此次更新之前,驱动程序的速度受限。在我的测试中,我只能达到大约 91Mbps。这个限制是因为每次 USB 传输只能传输一个数据包。USB 的传输限制为每秒 8000 次传输(1500 字节/包 _ 8000 包/秒 _ 8 位/字节 = 96 Mbps)。对于快速以太网(RTL8152,100Mbps),这个速度是可以接受的,但对于支持千兆以太网的设备,这就成为了瓶颈。
此次更新增加了在单个 USB 传输中发送和接收多个数据包、VLAN 硬件标记以及启用 TCP 和 UDP 校验和卸载的功能。这样,千兆以太网的速度提高到了大约 940 Mbps。
在进行此项工作时,发现了驱动程序中的一个安全漏洞。由于设备寄存器设置不当,在某些设备上,数据包会被不应该分段,从而导致驱动程序无法正确处理。这允许攻击者生成大帧(例如 ping 数据包或大 TCP 传输),并将任意数据包注入到网络堆栈中。这可能使攻击者伪造来自其他机器的流量,并绕过 VLAN 保护。有关更多信息,请参阅 SA。
作为此次工作的一个部分,创建了一个脚本,用于运行测试以验证驱动程序的基本功能(无选项),然后遍历每个选项,确保它们能正常工作。该脚本将在未来发布。
如果你有兴趣提供帮助或测试,请与我联系。
联系方式:Navdeep Parhar <np@FreeBSD.org>
VXLAN(虚拟扩展局域网)是一种隧道协议,其中虚拟局域网的第二层流量被封装在 UDP 中,并通过层 3 网络在 VTEP(VXLAN 隧道端点)之间传输。传输中的流量有两组网络头部:封装头部和被封装的流量头部。FreeBSD 支持 VXLAN,通过 if_vxlan(4) 实现。
现代的网络接口卡(NIC)通常支持头部校验和插入与验证、传输中的 TSO(TCP 分段卸载)以及接收时的 RSS(接收侧负载分配)。但默认情况下,它们仅对最外层的头部进行操作。一些网络接口卡也能操作内层封装的数据帧。上面列出的提交允许 if_vxlan(4) 利用这些支持。
r365867 和 r365868 添加了新的 mbuf 校验和标志和 ifnet 能力。r365870 实现了新功能的内核部分,并更新了 if_vxlan(4) 以便使用它们。r365871 在 cxgbe(4) 驱动程序中实现了对新功能的支持。
VXLAN 和其他使用 UDP 的隧道协议明确允许外层 UDP 头部的零校验和,即使在 IPv6 下也是如此。r365869 添加了支持配置一个 UDP/IPv6 Port,以允许零校验和。
这项工作由 Chelsio Communications 赞助,并使用 cxgbe(4) 支持的 T6(Terminator 6)NIC 进行实现和测试。目前可以在 13.0-CURRENT(head)中使用,未来将在 12-STABLE 中提供。
可以像往常一样创建 VXLAN,并且如果底层物理接口支持 VXLAN 无状态卸载,将自动启用校验和和 TSO 功能。使用 ifconfig 列出、禁用和启用 VXLAN 接口上的校验和功能。若发现问题,请使用 https://bugs.freebsd.org/bugzilla/ 报告。
未来工作:
从驱动程序的接收例程直接调用 vxlan 输入例程。
在 if_vxlan(4) 中增加 LRO 支持。
支持 GENEVE。
赞助商:Chelsio Communications
联系方式:Adrian Chadd <adrian@FreeBSD.org> 联系方式:Bjoern A. Zeeb <bz@FreeBSD.org>
以下工作已在 FreeBSD HEAD 中完成(部分已在 Q2 中),并已合并到 12.2-BETA2,包括针对更好的 11n 和即将推出的 11ac 支持的 net80211 和驱动程序更新。
具体来说,这包括 ath(4) 更新、部分 run(4) 的 11n 支持、otus(4) 的 11n 支持、A-MPDU、A-MSDU、A-MPDU+A-MSDU 和 Fast 帧选项、扫描修复、增强的 jails 中 PRIV 检查、恢复父设备名称打印、改进即将到来的 VHT 支持、许多底层基础设施改进、新设备 ID 和调试工具更新。
如果有机会,请在发布前进行测试。
在过去的三个月里,athp(4) 驱动程序的 ath10k 移植进展顺利。Adrian 报告了以下重要更改:
实现了每节点的传输缓冲,这对于正确的 hostap 和 QCA6174 行为至关重要。
修复了忽略发送某些管理帧的问题;空数据帧被过滤掉,导致不希望出现的 hostap 行为。
传输路径重构减少了代码重复。
固件启动 / VAP 跟踪修复,确保 VAP 创建 / ifconfig up 后,第一 VAP 不会停用。
修正了 hostap 模式 PHY 配置,现在允许非 VHT 站点与 VHT AP 正常关联并交换数据。
在驱动程序中增加了加密密钥配置缓存,确保 ieee80211_key 详细信息在密钥删除后仍然可用;net80211 在驱动程序任务完成固件命令之前会重用或释放状态。
完成了将 net80211 支持集成到 LinuxKPI 兼容层中的初步工作,以启动无线部分。此外,上游代码更改和问题的解决与审查工作已开始。一个方面是尝试将大多数编译时更改上游到 iwlwifi 驱动程序,另一个方面是解决冲突的 LinuxKPI 更改,以避免破坏 DRM 图形驱动程序。Bjoern 希望在一些问题得到解决后,能尽快回到关注无线部分,并产生新的快照。
随着 Intel 驱动程序移植和 LinuxKPI 的进展,rtw88 和较低程度的 brcmfmac 移植也受益于此。最近,Bjoern 还获得了一块 brcmfmac PCIe 卡,并开始为其移植支持。目前,这仍然是一个闲暇时间的项目。
Bjoern 的工作由 Rubicon Communications, LLC(以 "Netgate" 名义运营)和 FreeBSD 基金会赞助。
联系方式:Allan Jude <allanjude@freebsd.org>
Zstandard(ZSTD)是一种现代高性能的压缩算法,旨在提供与 gzip 相同的压缩比,同时提供更好的性能。ZSTD 已在 FreeBSD 中用于多个其他用途,包括压缩内核崩溃转储、作为 gzip 或 bzip 的替代品压缩日志文件,以及未来版本的 pkg(8)。
这项将 ZSTD 完全集成到 ZFS 中的工作由 FreeBSD 基金会赞助。
在第三季度,ZSTD 集成到 OpenZFS 的工作已经在上游 OpenZFS 仓库中完成,并且新的 OpenZFS 2.0 代码库已导入 13-CURRENT。此项目的已完成里程碑:
将 ZSTD 1.4.5 导入 OpenZFS,使用了最近上游 zstd 功能,使其更容易嵌入 zstd 到其他项目中。
更改了压缩级别的跟踪和继承方式。
通过嵌入式块头保存和恢复压缩级别。
还在嵌入式块头中存储了使用的 zstd 版本,以确保向后兼容。由于 zstd 可能会对块进行更强的压缩,如果升级了 zstd,块的校验和可能不匹配。
添加了测试,确保 zstd 压缩和元数据能够在 ZFS 复制中存活。
解决了 L2ARC 和 ZFS 本地加密可能发生的负面交互问题。
修复了如果禁用压缩 ARC 特性时 L2ARC 的 bug。
改进了 ZFS 特性激活代码,以确保 zstd 无法创建导致旧版本 ZFS 崩溃的池。
通过这些更改,升级后的池可以使用 zstd 或 zstd-fast 对数据进行压缩,支持多种不同的压缩级别。这将允许存储管理员选择最适合其需求的性能与压缩之间的权衡。
剩余任务:
在 FreeBSD 手册的 ZFS 章节中增加关于 zstd 的部分。
创建更多关于选择适当压缩级别的文档。
完成 FreeBSD 启动加载器中的 ZSTD 支持(Warner Losh imp@freebsd.org)。
赞助商:FreeBSD 基金会
更新平台特定功能并引入对新硬件平台的支持。
联系方式:Alex Richardson <arichardson@FreeBSD.org> 联系方式:Andrew Turner <andrew@FreeBSD.org> 联系方式:Brooks Davis <brooks@FreeBSD.org> 联系方式:Edward Tomasz Napierala <trasz@FreeBSD.org> 联系方式:George Neville-Neil <gnn@FreeBSD.org> 联系方式:Jessica Clarke <jrtc27@FreeBSD.org> 联系方式:John Baldwin <jhb@FreeBSD.org> 联系方式:Robert Watson <rwatson@FreeBSD.org> 联系方式:Ruslan Bukin <br@FreeBSD.org>
CheriBSD 扩展了 FreeBSD,以实现由 CHERI 指令集扩展支持的内存保护和软件隔离功能。CHERI 保护模型有三种架构实现:CHERI-MIPS、CHERI-RISC-V 和 Arm 即将发布的实验性 Morello 处理器(预计在 2021 年底发布)。CheriBSD 是一款研究型操作系统,拥有一个稳定的基线实现,许多新的研究功能已经或正在被合并到其中:
Arm Morello - 我们正在准备开源 CheriBSD 对 Arm Morello 架构的适配。Morello 分支正在更新为最新的 CheriBSD 基线,补丁正在审查中,以便上游到我们的开源仓库。CheriBSD 目前可以在 Morello 模拟器上启动并运行静态链接的 CheriABI 二进制文件,动态链接支持正在进行中,操作系统和工具链的 bug 也在修复中。我们计划在 2020 年 10 月中旬发布一个 CheriBSD/Morello 的首个快照,并与其他开源的 Morello 软件一起发布,但我们的目标是 2020 年 12 月发布一个更加成熟和可用的实现。
内核空间的空间内存安全(纯能力内核) - 当前的 CheriBSD 内核是一个混合的 C 程序,其中只有指向用户空间的指针是 CHERI 能力。这确保内核遵循应用程序运行时的意图,且无法用于绕过应用程序指针的边界。我们已经开发并即将合并一个纯能力内核,其中所有的指针都是经过适当边界限定的能力。这大大减少了缓冲区溢出的机会。这种空间内存安全为未来的工作奠定了基础,如设备驱动程序的隔离和内核的时间安全性。
用户空间堆的时间内存安全(Cornucopia) - CHERI 能力提供了必要的特性,以启用对已释放指针的有效且高效的撤销。通过 Cornucopia,我们实现了一个轻量级的撤销框架,提供了防止“重新分配后使用”错误的保护,平均开销低于 2%。我们计划在接下来的一年里进一步降低这些开销,并将此功能合并到主线的 CheriBSD 中。
我们一直在致力于更新来自布加勒斯特理工大学的 arm64 bhyve,以便将其提交到 FreeBSD。我们已经将初步的修改上游到 FreeBSD,以支持这一工作。
FreeBSD 基线改进 - 我们正在将各种 bug 修复和 PCIe 支持的改进上游到 FreeBSD,还为 N1SDP 和 Morello SoC 上的系统 MMU(SMMU)提供了支持。我们已经上游了支持从 macOS 和 Linux 跨平台构建 FreeBSD(有一些限制;请参见关于跨构建的单独条目)。我们还修复了 RISC-V ABI 的实现 bug。
我们发布了 能力硬件增强的 RISC 指令集:CHERI 指令集架构(版本 8)。主要变化包括将 CHERI-RISC-V 提升为非实验性,并讨论了 Arm 的 Morello 原型。
我们开发了一套 对抗性 CHERI 练习和任务,旨在向安全研究人员介绍 CHERI 保护功能。
联系方式:Mitchell Horne <mhorne@FreeBSD.org> 联系方式:freebsd-riscv 邮件列表 联系方式:IRC #freebsd-riscv 在 freenode 上
FreeBSD/RISC-V 项目为在 RISC-V 指令集架构 上运行 FreeBSD 提供支持。
本季度,我们修复了多个重要的 bug。我们识别并解决了系统中的几个挂起问题,还修复了 QEMU 中实现平台级中断控制器(Platform Level Interrupt Controller)的 bug。这个修复已包含在新的 devel/qemu50
和 devel/qemu-devel
Port 中。
这些修复的最终结果是,现在可以可靠地在 QEMU 中运行测试套件,并且可以顺利完成。整个运行过程需要几个小时,因此已配置 CI 每天运行一次这个任务。目前,我们正在积极努力缩短整个测试套件的运行时间。
我们创建了一个新的 u-boot Port :sysutils/u-boot-qemu-riscv64
。此变体可以作为辅助引导程序,与 OpenSBI 一起加载并启动 FreeBSD 的 loader(8)
,从 EFI 系统分区中启动。
下个季度,可能会有更多修复来解决一些失败的测试用例。
涉及 Ports 的更改,无论是对大多数树进行的广泛更改,还是对单个 Port 的修改。
联系方式:Chuck Tuffli <chuck@freebsd.org>
bhyve 是 FreeBSD 和其他操作系统中用于运行虚拟机的虚拟化程序。当不使用启动 ROM(即 UEFI)时,用户必须为 bhyve 加载来宾操作系统。对于非 FreeBSD 来宾,加载程序是修改版的 GNU GRUB(即 GNU GRand Unified Bootloader),它与 bhyve 进行接口。这项工作旨在更新基础的 GRUB 代码到最新版本,并提高 FreeBSD 上的可用性。
当前的 grub-bhyve 基于旧版 GRUB(大约是 2015 年的版本),因此缺少一些更新的功能,如 XFS 文件系统和 syslinux 支持。通过此次更新,现在安装 CentOS 等操作系统时,不再需要额外步骤来更改默认文件系统为 XFS 以外的其他文件系统。
在内部,代码已重新结构化,成为一个独立的“平台”,这应使其更容易与上游开发保持同步。最大的改进是能够自动找到并加载来宾磁盘映像中的 GRUB 配置文件。通过这个更改,用户无需创建设备映射文件或指定使用哪个 Linux 内核或 initrd 镜像。更重要的是,如果来宾镜像更新了其 GRUB 配置(例如,在更新内核后),在调用 grub-bhyve 时不需要做任何更改。请注意,这个功能需要一个新的“disk”选项:
自动配置文件检测与 GRUB 配置文件(例如 CentOS、Ubuntu)以及 syslinux 配置(例如 Alpine)兼容。对于冒险者来说,grub-bhyve Git 仓库的 blscfg 分支上有对 Fedora 的 BootLoaderSpec(即 blscfg
)的实验性支持。
该代码已经在一些 Linux 变体上进行了测试,但仍需要更广泛的测试(和 bug 报告!)。新版本没有 Port,但可以在 FreeBSD 上轻松构建。在克隆/下载源代码后,运行:
生成的二进制文件 grub-bhyve
将位于 grub-core/
目录中。如果你成功使用或遇到问题,请告知我。
联系方式:Adriaan de Groot <kde@FreeBSD.org>
KDE on FreeBSD 项目的目标是将 KDE 社区发布的所有软件打包到 FreeBSD 的 Ports 中。这些软件包括一个完整的桌面环境 KDE Plasma、一个名为 KDevelop 的 IDE、一个名为 Kontact 的 PIM 套件以及其他数百个可以在任何 FreeBSD 机器上使用的应用程序。
随着几乎全在线时代的延续,KDE 社区转变了工作方式,开始参与在线活动。每年的大会 Akademy 也通过视频会议的形式在线进行。同时,软件的发布依然在继续,因此本季度 kde@ 团队做了以下工作:
将计划于 2020 年 10 月正式发布的 KDE Plasma 下一版本的 beta 版本,放入了 Area51 开发树。Area51 是 FreeBSD Ports 的一个分支,用于进行 KDE Port 的新开发。
每月的 KDE Plasma 桌面更新按时且安全地发布。
本季度内发布了三次 KDE Frameworks 5 版本,包括一个新的框架来处理 DAV 作业。
6 月的应用更新及其 .1 版本略微延迟发布,但带来了通常的 KDE 应用程序和库更新。
一个新的 Digikam 版本在发布当天就进入了 Ports。
一个新的 KDevelop 版本在发布后一天进入 Ports。这个更新修复了多个与重构支持相关的崩溃问题。
Qt 更新到了 Qt 5.15,这是 Qt5 系列的最后一个 LTS 版本,预计将发布 bug 修复版本,但下一个主要版本将是 Qt 6。
在基础设施方面,8 月对 CMake 和 ninja 进行了小幅更新。像往常一样,kde@ 团队继续支持 xorg@ 和 gnome@ 团队在 FreeBSD 上维护 Free Desktop 堆栈,包括 XOrg、poppler 和 xdg-utils。一个新的 MAINTAINER
组 desktop@ 已经创建,用于共享维护这个共享堆栈。
随着 Python2 的弃用临近,QtWebEngine 的构建系统(它本身是 Chromium 的一个分支)已成为第四季度的一个紧迫问题,未来几个月无疑将消耗大量时间。
文档树、手册页或外部书籍/文档中的值得注意的更改。
联系方式:Sergio Carlavilla <carlavilla@FreeBSD.org>
Doc New Generation 项目旨在将网站和所有现有文档转换为 Hugo/AsciiDoctor。目前,几乎所有内容都已转换,你可以在仓库中查看。
使用 Hugo 和 AsciiDoctor 的目标是减少学习曲线,让人们可以快速开始使用我们的文档系统。使用 Hugo 的其他好处是,我们可以使用除 AsciiDoctor 之外的其他技术,如 MarkDown、RST、Pandoc 等。
剩余的任务包括:
完成一些书籍的 AsciiDoctor 转换。
对 CSS 进行一些调整以实现响应式设计。
为 AsciiDoctor 扩展添加索引表格和图形功能。
进行一次全面审查。
迁移的具体日期尚待讨论。欢迎提交补丁、评论和异议。
许多项目在 FreeBSD 上构建或将 FreeBSD 的组件集成到他们的项目中。由于这些项目可能对更广泛的 FreeBSD 社区感兴趣,我们有时会在季度报告中包含这些项目提交的简要更新。FreeBSD 项目对于这些提交中的任何声明的准确性或真实性不做任何声明。
联系方式:Stephan Lichtenauer <sl@honeyguide.eu>
pot 是一个 jail 管理工具,还支持通过 nomad 进行编排。
Potluck 旨在成为 FreeBSD 和 pot 的资源库,类似于 Dockerhub 对于 Linux 和 Docker 的作用:一个用于 pot 的风味和完整镜像的仓库。
在上个季度,我们创建了一组初始的 Nomad、Consul 和 Traefik 镜像,这些镜像足以直接运行一个简单的虚拟数据中心。一篇三部分的文章系列,解释如何设置这个环境 也已经发布。
此外,我们还创建了适合通过 Nomad 和 Consul 在这种环境中进行调度的现成镜像,例如 BackupPC 或 Postfix 备份 MX 服务。
未来计划包括增加更多镜像,并在现有镜像中暴露更多配置选项,以实现更灵活的使用。
除了常规的反馈和测试,我们非常欢迎更多的风味和补丁!
赞助商:Honeyguide GmbH & Honeyguide Group (Pty) Ltd
联系方式:Puppet 团队 <puppet@FreeBSD.org>
自几年前我们上次发布状态报告以来,puppet@ 团队定期更新了各种 Puppet Port,以跟进 Puppet 4、Puppet 5 和 Puppet 6 的上游发布。Puppet 4 在达到 EOL 后被移除。
最近,团队努力增强 Facter 4,以便它可以作为 Facter 3 在 FreeBSD 上的替代品。Facter 4 是 Facter 3 的 Ruby 重写版本,而 Facter 3 则是 Facter 2 的 C++ 重写版本,Facter 2 最初是用 Ruby 编写的。因此,我们有两个 Facter Port :sysutils/facter 是 C++ 实现(Facter 3),sysutils/rubygems-facter 是 Ruby 实现(几周前已更新为 Facter 4)。Puppet 5 和 Puppet 6 Port 现在允许选择使用哪个版本的 Facter。Facter 4 将成为 Puppet 7 的默认版本,预计 Puppet 7 将很快发布。
我们正在准备添加 Puppet 7 Port (sysutils/puppet7),以及 PuppetServer 7(sysutils/puppetserver7)和 PuppetDB 7(databases/puppetdb7) Port。
关于编排,大多数 Marionette Collective Port 已被弃用,最后一个组件 sysutils/mcollective 也预计将很快被弃用:Marionette Collective 在 Puppet 6 中已不再提供,Bolt 已作为轻量级替代品提供。
Bolt 已经在 Port 树中可用,作为 sysutils/rubygems-bolt。如果你仍在使用 Marionette Collective,建议你关注 Choria,它很快将作为 sysutils/choria 进入 Port 树。Choria 是 Marionette Collective 的直接演变,允许平滑过渡。Choria 进入 Port 树后,Marionette Collective 将被弃用。