查看原文
其他

用 Rust 写 Linux 驱动?Linus:感兴趣,但保持观望

Linux爱好者 2022-07-01

推荐关注↓

主要由 C 语言编写内核的开源操作系统 Linux 一直广受开发者喜爱,然而由于 Linux 内核漏洞不断,其中多数情况下皆由内存安全引起,所以自 2019 年就有“用 Rust 开发 Linux 驱动”的声音响起,因为 Rust 拥有更为安全的 API。

彼时不少开发者对这个想法表示质疑,但如今看来,情况似乎并没有那么糟糕,起码,Linux 之父 Linus Torvalds 并没有将其一棒子打死,甚至表示他属于“观望”阵营:“我对这个项目很感兴趣,但我认为它是由那些对 Rust 非常感兴趣的人推动的,我想看看它最终会如何在实践中发挥作用。


在 Linux 中逐渐“崛起”的 Rust

从“质疑”到“观望”,Rust 在 Linux 中走了一段路。

2019 年首次出现“用 Rust 开发 Linux 驱动”的主张时,Linux 内核维护者 Greg Kroah-Hartman 表示愿意接受用 Rust 开发 Linux 内核的驱动程序,但这有前提:

一、Rust 驱动不是默认启用而是以可选的方式存在;

二、Rust 驱动要有比 C 驱动更有优势。

当时也有许多开发者对此否定,因为用 Rust 实现驱动程序存在一些不可避免的难题:Linux 内核无法保证 API/ABI 的稳定性,通用 Rust 接口设计较为困难;Linux 内核采用的 C 语言特性并没有相应的 Rust 支持。

后来,在 2020 年 Linux Plumbers 会议前,Linux 内核开发者开始认真讨论在内核中使用 Rust 的想法。当时已经明确的是,并不会用 Rust 完全地重写内核,只是添加用 Rust 编写的新代码,使其与现有的内核基础结构完美接口。

这个话题也引来了 Linus 的关注。与 2019 年 Greg 的“前提一”不同,Linus 认为,为了确保能够进行广泛测试,Rust 驱动应该在默认情况下有效地启用支持,避免只有特定开发者使用而产生无人关注的问题

去年 10 月在欧洲开源峰会上,面对用 Rust 编写内核代码进展的提问,Greg 指出:“一年半前 Rust 开发人员就与 Linus Torvalds 进行了沟通,这件事情确实已经开始了。” 而当时 Linux 内核开发人员在努力实现 C 与 Rust 之间的交互及处理。此时已然可以窥见 Linux 内核维护者将把 Rust 写进内核代码的决心已定。

时至如今,在提到将 Rust 写进 Linux 内核的看法时,经常“暴躁”的 Linus 却表示出带了些许期待的“观望”。


Linus:感兴趣,但保持观望

正如上文提到,Linux 内核漏洞多来自内存安全性问题,占比约为三分之二,而这个数据从理论上讲,完全可以通过利用 Rust 的特质——比 C 语言更为安全的 API 来避免。

因此,虽然就个人而言,Linus 绝不会去推动 Rust 进内核,但考虑到 Rust 的优势及为了减少 Linux 的安全隐患,Linus 还是愿意接受 Rust 并对这个项目感兴趣,不过他表示:“但我也知道,有时候承诺是不会兑现的。”

Linus 认为,Rust 的首要目标应该是驱动程序,因为这部分能找到许多不同的可能目标,并且内核的这些各个部分相当小且独立。此外他还指出,“任何对驱动程序的初步试验都只是体系架构方面的问题”。因为很多驱动程序仅与几个目标架构有关,所以就算在某些架构上不支持 Rust 代码问题也不是太大。

另外,Linus 也知道有些开发者根本不喜欢用户空间中加入 Rust 的行为,他们可能会觉得用户空间中的“Rustification”对内核维护而言并非好事。对此,Linus 解释道:“内核与用户空间项目不同。可能 Rust 对内核而言会使某些方面更加困难(我们使用很多非常奇怪的头文件,这些头文件突破了 C 的界限),但是在许多其他方面却更容易(因为内核是相当独立的,因此最后的二进制文件不依赖于其他项目)。”


Rust 是最佳系统编程语言?

作为起初仅是 Mozilla 的一个研究项目,用于快速并安全重写 Firefox 浏览器的 Rust,现在已发展为优秀的系统编程语言,不仅 Linux 内核看上了它,微软都曾有意选择 Rust 作为 C 和 C++ 的安全替代方案,并且认为 Rust 语言是目前是业界采用的最佳选择。

因此,虽然 Linux 计划用 Rust 编写内核代码一事早已不是新鲜事,但这个话题却一直是众多人关注的焦点,也引起了热议:

评论1:

Rust 并非完全是托管内存语言。它可以在没有显式运行时的情况下运行,从而使其适合在 OS 内核中使用。


评论2:

我已经关注 Rust 一段时间了,并对此保持谨慎乐观的态度。没有垃圾回收,因此除了具有内存安全性外,它实际上没有其他功能可与 Go 媲美,但又因为具有内存安全性,因此它与 C 和 C++ 具有更高的可比性。

评论3:

我对 Linux 内核中的 Rust 感到非常兴奋,但这并不是因为 Linux。我希望这会是嵌入式软件开发的分水岭,因为嵌入式软件开发几乎完全依赖于 C 和 C ++,如果切换到 Rust 这样的语言将会受益匪浅。

那么对此你有什么看法吗?欢迎评论区留言!

参考链接:
https://www.zdnet.com/article/linus-torvalds-on-where-rust-will-fit-into-linux/

https://arstechnica.com/gadgets/2021/03/linus-torvalds-weighs-in-on-rust-language-in-the-linux-kernel/?comments=1


转自:CSDN


- EOF -

推荐阅读  点击标题可跳转

1、Linux 三剑客之 awk 实战详解教程

2、Linux 三剑客之 grep 实战详解教程

3、上古神器 sed 教程详解,小白也能看得懂


看完本文有收获?请分享给更多人

推荐关注「Linux 爱好者」,提升Linux技能

点赞和在看就是最大的支持❤️

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存