有一门编程语言 2015 年才上线,而在这 6 年中,前有亚马逊赞助开发,后有谷歌宣布在 Android 中支持,现在 Linux 也要将它加入内核开发,可谓名副其实的“大厂团宠”。
你猜这是哪个编程语言?答案是:Rust !
上个月,Linux 公布 Linux-Next 初步支持 Rust 后,引发众多热议,Linux 之父 Linus Torvalds 都表示对 Rust 进驻 Linux 内核“保持观望”。
而本周,Linux 内核开发者 Miguel Ojeda 在邮件列表中发布的一封邮件再次成为焦点:在 Linux 内核中添加 Rust 支持的 RFC。
这封邮件较为冗长,除了发布一些用 Rust 编写的 Linux 内核补丁,还将“Linux 内核支持 Rust”这一决定的利弊和开发者的担忧都进行了说明,其中包括:
Linux 内核开发者对引入 Rust 的决心:明知在内核中加入第二种语言会付出更多努力,甚至一旦不再支持 Rust,用 Rust 编写的模块将更难替换。尽管如此,他们还是认为引入 Rust 的优势比成本大;
在 Linux 中加入 Rust 的目的:降低内存安全 Bug 和逻辑 Bug 等风险、作为现代编程语言的 Rust 使新的驱动程序和模块更容易编写、将有更多人参与 Linux 内核开发等;
内核环境下,Rust 相较于 C 的优势:更严格的系统可减少逻辑错误、安全代码和不安全代码之间区别明显、广泛的独立标准库等;
同样,加入 Rust 也存在一些缺点:目前的 Linux 内核更适应 C 语言、对 LLVM 的依赖、编译速度较慢等由于 Rust 是一门年轻的编程语言引发的问题,不过都有改善的余地。
此外,邮件中也说明到目前为止,在基于 x86_64、ARM64 和 PPC64LE 的 Linux 内核中,基础设施已经为支持 Rust 做好准备,其它架构和对 Rust 内核支持的构建也在逐步完善。
Linux 之父:并不讨厌
对于这封邮件的内容,大部分人都表示支持,Linus 也再次对此表达了一些看法。虽然他对 Rust 进入 Linux 内核还有一些技术上的顾虑,尤其是担忧“某些 Rust 配置可能导致死机”这个问题,但大体上“并不讨厌”。
他还补充道,比起当前的基本模块,他更希望看到一些真实的 Rust 示例作为提案的一部分,这样人们可以把它作为真正的代码片段来做一些有意义的事情。
谷歌:大力支持
而前阵子刚宣布 Android 支持 Rust 语言来开发操作系统的谷歌对 Linux 内核引入 Rust 代码也表示大力支持(之前谷歌还加入了 Miguel Ojeda 成立的 Rust for Linux 组织),谷歌 Android 团队工程师 Wedson Almeida Filho 在官方安全博客上发表了一篇有关此事的文章。
博文中指出,虽然近半个世纪以来,C 语言一直是编写内核的首选语言,但在高质量代码、高标准审查以及完善的防护措施下,内存安全漏洞仍然经常发生。而对 Android 来说,内核漏洞通常被认为是高危漏洞。
因此,谷歌表示:"我们认为,Rust 现在已经准备好与 C 语言共同成为开发内核的实用语言。它可以帮助我们减少特权代码中潜在的 Bug 和安全漏洞,同时很好地处理核心内核并保持其性能特征。"
此外,文中还详细介绍了一些 Rust 如何帮助内核开发者编写安全正确的驱动程序的示例,并且将其与现有的 C 语言版本在安全和性能方面进行对比。谷歌几乎将 Binder 所需的所有通用内核功能都进行了 Rust 支持,因此正在收集更为广泛的 Linux 内核社区反馈,争取将现有的 Rust 支持上游化。
最后,Filho 对 Linux 内核加入第二个编程语言表示期待:“这是一个激动人心的时刻,也是一个难得的机会,这可能会影响 Linux 内核的开发方式,同时也预示着 Rust 语言的发展趋势。”
网友:Linus 实际是支持 Rust 进入内核的
对于谷歌的正面支持与 Linus 的较为中立的态度,网友也进行了热议。
网友@bug77表示:
“虽然 Linus 对 Rust 还有些顾虑,但他实际上是支持在 Linux 内核中加入 Rust 的,因为在现阶段有担忧很正常。
此外,目前的讨论并不是要把 Rust 包含在内核本身,而是包含在内核驱动程序中。有问题的话可以随时方式,损害很小。
C 在未来 10 年到 20 年内都不会消失,但看看 Rust,很明显它已经从一种狂热者喜爱的语言发展成为大型公司开始评估的一种语言。”
网友@ssokolow:
“就隐式触发的复杂行为而言,Rust 更像是C 和 C++ 之间的中间地带。”
目前看来,Linux 5.13 发布在即,并且结合 Linus 起初对 Rust 的谨慎态度,在这个版本中引入 Rust 相关特性的可能性不大。不过不排除未来发展顺利的话,或许我们能在 Linux 5.14 中看到对 Rust 的支持。
可以关注下我的其他文章及其视频→视频、文章、资料