写点什么

Rust for Linux 要来了,这对我们意味着什么

  • 2022-07-14
  • 本文字数:3410 字

    阅读完需:约 11 分钟

Rust for Linux要来了,这对我们意味着什么

众所周知,Linux 是 C 语言的代言人。但是,时代变了,Rust 正在兴起并赢得越来越多人的支持,它开始逐渐扮演 Linux 系统语言的角色。

 

在今年的 Linux 基金会开源峰会上,Linus Torvalds 提到他希望看到在 Linux Kernel 5.20 中融入 Rust。内核发布周期一般是 9 到 10 周,这意味着我们可能会在 8 月初看到 5.19。然后,如果一切顺利的话,我们将在 10 月下旬或 2022 年 11 月上旬在 5.20 中看到 Rust。而仅在去年,Linus Torvalds 才刚对 Rust 发表过评论,表示自己绝不会推动 Linux 中的 Rust 运动,“Rust 优势的背后肯定存在复杂性,所以我会采取观望的态度,看看这些优势是否真的奏效。”

 

那么为什么 Rust 会如此快进入到 Linux 内核之中?这对社区、对使用 Linux 和 Rust 的公司来说意味着什么?对解答这些疑问,我们采访了跨云存储厂商达坦科技(DatenLord)的联合创始人施继成。

 

采访嘉宾:

施继成,达坦科技(DatenLord)联合创始人兼 CTO,曾供职于 Google、Alibaba 等国际知名科技公司。擅长操作系统内核开发、分布式系统、嵌入式系统,对分布式数据一致性有深入的研究。发表多篇操作系统内核相关论文,累计数百次引用。

 

InfoQ:几年前,有一些声音表示“是时候用 Rust 重写操作系统了”。以您的观察来看,这能够实现吗?为什么?

 

施继成:如果我们将“用 Rust 重写操作系统”定义为从零开始搭建一个基于 Rust 语言的操作系统且希望其能够商业化是不太现实的。原因就在于商业化的操作系统是需要应用场景的,某一个应用场景在相当长的时间内都会主流流行一个或几个操作系统,不轻易改变,比如桌面操作系统中的 Windows 和 MacOS,手机操作系统中的 Android 和 iOS,以及服务器操作系统 Linux,BSD 和 Windows Server 等。我们可以发现这些主流的操作系统是陪伴着该领域的发展成长起来的,往往都有长达几十年的历史,一旦形成主导地位不易撼动。

 

用户不愿意更换操作系统的原因主要是“生态依赖”—— 许许多多基于这些操作系统开发的应用程序和开发框架。如果说从零开始写一个操作系统还有可能由一家商业公司完成,那么完整迁移操作系统上层生态则是一个需要全人类参与的浩瀚工程。因此我认为用 Rust 语言从头写一个全新的基于现有成熟场景的操作系统是不现实的。

 

那么 Rust for Linux (以下简称 R4L)是另外一条可行的方案,该方法之所以可行,主要原因就是不改变 Linux 操作系统的接口,完全兼容现有 Linux 上的所有应用程序。R4L 仅仅是替换掉 Linux 内部的某些内核模块,这些用 Rust 完成的内核模块可以与其他内核组件完美结合,通过慢慢“蚕食”的方法,使得 Linux 中越来越多的组件使用 Rust 语言实现,最终达到提高 Linux 安全性的目的。当然现阶段 R4L 还在初级阶段,后续还有许多不确定性,需要社区和大家共同完善。

 

InfoQ:编写安全的 C 代码是可能的,那为什么还会很多人认为将 Rust 添加到 Linux 内核很重要?另外,将 Rust 添加到内核中,对社区、对贵司来说分别意味着什么?

 

施继成:“编写安全的 C 代码是可能的”这句话本身没有错,使用任何语言都有可能写出安全的代码,但程序员们为什么还要选择一种安全的语言呢?因为程序员也是人,是人就会犯错,程序员在代码中犯下的错就是众所周知的 Bug。优秀的程序员会使用各种方法避免或减少自己犯错,选择一种安全的语言,例如 Rust,就是这些努力中的一种。Rust 语言提供了一些特性,保证了程序员不犯内存错误和线程并发访问错误,而这些错误在内核开发中往往占据了大多数。以 Windows 操作系统为例,在微软 2019 年的一次演讲 中有提到,Windows 的安全漏洞有 70% 是内存安全问题,我相信 Linux 中的现象应该类似。基于此,将 Rust 添加到 Linux 内核中对提高其安全性至关重要。

 

