整理 | 郑丽媛

出品 | CSDN(ID:CSDNnews)

主要由 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

Rust 要“进驻” Linux 内核了?Linux 之父:保持观望相关推荐

  1. 【Linux 内核】Linux 内核源码目录说明 ① ( arch 目录 | block 目录 | certs 目录 | crypto 目录 | Documentation 目录 )

    文章目录 一.arch 目录 二.block 目录 三.certs 目录 四.crypto 目录 五.Documentation 目录 在上一篇博客 [Linux 内核]Linux 内核源码结构 ( ...

  2. 【Linux 内核】Linux 操作系统结构 ( Linux 内核在操作系统中的层级 | Linux 内核子系统及关系 | 进程调度 | 内存管理 | 虚拟文件系统 | 网络管理 | 进程间通信 )

    文章目录 一.Linux 内核在操作系统中的层级 二.Linux 内核子系统 三.Linux 内核子系统之间的关系 一.Linux 内核在操作系统中的层级 Linux 内核 所在层级 : 整个计算机系 ...

  3. 【Linux 内核】Linux 内核特性 ( 组织形式 | 进程调度 | 内核线程 | 多平台虚拟内存管理 | 虚拟文件系统 | 内核模块机制 | 定制系统调用 | 网络模块架构 )

    文章目录 一.Linux 内核特性 1.Linux 内核组织形式 2.Linux 进程调度 3.Linux 内核线程 4.Linux 内核多平台虚拟内存管理 5.Linux 虚拟文件系统 6.Linu ...

  4. Linux内核和Linux发行版(了解)

    Linux内核和Linux发行版(了解) Linux内核:Linux内核是一种开放源码的操作系统,由Linux Torvalds(Linux之父)负责维护,提供硬件抽象层.硬盘及文件系统控制及多任务功 ...

  5. linux内核和发行版本的关系,简述Linux内核和Linux发行版的区别

    做服务器运维工作,要经常和Linux的版本号打交道,但一直搞不明白Linux内核和Linux发行版到底是个啥东西.其实要理解Linux内核和Linux发行版之间的关系,只要能理解下面的关系就可以了: ...

  6. linux内核与Linux发行版本区别

    linux内核:Linux内核指的是一个由Linus Torvalds负责维护,提供硬件抽象层.硬盘及文件系统控制及多任务功能的系统核心程序. linux发行版本:Linux发行版就是由Linux内核 ...

  7. 国嵌linux内核编程,linux内核--那些年看国嵌视频学习

    1.linux系统构成 由用户空间和内核空间构成.其中用户空间由应用程序和C库:内核空间由系统调用接口.kernel.架构代码.硬件设备平台 为什么linux系统会被划分为用户空间和内核空间?处于安全 ...

  8. 深入理解Linux内核 学习Linux内核的一些建议及书记推荐

    深入理解Linux内核 学习Linux内核的一些建议_华清远见教育集团 经典书籍 待到山花烂漫时,还是那些经典在微笑. 有关内核的书籍可以用汗牛充栋来形容,不过只有一些经典的神作经住了考验.首先是5本 ...

  9. 一文看懂Linux内核!Linux内核架构和工作原理详解

    linux内核相关视频解析: 5个方面分析linux内核架构,让你对内核不再陌生 90分钟了解Linux内存架构,numa的优势,slab的实现,vmalloc的原理 手把手带你实现一个Linux内核 ...

  10. 深度:一文看懂Linux内核!Linux内核架构和工作原理详解

    简介 作用是将应用层序的请求传递给硬件,并充当底层驱动程序,对系统中的各种设备和组件进行寻址.目前支持模块的动态装卸(裁剪).Linux内核就是基于这个策略实现的.Linux进程1.采用层次结构,每个 ...

最新文章

  1. python模糊查找文件夹名字_python实现在目录中查找指定文件的方法
  2. 从“兔子狮子谁做老板”的故事,看企业管理
  3. 机器人搬运礼盒程序_礼盒厂公司2020范文
  4. 分布式入门之3:副本控制
  5. 搭建简易Linux局网服务器
  6. 编写自己的Arduino库
  7. LAMP 2.2 Apache配置静态缓存
  8. java中n次方怎么表示_java如何计算一个数的n次方
  9. Android Studio 导入 Android 系统模块并编译和调试
  10. 如何提高Java代码的可重用性?
  11. 微信也许会有重大变化
  12. XAF-BI.Dashboard模块概述 web/win
  13. 计算两个NSDate是否处于同一天
  14. 如何安装ArchLinux
  15. 在 React 中构建一个可拖动的滑块
  16. 计算机是怎么分类,计算机一般按什么分类
  17. ApacheCN 翻译/校对/笔记整理活动进度公告 2019.9.27
  18. C# 批量修改文件名称
  19. IT创业光技术好,谋略定位不好,你很可能会死得很惨,丢钱、丢客户、丢成果、丢商机、丢思路
  20. pdf密码忘了怎么解除

热门文章

  1. 【米课】思维导图与深度思考
  2. 【软件测试从入门到放弃】熟悉阶段:软件测试流程
  3. 题目——求一个二进制串中连续的1或连续的0出现的最大次数
  4. idea 全部报错找不到包
  5. JMeter组件之Test Fragment
  6. 放弃用你的InnerHTML来输出HTML吧,jQuery Tmpl不详细讲解
  7. 软件工程第一周预备作业
  8. 设计模式(一)—单例模式
  9. android权限列表
  10. HAProxy+apache实现web服务动静分离