关于 Linux 内核的开发究竟是应该坚持使用单一的 C 语言,还是可以适当引入 Rust,一直是整个 Linux 社区悬而未决的事情。
最近,尝试将 Linux 移植到苹果自研 M 系列芯片平台的 Asahi Linux 负责人 Hector Martin,因为与反对引入 Rust 的 Linux 维护者发生了冲突,故而宣布辞去 Apple Silicon 的维护者职务,并退出 Asahi Linux 项目。随后,Nouveau 驱动程序开发人员 Karol Herbst 也因对 Linux 内核如今“有毒”的环境感到失望,辞去了 Nouveau 维护者职务...
在这一系列动荡之后,很多人认为,Linux 项目高层再不出面,恐怕 Linux 社区就要“四分五裂”了。
这不,前有 Linux 内核维护者透露,Linus Torvalds私下表示,他将不顾部分维护者的反对,继续推进 Rust 代码的合并。后就有在今日,Linux 的二把手 Greg Kroah-Hartman 出面亲自为 Rust 语言站台。在一封 Linux 内核邮件列表帖子中,Greg Kroah-Hartman鼓励大家使用 Rust 来编写新的内核代码或驱动程序,而不是继续使用 C 语言。
Linux 维护者的反对声依然在持续
带来“Linus 将推翻维护者对内核中 Rust 代码的否决权”这一消息的并非是 Linus 本人,而是 DMA 映射助手及内核其他多个其他领域的维护者 Christoph Hellwig。
Hellwig 长期以来一直对在 Linux 内核中引入 Rust 及其他次要编程语言持批判态度,尤其对 Rust 在内核中的应用表示担忧。
我完全支持将我们的 C 代码库逐步转向这些问题无法出现的方向,Kees、Gustavo 等人所做的工作非常棒,完全是我们需要的。我们有 3000 万行 C 代码,这些代码在未来几年内不会消失。这是一项值得的努力,不会停止,也不应该停止。
但是对于新代码/驱动程序,使用 Rust 来编写它们,因为这些类型的 bug 根本不会发生(或者发生得少得多),对我们所有人来说都是一种胜利,为什么我们不这么做呢?C++ 在未来几十年内不会给我们带来这些东西,而且 C++ 语言委员会的问题似乎也指出,如果大家想拥有一个能长期维护的代码库,就最好尽快放弃 C++。
Rust 还让我们能够以一种几乎不可能出错的方式来定义内核中的 API。我们有太多难度大、棘手的 API,维护者需要进行大量的审查,以“确保你做对了”。这是因为我们的 API 多年来不断演化(比如有多少种方法可以安全地使用‘struct cdev’?),而 C 语言无法让我们以更安全/简便的方式表达 API。迫使我们这些 API 的维护者重新思考这些 API 是件好事,因为这使得我们能够为每个人清理它们,包括 C 语言用户,这将整体上让 Linux 变得更好。