R4L 项目对于 Rust 语言社区而言是重大利好,因为任何主流的语言都需要一个或几个应用场景来发展壮大,Rust 已经被证明可以用以构建浏览器—— Firefox,R4L 项目则证明了 Rust 可以被用来构建操作系统。随着这些主流应用场景的不断拓展,Rust 会被越来越多人使用,相应的 Rust 语言的生态也会越来越好,最终降低 Rust 语言的使用难度,吸引更多人来使用 Rust,这是一个正向循环。

 

对于我司( 北京达坦科技 )而言,R4L 项目也帮助我们更容易构建安全的存储系统。由于我司主打软硬件结合的存储系统,所以和 Linux 内核打交道是不可避免的,也需要写系统内核模块来完成硬件适配工作,R4L 让我们的安全相关工作变得更加简单了,也提高了系统层的安全性。由于 R4L 还处在初级阶段,我们在使用过程中也会向 Linux 社区提交 Patch,帮助 R4L 系统不断完善。

 

InfoQ:Rust for Linux 发展至今已经实现了哪些功能,还有哪些功能有待完善?

 

施继成:Rust for Linux 项目主要分为两个部分,第一个部分是将 Kernel 中原来的 C 语言接口用 unsafe 的 Rust 代码分装出来,我们俗称 binding,这一部分工作大部分由代码自动生成,相对比较简单。另外一部分是如何将 unsafe 的 Rust 代码封装成为 safe 的 Rust 代码,即如果通过 Rust 语言的特性来保证 Linux 中方法的安全性,这一部分的工作则完成度较低。

 

由于 kernel 模块实在过于繁杂,这里只能列举其中的一些来说明情况,已经部分完成功能的模块包括内存分配管理模块和链表等基础数据结构模块等,而未完成的模块包括内核线程抽象和异步任务执行器等。

 

InfoQ:这个发展历史当中,存在哪些权衡?

 

施继成:据我所知,在 R4L 项目中现在的主要权衡点仍然在安全性上。因为 Linux C 语言模块的安全性大多由良好的编程规范和调用范式来达到,所以很多安全性的保证都是隐含在代码逻辑中的;例如,内存被正确释放需要内存调用者自己来保证,大家往往采用的范式是在所有可能退出的地方都加上内存释放代码,或者将退出出口控制在一个地方。内核很多安全点比上述例子要复杂许多,如何将这些隐含的逻辑封装在 Rust 代码中有非常大的挑战,在安全的同时提供和 C 语言一样的性能则对功能实现者提出了更大的挑战。不过我坚信随着时间的推移和贡献者的增多,这些问题最终都能够得到完美的解决。

 

InfoQ:Linus 对 Rust 有一些态度上的转变,比如从最开始的“观望”,到承认 Rust 将出现在 Linux 中。主要原因,您认为是什么?

 

施继成:我个人觉得有以下几个原因:

  1. Linus 早年间尝试用 C++ 写内核代码的体验不好,只尝试了两周时间,最终放弃使用 C++写内核。这一段经历会让 Linus 在接受新的语言上更加谨慎。

  2. R4L 的尝试在最开始让大家觉得风险很高,质疑声音也很多,不过随着这几年社区的不断努力,大家看到更多的希望,包括 Linus 在内的内核开发和维护者对 R4L 的信心也更充足。

 

InfoQ:您认为如果在 5.20 版本中出现 Rust,这其中还存在什么挑战?

 

施继成:当 R4L 进入主分支后,真正的故事才刚刚开始。就像之前我们介绍的一样,R4L 项目更多的是给内核开发搭建脚手架,真正的内核模块还需要一个一个替换和重写,例如文件系统和网络通信模块等等。这些模块有的历史悠久,代码结构的复杂性导致了任何语言级别的切换都不会是一个简单的任务。如何对这些大型模块进行平稳的迁移将会是整个社区面临的巨大挑战。

 

InfoQ:Rust 对开发者来说,难度还比较大,并且熟悉 Rust 的人目前还不多,如果下一个版本中出现了 Rust,对于维护者来说是否构成一些问题?

 

施继成:这个问题可以从两方面回答。首先,Rust 语言的使用者已经从 2020 年初的 60 万增长到 2022 年初的 220 万,语言使用者的增多意味着有更多人能够投入到内核开发和维护工作中,能为维护工作提供不少的帮助。另外一个方面,Linus 也从语言难度的角度讨论过 Rust,他认为比起 Rust 语言,系统内核的复杂度更大,因此 Rust 语言不应该成为内核开发中最困难的问题。同时 Linus 还以 Perl 语言举例,认为这是一门极难阅读的语言,不过这并不妨碍 Perl 语言在 Linux 项目中的使用。

 

