关注了就能看到更多这么棒的文章哦~
内核 Rust 实验的现状
作者:*Jonathan Corbet*
2025年12月13日
Gemini 辅助翻译
维护者峰会
在 Rust 中编写内核代码的能力最初是作为一个实验性功能明确添加的——如果进展不顺利,Rust 将会被再次移除。在2025年维护者峰会(Maintainers Summit)上,召开了一次会议来评估该实验的现状,并决定是否是时候宣布其成功。会议得出的结论是(可以说并不令人意外)该实验确实取得了成功,但在此过程中也提出了一些有趣的观点。
亮点
Miguel Ojeda 主持了会议,并首先介绍了几个亮点。NVIDIA GPU 的 Nova 驱动(driver)即将推出,部分代码已经合并到主线(mainline)中,并且 Android binder 驱动 已合并到 6.18 版本。他说,更重要的消息是,运行 6.12 内核的 Android 16 系统正在搭载 Rust 编写的 ashmem 模块。这意味着现在有数百万真实设备运行着包含 Rust 代码的内核。

与此同时,Debian 项目终于在其内核构建(kernel builds)中启用了 Rust;这将在即将发布的 "forky" 版本中体现。内核中 Rust 代码的数量正在“爆炸式增长”,在过去一年中增长了五倍。内核开发者与 Rust 语言开发者之间的合作量有所增加,这使得内核项目对语言本身的发展产生了显著影响。他说,Rust 社区致力于帮助内核项目。
rustc_codegen_gcc 工作正在推进中,它将 GCC 代码生成器嫁接到 rustc 编译器上。与此同时,完全基于 GCC 的 gccrs 项目也取得了良好进展。Gccrs 现在能够编译内核的 Rust 代码(尽管显然,将其编译成可正确运行的代码仍在进行中)。gccrs 开发者将构建内核视为他们的首要任务之一;Ojeda 表示,预计明年该项目会发布一些有趣的消息。
关于 Rust 语言版本,目前的计划是确保内核始终可以使用 Debian 稳定版中发布的 Rust 版本进行构建。内核的最低版本将在相应 Debian 发布后 6-12 个月内提高。目前内核要求最低版本为 Rust 1.78,而当前版本(截至会议时)为 1.92。Debian 正在发布 1.85,因此 Ojeda 建议内核升级到该版本,这将有助于移除许多变通方案(workarounds)。
Jiri Kosina 询问最低语言版本会多久增加一次;Ojeda 重申,每次 Debian 稳定版发布后都会增加,尽管这最终可能会变为每隔一个 Debian 版本增加一次。他说,这主要取决于开发人员的需求。Linus Torvalds 表示,他很乐意相对激进地提高最低版本,只要这不会导致开发人员被拒之门外。发行版(Distributors)更新 Rust 的速度比他们传统更新 GCC 的速度要快,因此要求较新版本的问题应该会减少。
Arnd Bergmann 说,内核本可以在比实际早一年将 GCC 8 设置为最低支持版本,但 SUSE 的 SLES 落后了。Kosina 回答说,SUSE 正在改进并发布更新的编译器版本。Dave Airlie 担心一旦企业发行商开始启用 Rust,可能会出现问题;他们可能会长期锁定一个旧版本。然而,Thomas Gleixner 指出,即使是 Debian 现在也正在发布 GCC 14;总的来说情况已经好转。
仍然是实验性的吗?
鉴于所有这些消息,Ojeda 问道,现在是时候重新考虑“实验性”标签了吗?他一直试图在请求这一改变时保持保守,但表示,随着 Android 搭载 Rust 代码,时机已经成熟。Airlie 建议在4月1日发布这一声明,并表示实验失败了。更严肃地说,他表示,移除“实验性”标签将有助于人们争取公司为 Rust 投入更多资源。
Bergmann 同意宣布实验结束,他只担心 Rust 仍然“在没有人使用的架构(architectures)上无法工作”。因此,他认为目前 Rust 代码需要限制在受良好支持的架构上。Ojeda 说,目前对 x86、Arm、Loongarch、RISC-V 和用户模式 Linux(user-mode Linux)都有很好的支持,所以主要架构(main architectures)状况良好。Bergmann 询问了 PowerPC 的支持情况;Ojeda 回答说,PowerPC 开发者是第一批发送拉取请求(pull request)为其架构添加 Rust 支持的人之一。
Bergmann 坚持询问 s390 的支持情况;Ojeda 说他已经调查过,认为它应该可以工作,但他不知道目前的状况。Airlie 说 IBM 将不得不解决这个问题,而且这会发生的。Greg Kroah-Hartman 指出 Rust 上游(upstream)支持该架构。Bergmann 询问是否预期大端(big-endian)系统会有问题;Kroah-Hartman 说,有些驱动程序(drivers)可能根本无法在这些系统上正常运行。
关于将核心内核(core-kernel)对 Rust 代码的依赖性,Airlie 表示,这在未来一两年内不应该发生。Kroah-Hartman 说,他曾担心核心内核和 Rust 驱动程序之间的交互,但发现交互比他预期的少得多。他说,Rust 中的驱动程序确实被证明比用 C 编写的驱动程序安全得多。Torvalds 说,有些人开始推动为 Rust 代码分配 CVE 编号,这证明它绝对不是实验性的;Kroah-Hartman 说,目前还没有发布这样的 CVE。
DRM(图形)子系统是 Rust 语言的早期采用者。然而,当 Airlie(DRM 维护者)说该子系统“距离禁止用 C 编写新驱动程序并要求使用 Rust 只有大约一年”时,这仍然令人惊讶。
Ojeda 回到他最初的问题:能否结束“实验性”状态?Torvalds 说,在将近五年之后,时机已经成熟。Kroah-Hartman 引用编译器开发者日益增加的支持作为宣布胜利的有力理由。Steve Rostedt 询问函数追踪(function tracing)是否有效;Alice Ryhl 迅速回答说它确实有效,尽管“符号去混淆(symbol demangling)会更好”。
Ojeda 总结说,用 Rust 工作的能力成功地吸引了新的开发者和新的维护者,这是该项目最初的目标之一。它也激励人们进行文档工作。他说,有很多人希望审查 Rust 代码;他正在整理一份更有经验的开发者名单,他们可以帮助新人们尽快上手。
会议结束时,Dan Williams 说他无法想象有比 Ojeda 更适合领导这样一个项目的人,并向他表示祝贺;现场爆发出热烈的掌声。
全文完LWN 文章遵循 CC BY-SA 4.0 许可协议。
欢迎分享、转载及基于现有协议再创作~
长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~



935

被折叠的 条评论
为什么被折叠?



