已切换至秋季配色,取自《小市民系列》,若影响可视性等问题请联系邮件地址 [email protected]

Mark Johnston 的 BSDCan 2025 旅行报告

FreeBSD 基金会赞助我前往渥太华参加 BSDCan 2025 会议及 FreeBSD 开发者峰会。如往常一样,开发者峰会在 6 月 11 日和 12 日举行,为期两天,随后在 13 日和 14 日举办正式会议。按照惯例,我从多伦多乘火车前往渥太华参加 BSDCan,这次带来了我的 ARM Morello 台式机,以便在 Brooks Davis 关于 CHERI 的演讲中使用,并演示将其支持回溯到 FreeBSD。Ed Maste 善意地帮我运送了设备,这让我的行程轻松许多;回程时,我不得不将其放在超大行李箱中随火车携带。我以前从未尝试过这样运输台式机,当我回家后发现它仍然可以正常启动时,我感到相当安心。

开发者峰会的第一天主要以演讲为主,中间安排了充足的休息时间,方便大家交流或进行一些副项目开发。会议期间,我通常会在休息时间和晚上在 90U 的黑客休息室处理一个到两个小项目,这次是针对内核调试的 GDB 脚本,灵感来自与我们尊敬的 pf 维护者 Kristof 的讨论。撰写本文时,我还未完成会议期间想要完成的工作,但很快会完成。

第一天早上的主要亮点是例行的核心小组动态,会中 FreeBSD 核心小组的成员汇报了各类议题。特别引起我注意的是关于在 FreeBSD 项目中使用基于 LLM(大型语言模型)的编程工具的草案政策。简单总结,该政策禁止将 LLM 生成的代码纳入项目,但允许在开发过程中以其他方式使用 LLM,例如帮助审查补丁、撰写提交信息或其他非显式许可的内容。该政策旨在避免将来源不明的代码“污染”FreeBSD 项目,众所周知,许多 LLM 模型训练数据中包含与 BSD 许可不兼容的代码,目前法律上尚缺乏明确先例表明将其输出纳入项目是绝对安全的。

表面上看,这似乎是合理的政策:它试图在保持项目许可完整性(对重要的 *BSD 用户吸引力很大)与使用新工具辅助开发之间取得平衡。尽管近期 LLM 编程的热度略显夸张,我确实发现它们在某些工作类型中很有用[*]。在随后的讨论中,我对会议室中普遍持消极态度感到有些失望。然而,核心小组的做法公平公正,也与其他大型开源项目保持一致,我对未来几年开发者的动态很感兴趣。我的个人观点是——撇开许可问题——我们应鼓励资深开发者在愿意的情况下尽可能利用 LLM。长期从事 OSS 的开发者已经习惯于审查和修改非自己编写的代码,我认为这种怀疑精神足以对低质量 LLM 输出进行把关。

午餐后,Verisign 的 Rick Miller 发表了关于在核心互联网 DNS 基础设施中使用 FreeBSD 的深度防御策略的演讲。他讲解了操作系统多样性在提升安全性方面的作用,以及为什么 FreeBSD 是其中一个理想候选操作系统。作为此策略的一部分,Verisign 在其基础设施中同时使用 Linux 和 FreeBSD,并在不同操作系统上使用不同的应用框架,以进一步降低对单一技术栈的依赖。具体来说,虽然 Verisign 的应用在 Linux 上使用 DPDK,在 FreeBSD 上可以使用 Netmap 框架实现类似的底层网络硬件访问。Rick 还介绍了 Linux 与 FreeBSD 各自存在的内核安全漏洞,但我认为大多数 CVE 级别的内核漏洞高度依赖操作系统,尤其是内存安全漏洞。Verisign 对此策略的全面投入令人印象深刻,我希望未来能看到更多类似案例。

在 Rick 的演讲之后,我和其他 FreeBSD srcmgr(源代码管理)团队成员做了类似早晨核心小组动态的报告,介绍了源代码管理团队的工作及正在解决的问题。特别值得注意的是,我们呼吁潜水者(lurkers)加入团队并参与会议,即便不是正式成员,也能参与源代码管理的讨论及 bug/PR 分拣工作。我们收到了许多感兴趣的开发者反馈,现在几周后,源代码管理的双周会议参与人数从通常的四人增加到九人。

开发者峰会第二天,我参加了 Brooks Davis 有关 CHERI 的演讲,以及将其支持回溯到 FreeBSD 的动机。整个演讲使用我从多伦多带来的 ARM Morello 系统;KDE 桌面堆栈直到用于渲染幻灯片的 PDF 查看器都运行在纯 capability 模式下,所有 C 指针都用 CHERI 能力表示。在此模式下,许多内存安全漏洞会导致应用以确定性崩溃关闭,而非暴露给利用。Brooks 介绍了几个正在进行的商业 CHERI 硬件项目,通常基于 RISC-V,并讲解了从 CheriBSD 上游到 FreeBSD 的路径。CheriBSD 含有一些大规模改动,其中部分无法上游;混合模式下,内核作为典型 aarch64 二进制运行,同时支持纯 capability 用户空间应用。这些补丁较为 hack,需要对内核操作的所有用户空间指针进行显式标注。演讲中,Brooks 还展示了若干 CHERI 特性,尤其是 CheriBSD 的基于库的隔离(c18n)。

在主会议期间,我参加了不少精彩演讲,个人亮点包括:

  • ELF Nightmares, GOTs, PLTs and Relocations Oh My – John Baldwin 展示了 ELF 二进制执行过程中静态和运行时链接器使用的数据结构,涉及 PLT 函数调用间接跳转等复杂概念,并提供了出色的可视化演示,有助于理解。

  • ABI Stability in FreeBSD – ShengYi Hung 介绍了新工具 ctfdiff,可比较两个文件的 CTF(Compact C Type Format)数据,检测类型定义和函数签名差异,辅助判断内核变更是否影响出树内核模块的二进制接口。演讲后,围绕如何使用该工具展开了热烈讨论,我提出了比较内核模块与目标内核 CTF 类型图的方法,以减少误报。

  • Improvements to FreeBSD KASAN – Zhuo Ying Jiang Li 分析了 FreeBSD KASAN 实现的若干不足,并提出解决方案。KASAN 利用编译器插装和小型运行时组件检测内核内存安全漏洞。她指出两个主要问题:一是 UMA slab 中对象间未插入填充,二是已释放对象未隔离,这会降低 KASAN 检测 use-after-free(UAF,释放后重用漏洞)的能力。她提出通过修改 UMA 解决这些问题,并讨论了利用现有 UMA 特性进行优化的策略。我期待这些补丁尽快被上游采纳。

非常感谢 FreeBSD 基金会赞助我的此次行程。

[*] 不管怎样,此报告均未借助大型语言模型辅助撰写。

最后更新于