InfoQ:说到 Rust 的现在和未来,您认为该语言现在处于什么位置?

 

施继成:Rust 语言已经连续 7 年蝉联 StackOverflow 网站(全球最大的编程问答网站)最受欢迎语言,Rust 语言的受欢迎程度是不言而喻的。现在随着 Rust 马上(Linus 原话是:“It's getting to the point where real soon now”)将成为 Linux 的官方第二语言,再一次验证了 Rust 语言的实用价值,必然会吸引更多的程序员来学习和尝试 Rust。我们看到了 Rust 非常好的增长势头,相信随着 Rust 社区的不断发展,其将会成为最主流的几门编程语言之一,就像现在的 C 和 C++ 一样。

2022-07-14 17:027961

评论

发布
暂无评论
发现更多内容

汇总十家互联网大厂面试题后,产出Java架构师1575道“完美圣经”

Java架构追梦

Java 阿里巴巴 架构 面试

如何设计财务对账系统 —— 从0到1搭建对账系统实战

蒋川

支付系统 对账系统 财务对账系统 财务审核系统

EasyRecovery的工具栏介绍

淋雨

视频剪辑 Camtasia 录屏软件

模拟定位原理

BUG侦探

定位

你一定要知道的敏捷规划工具—影响地图

华为云开发者联盟

敏捷开发 软件开发 开发 影响地图 规划工具

融云主办WICC2021 即将召开 “音视频+AI”是新技术亮点

融云 RongCloud

企业如何选择合适的敏捷项目管理工具?

万事ONES

团队协作 研发体系 研发管理工具 ONES

剖析供应链攻击的防范

华为云开发者联盟

网络安全 安全 加密 供应链攻击 勒索软件

十年经验帖 | 敏捷转型6大误区

LigaAI

敏捷开发 敏捷管理 敏捷转型

MindSpore模型精度调优实战:常用的定位精度调试调优思路

华为云开发者联盟

模型 mindspore 精度 模型精度调优 静态特征

如何像百度直播一样优化用户体验(起播篇)

百度Geek说

大前端 直播 起播优化

模块8作业

方堃

什么是敏捷开发?敏捷开发的流程有哪些?

万事ONES

敏捷 敏捷开发 Agile ONES

央行《人工智能算法金融应用评价规范》之AI安全攻击及防范解读

索信达控股

AI 金融科技 金融监管 安全性

Go 学习笔记之 Panic异常

架构精进之路

Go 语言 7月日更

BPool矿池app系统开发平台

获客I3O6O643Z97

区块链+ BPool

详解Camtasia的注释功能

淋雨

视频剪辑 Camtasia 录屏软件

如何设计实现H5营销页面搭建系统

前端森林

架构 大前端 可视化 营销 React

流动性质押挖矿系统开发DAPP

获客I3O6O643Z97

DAPP智能合约交易系统开发 DeFi流动性挖矿 质押挖矿

学编程要考证么?我考了 6 个!

程序员鱼皮

Java c++ Python 数据结构 算法

华为高级研究员谢凌曦:下一代AI将走向何方?盘古大模型探路之旅

华为云开发者联盟

深度学习 参数 预训练模型 盘古大模型

Redisson 分布式锁源码 10:读写锁

程序员小航

Java redis 源码 分布式锁 redisson

坚持正确的研发项目管理转型之路

万事ONES

项目管理 DevOps 敏捷开发 ONES

2021 EdgeX中国挑战赛拉开帷幕,赋能开发者,英特尔助力创新方案落地

E科讯

BTA挖矿软件平台系统开发

获客I3O6O643Z97

挖矿矿池系统开发案例 BTA 挖矿挣钱是什么原理

分布式事务实战--一个完整的xa例子

叶东富

MySQL 数据库 分布式事务 Go 语言

ONES 对话敏捷专家王明兰|系统化敏捷转型,企业应该这样做

万事ONES

研发管理 解决方案 ONES 敏捷转型

基于深度学习的短文本相似度学习与行业测评

OPPO小布助手

深度学习 AI 短文本

面试官:数据库自增 ID 用完了会咋样?

一个优秀的废人

Java MySQL 数据库

免费分享Spring Cloud开发的优秀图书

Java入门到架构

Java SpringCloud

Python 爬虫从入门到入坑全系列教程(详细教程 + 各种实战)

若尘

爬虫 python 爬虫

Rust for Linux要来了,这对我们意味着什么_开源_Tina_InfoQ精选文章