写点什么

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:027912

评论

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

干货|为什么说开源基金会的选择很关键?(下)

Orillusion

开源 WebGL 元宇宙 webgpu web3d

当你的老板站在你背后,看你处理故障......

嘉为蓝鲸

运维 IT 故障 上班

极狐GitLab Helm Chart 已上线,玩转云原生极狐GitLab!

极狐GitLab

DevOps gitlab 云原生 Helm Kubernetes, 云原生, eBPF

传统单节点网站的Serverless上云

Serverless Devs

AOSWAP去中心化交易所系统开发功能介绍

开发微hkkf5566

2022世界人工智能大会•腾讯“智变未来”论坛:聚焦产业升级,数字赋能未来

科技热闻

UI自动化助力业务效率提升

转转技术团队

UI自动化测试

高性能对象池实现

C++后台开发

后端开发 高性能服务器 内存池 对象池 C++开发

了解数字机器人最新发展动向,不要错过华为数字机器人秋季发布会​

王吉伟频道

RPA 机器人流程自动化 智慧政务 机器人开发 华为数字机器人

聆心智能入选OPPO“微笑提案”TOP10,让有温度的AI技术守护数亿人心理健康

硬科技星球

堡垒机有录像吗?好用吗?有什么作用?

行云管家

网络安全 企业 数据安全 堡垒机 录像

在数字时代,如何选择企业的知识管理软件

Baklib

设计模式的艺术 第二十一章备忘录设计模式练习(设计一款RPG网游,为了给玩家提供更多方便,在游戏过程中可以设置一个恢复点,用于保存当前的游戏场景。如果在后续游戏过程中玩家角色“不幸牺牲”,可以返回到先前保存的场景,从所设恢复点开始重新游戏)

代廉洁

设计模式的艺术

使用FeatureAbility模块启动其他Ability

白晓明

OpenHarmony应用开发 FeatureAbility

浅谈 SAP ABAP 系统里的 ALV 输出方式实现

汪子熙

前端开发 SAP abap 9月月更 ALV

2022 云原生编程挑战赛启动!看导师如何拆解边缘容器赛题?

阿里巴巴中间件

阿里云 云原生编程挑战赛

Apache Kyuubi 在小米大数据平台的应用实践

网易数帆

Java hive Apache Spark Thrift kerberos

盘点适合中小企业的文档管理工具

Baklib

优秀的产品手册有助于留住你的客户

Baklib

搭建自己的以图搜图系统 (一):10 行代码搞定以图搜图

Zilliz

Python 机器学习 深度学习 相似度分析 以图搜图

笔记 | DevOps推动科技管理敏捷转型(文末附PPT)

嘉为蓝鲸

DevOps 运维 敏捷 IT 精益

C#/VB.NET 设置Word文档段落缩进

在下毛毛雨

C# .net word文档 段落缩进

百余位顶级投资人齐聚无锡,DEMO CHINA创新中国峰会即将揭幕

创业邦

MASA Framework 获取配置信息的方法

MASA技术团队

.net MASA Framewrok MASA

万物皆可集成系列:低代码如何不成为数据孤岛

葡萄城技术团队

低代码 数据孤岛 集成

数据可视化系列教程|六大组件基础知识

云智慧AIOps社区

大前端 低代码 开源项目 数据可视化 可视化大屏

重拾面向对象软件设计

阿里巴巴中间件

阿里云 技术 中间件 技术代码

看了深入Java虚拟机:JVMG1GC的算法与实现文档,我悟了

程序知音

Java JVM 垃圾回收 java架构 后端技术

SpringCloud 注册中心(Nacos)快速入门

nacos SpringCould 9月月更

中移链DDC-SDK技术对接全流程(一)

BSN研习社

建木持续集成平台v2.5.4发布

Jianmu

DevOps 持续集成 gitops 持续部署 Gitea

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