本文经授权转自公众号CSDN(ID:CSDNnews)
作者 | Jonathan Corbet 编译 | 苏宓
Linux 从诞生发展到今天,已经过去了 33 年,期间虽然伴随过各种争议,但有 Linux 之父 Linus Torvalds 坐阵,整体发展还算平稳。
然而,自从 2022 年 Linux 内核宣布引入 Rust 语言以来,这个社区内部掀起了一场意料之外的风波。不久前,Rust for Linux 项目的核心维护者 Wedson Almeida Filho 决定退出该项目,他坦言已厌倦了社区中不断增多的、与技术无关的争论,其中不乏涉及 Rust 与 C 的语言之争。
Wedson 的离开也为 Linux 社区关于这两种语言的讨论添了一把火,甚至有人直言 Rust 导致 Linux 社区分裂成了两派。其实,连 Linus Torvalds 本人都对这种局势感到困惑,其在近期出席 Open Source Summit EUROPE 时发出感慨:“我搞不懂为什么现在还有这么多人对 Rust 产生如此大的争议。”
面对这种情况,据 LWN.net 报道,在 2024 年维护者峰会上,在不少维护者提出了自己的疑问之下,Rust for Linux 维护者 Miguel Ojeda、Linus Torvalds 现身回应,并讨论了 Rust 在内核中的现状,以及是否应该不再将其视为一个实验性项目。
1、维护者关于 Linux 引入 Rust 的担忧
尽管对于一些问题还没有明确答案,但很明显,Rust 在内核中的应用将会继续稳步推进。
Miguel Ojeda 首先提到的是内核子系统维护者需要提供的灵活性。两年前,在 Linux 内核首次引入 Rust 支持之前,他就要求过这种灵活性,因为在将 Rust 代码融入内核时,有时需要修改一些核心 API。现在这种灵活性的需求变得尤为重要。
他继续说道,关于内核中使用 Rust 的期望存在明显的分歧。Ojeda 阅读了数千条关于最近事件的评论和邮件,发现了大家对 Linux 内核 Rust 项目现状和未来的各种看法。他希望大家能达成一个共识。然而,目前,很多个人和公司想要在内核中使用 Rust 投资资源,但对其未来发展感到不确定。
其中有开发者 Jason Gunthorpe 表示,他和许多其他内核开发者一样,尚未参与该项目。他认为该项目的目的是展示 Rust 适用于内核的可行性,现在还在等待最终的结论。
Gunthorpe 表示,他希望在 Linux 完全投入使用 Rust 之前,能看到一个明确的信号,即 Rust 已经取得了成功。此外,他目前还无法使用 Rust,因为 RHEL(Red Hat Enterprise Linux)还没有合适的编译器支持。
另一位用户 Dave Airlie 认为 Rust 在 Linux 上的实验还没有结束。
维护者 Greg Kroah-Hartman 则表示,目前很清楚内核中使用 Rust 是可行的。之所以看上去进展缓慢,是因为 Rust 开发者主要在集中开发设备驱动程序。由于驱动程序需要与许多其他内核子系统进行交互,因此有大量支持代码需要合并,这需要时间。
2、工具和帮助
此外,还有开发者 Arnd Bergmann 表示,用 Rust 编写的驱动程序无疑比 C 更好,但他担心要在所有相关子系统中加入支持需要多长时间,以及相关工具何时能够广泛普及。他也在 2024 年维护者峰会提出自己的疑问,什么时候才能用发行版自带的 Rust 编译器来构建内核代码?
Ojeda 回答说,「内核代码现在支持多个编译器版本,而且许多社区导向的发行版已经提供了合适的编译器」。另一位 Linux 子系统维护者 Airlie 认为,现在要求 Rust 社区提供一个完全稳定的编译器还为时过早,因为内核中还没有足够多的 Rust 代码来实现这一点。
Linus Torvalds 此前也警告大家,他不希望现在讨论每个子系统都支持 Rust 的问题;目前能在一些子系统中加入支持就足够了。彼时 Airlie 问到——“如果某个子系统阻碍了进展该怎么办时”,Torvalds 回答说:“那就是我的工作。”
Christian Brauner 说,Binder 驱动程序正在推动许多子系统的工作,包括有争议的文件系统抽象。这些代码目前正在审核中。Airlie 补充说,第一个真正合并的驱动程序将是一个转折点,之后进度会加快;接下来的挑战是创建可以从 C 调用的 Rust 基础结构。
还有开发者 Will Deacon 问 Ojeda,Rust 社区是否在支持内核开发者。Ojeda 回答说,他正在组建一个专家团队来提供所需的帮助,其中一些人是精通 Rust 的核心开发者,即使他们缺乏深厚的内核经验,也能帮助审核补丁。
Torvalds 指出,目前有一些内核特性与 Rust 不兼容,这阻碍了 Rust 的支持进程。他特别提到了`modversions`,这个问题正在解决中。阻碍特性的列表正在缩短,但仍包含了一些人们需要的内核功能。
3、管理期望
维护者 Dan Williams 提到,他曾花了两年时间才让一个新的`mmap()` 标志被合并。他表示,需要对 Rust 社区管理期望,因为合并这些代码将是一个缓慢的过程。Ojeda 承认了这一点,但他说,资助 Rust 工作的公司看不到这些代码被合并到主线,这使得他们不愿意继续资助。
还有开发者 Brauner 表示,没人说文件系统抽象不会被合并,讨论的只是如何实现这些细节。Ted Ts'o 说,Rust 开发者一直在努力避免吓到内核维护者,并且表示“你只需要学一点点 Rust 就行了”。但实际上,仅仅学一点 Rust 是不够的,因为文件系统抽象涉及到复杂的锁定规则,需要详细的文档和教程来指导如何用惯用的 Rust 编写文件系统代码。他说,他还有很多需要学习的内容,并且愿意去学,但需要知道从哪里开始学。
Torvalds 说,并不需要理解 Rust 就可以让它进入一个子系统;毕竟,没有人完全理解内存管理子系统,但每个人都能够使用它。他指出,Rust 开发者不仅仅是在创建子系统绑定,他们还试图创造本质上更安全的接口,这通常需要修改 C 代码。这样做虽然增加了子系统的影响,但也使 C 代码更好。Airlie 补充说,Rust 开发者需要带着维护者一起前进,否则维护者无法理解正在发生的事情。
Deacon 提出了关于 C 端重构的问题。更改 C 接口往往会影响 Rust 代码,并可能导致其无法运行;这时候就需要有人来修复这些问题。Torvalds 表示,目前破坏 Rust 代码是可以接受的,但将来这种情况会改变。Kroah-Hartman 认为,Rust 开发者可以承担他们添加的抽象层的维护责任。
4、需要数年的时间,Rust 才能在 Linux 中进入生产环境
Linus Torvalds 表示,目前内核中的任何功能都不依赖 Rust,短期内也不会依赖。重要的是向前推进,因此开发者们应该“全速前进”,暂时不要太在意这些问题。他说,即便现在细节还不完善,只要能让功能正常运行就足够了。一旦用户开始依赖 Rust 代码,才需要更细致地处理这些问题。但现在,如果开发者因为过于谨慎而裹足不前,反而会让项目受挫。
Thomas Gleixner 认为,Rust 开发者在记录文档方面非常认真,他不担心重构代码的问题。如果他遇到不理解的地方,他会像处理 C 代码那样直接发邮件问开发者。Torvalds 补充说,Rust 有很多优势,内核应该尝试充分利用这些优势。Kroah-Hartman 则表示,Rust 可以消除内核中一整类的 Bug。
Deacon 问到,目前有多少开发者在从事 Rust 相关工作。Ojeda 回答说,目前有六到七个人,其中大多数是“真正的 Rust 专家”。在团队中,最具内核开发经验的是 Wedson Almeida Filho,但他最近离开了这个项目,这是一个不小的损失,不过 Ojeda 正在努力招募其他人加入。
Gleixner 回忆道,20 年前,围绕实时内核工作的恐惧和担忧非常多,他现在看到大家对 Rust 的反应和当时很像。他认为不能让这些恐惧主导发展方向。Torvalds 说,Rust 已经部分集成到内核两年了,这不算什么;用 Clang 构建内核的项目花了十年,而那还是用的同一种语言。
Julia Lawall 提问,当 C 端发生变化时,这些变化会对 Rust 代码产生多大影响?Bergmann 表示,审查 Rust 对 C 子系统的抽象并不难,他可以理解代码的内容,但不一定能改动它。
Torvalds 说,社区可以继续探索 Rust 几年时间。而 Gunthorpe 认为最好能把某些东西投入到生产环境中,这样可以给项目带来一些急需的动力。他认为 Binder 驱动可能是个不错的选择。Ojeda 表示,这将有助于争取公司更多的支持。随着讨论的结束,Torvalds 总结道,告诉大家让内核中的 Rust 代码达到生产级别是会发生的事,但这需要数年的时间。
原文:https://lwn.net/SubscriberLink/991062/b0df468b40b21f5d/
本文转自公众号“CSDN”,ID:CSDNnews
---END---