导读:更新 Linux 内核维护者仍然不太相信将 Rust 代码添加到开源项目中是一个好主意,但其 VIP 管理团队正在支持该语言的集成。
在 Linux 内核邮件列表的一个正在进行的帖子中,高级项目开发人员 Greg Kroah-Hartman 敦促其他贡献者接纳那些有兴趣贡献 Rust 代码来改进内核的开发人员。
“是的,混合语言代码库很粗糙,难以维护,但我们是内核开发人员,该死的。我们维护和加强 Linux 的时间比任何人想象的都要长,”他在周三如此写道。
“我们已将开发模式转变为运转良好的工程奇迹,创造了其他人从未能够完成的事情。
“添加另一种语言真的不成问题。我们过去处理过更糟糕的事情,现在不应该放弃确保我们的项目在未来 20 多年取得成功的愿望。面对新的好主意时,我们必须继续前进,并欢迎那些愿意加入我们实际工作的人,以确保我们共同取得成功。”
他的帖子是上个月开始的一场争吵中的最新一篇,当时一个提议的补丁允许 Rust 编写的设备驱动程序调用主要基于 C 语言的内核的核心DMA API,但却遭到了内核维护者 Christoph Hellwig 的质疑。
Hellwig 将维护多语言代码库比作癌症,并强调他不愿意承担维护 Rust 设备驱动程序代码所带来的负担。随后的争论促使当时担任 Asahi Linux 项目负责人的 Hector Martin 要求 Linus Torvalds 来决定是否将补丁拉入内核。
托瓦兹伯爵最终作出回应,捍卫 Linux 内核开发过程,并斥责 Hector Martin 在社交媒体上就此事上哗众取宠。Hector Martin 后来辞去了 Linux 维护人员的职务,还辞去了Asahi Linux 项目的相关职务。
政策之斗争
领导 Rust for Linux 项目,并为 Linux 内核维护做出贡献的 Miguel Ojeda通过发布“ Rust 内核政策”试图让内核开发社区放心。
本周早些时候,Hellwig重申了他对在单一代码库中混合使用 Rust 和 C 代码的担忧,并批评了 Ojeda 的 Rust for Linux 政策文件,理由是该文件出现在网络上,而不是内核代码树中。
他还对 Rust 在内核中的作用表示担忧。
“我想了解 Rust 这项‘实验’的目标是什么:如果我们想修复内存安全方面现有的问题,我们需要对现有代码进行修复,并找到改进的方法。我们最近在这方面投入了大量工作,但还需要做更多,”他写道。
Rust 于 2022 年被添加到 Linux 内核中,因为它比 C 具有更好的内存安全性。
多年来,技术专家一直指出,大型代码库中的大多数严重错误和漏洞都源于内存安全错误,而这些错误可以或应该通过使用内存安全语言和工具来避免。因此,科学家与政府认为,开发人员应尽可能并酌情使用内存安全的编程语言,例如 Rust、Go、C#、Java、Swift、Python 和 JavaScript。
鉴于 Linux 操作系统的普及度,这是一个表面上合理的想法。
大多数错误都是由于 C 中愚蠢的小极端情况造成的,而这些在 Rust 中完全消失了
然而,经验丰富的 C 和 C++ 程序员担心他们的技能可能会变得不那么重要,这是可以理解的。因此,许多人都在寻找实现或接近内存安全的方法,而不是盲目跟风使用 Rust。
Kroah-Hartman在回应微软内核开发人员冯博群时直接谈到了 Rust 和内存安全问题。
他写道:“我们所发现的大多数 bug(数量,而非质量和严重性)都是由于 C 中的小极端情况造成的,而这些 bug 在 Rust 中完全消失了。”
“诸如简单的内存覆盖(Rust 目前无法捕获所有这些问题)、错误路径清理、忘记检查错误值以及释放后使用错误等。这就是为什么我希望看到 Rust 进入内核,这些类型的问题就会消失,让开发人员和维护人员有更多时间专注于实际发生的错误(即逻辑问题、竞争条件等)。”
Kroah-Hartman 继续表示,他支持使 C 代码更加健壮,并且无论如何这项工作都不会停止。
“但对于新的代码和驱动程序,用 Rust 编写它们,这些类型的错误就不会发生(或者发生得很少),这对我们所有人来说都是一种胜利,我们为什么不这样做呢?”他写道。
“C++ 不会在短时间内给我们带来这些,C++ 语言委员会的问题似乎指出,如果每个人都希望拥有可以长期维护的代码库,那么最好尽快放弃该语言。”
这也伴随着一些常见的问题——正如 Kroah-Hartman 承认的那样,Rust 也不是一颗能够神奇地解决所有问题的灵丹妙药。但他坚持认为,Rust 会有所帮助。
Kroah-Hartman 并不是唯一一个持这种观点的人。例如,谷歌的内核安全工程师、长期的内核贡献者 Kees Cook表示:“我认为没有理由专注于替换现有代码——这样做实际上会带来很大的风险。但用 Rust 编写新东西非常有效。”
在有关 Ojeda 的 Rust 内核政策帖子提出的问题中,Hellwig 纠正了 Ojeda 的断言,即一些内核子系统维护者可能会决定他们根本不想要 Rust 代码,这是可以预料和接受的。
“Linus 私下表示说,他绝对会不顾维护者的反对,来合并 Rust 代码,”Hellwig 说。“所以现在,作为一名 Linux 开发人员或维护者,无论你是否愿意,你都必须正视与 Rust 打交道。”
托瓦兹伯爵现在也加入进来了。
已更新并添加
托瓦兹伯爵这次礼貌地回应了 Hellwig 反对将 Rust 绑定添加到内核,以用于 DMA API 的论点,并正确地指出,提议的 Rust 代码甚至不在 Hellwig 维护的基于 C 的核心组件中,绑定充当未改变的 C API 和 Rust 驱动程序之间的单独接口。
阅读完整的电子邮件,但这里有一些摘录...
事实上,你反对的拉取请求根本没有触及 DMA 层。老实说,你所做的基本上就是说“作为 DMA 维护者,我控制 DMA 代码的用途”。但这并不是这一切的运作方式。
下一步是什么?说特定的驱动程序不能执行 DMA,因为你不喜欢该设备,并且作为 DMA 维护者,你控制谁可以使用 DMA 代码?
这正是你尝试使用 Rust 代码所做的事情。
所以让我明确一点:如果你作为维护者,觉得你控制着谁或什么可以使用你的代码,那你就错了。
你不必接受任何 Rust 代码,也不必关心 DMA 代码中的任何 Rust 代码。你可以忽略它。但“忽略 Rust 方面”也自动意味着你对 Rust 方面没有任何发言权。
“我在技术上尊重你,我也喜欢和你一起工作,”该内核负责人这样补充道。
作者:场长
本文为 @ 万能的大雄 创作并授权 21CTO 发布,未经许可,请勿转载。
内容授权事宜请您联系 webmaster@21cto.com或关注 21CTO 公众号。
该文观点仅代表作者本人,21CTO 平台仅提供信息存储空间服务。