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

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

作者 | Tina

转自InfoQ

众所周知,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 年的一次演讲 (https://www.infoq.cn/article/mqz2zrqt9pyu0ojoavra)中有提到,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 中。主要原因,您认为是什么?

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

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

Datenlord | Rust实现RDMA异步编程(一):基于epoll实现RDMA 异步操作 作者:王璞 / 后期编辑: 张汉东RDMA是一套高性能网络协议栈,多用于高性能计算、高性能存储领域。RDMA的library是用C实现的,但是没有很好用的Rust的binding,不方便Rust开发者使用。于是我们正在封装一层符合Rust风格、便于Rust开发者使用的RDMA Rust binding。特别的,异步编程是近几年很受关注的编程方式,用Rust异步编程来实现IO操作,可以避免操作系统的进程上下文切换,提高性能,而且Rust的异步编程框架也在逐步成熟和完善。本系列文章探讨下如何用异步的方式实现RD 阅读详情

相关推荐

从零构建:一个Rust语言Linux驱动的诞生之旅

本文详细介绍了使用Rust语言从零构建Linux内核驱动的完整过程,涵盖开发环境配置、Rust与C接口互操作、NVMe驱动实战案例及性能安全对比分析。Rust通过内存安全保证和零成本抽象,为驱动开发带来更高的安全性和可靠性,是Linux内核开发的新兴选择。

h6i7j8的博客 772

编译rust for linux内核源码(5.16.0-rc3)

本文针对rust for linux内核源码进行编译,跟主线版本的linux编译稍有不同,因为引入了rust,编译rust需要安装相关工具,以下部分会详细介绍如何编译rust for linux。 ​

weixin_42915431的博客 4162

import-im6.q16: attempt to perform an operation not allowed by the security policy `PS‘ @ error/cons

这六个 policy 是使用 XML 格式描述的安全策略。要将其中的限制注释掉,在每个 policy 开始和结束的标记之间添加注释标记“

m0_60657960的博客 1874

探索 Rust for Linux:更安全、更快捷的内核编程新时代

探索 Rust for Linux:更安全、更快捷的内核编程新时代 去发现同类优质开源项目:https://gitcode.com/ 项目简介 是一个致力于将 Google 开发的系统级编程语言 Rust 引入 Linux 内核开发的项目。其目标是利用 Rust 的安全性特性,降低 Linux 内核的内存错误和漏洞风险,提高系统的稳定性和可靠性。 技术分析 Rust 以其强大的类型系统、所有权模型...

gitblog_00089的博客 880

30分钟上手Linux内核Rust开发:从环境搭建到模块编译实战指南

你还在为C语言内存安全问题头疼?还在担心内核模块开发的复杂性?本文将带你零基础入门Linux内核Rust模块开发,通过实战案例掌握从环境配置到模块加载的完整流程,让你用现代编程语言编写更安全、更可靠的内核代码。 读完本文你将学会: - 配置Linux内核Rust开发环境的3个关键步骤 - 编写第一个Rust内核模块的完整代码示例 - 使用Kbuild构建系统编译Rust模块的方法 - 模块加载与...

gitblog_00604的博客 1149

Rust语言正在吞噬Linux:系统编程新时代的机遇与挑战

Rust的编译器在Linux内核的土壤中生根发芽时,我们看到的不仅是一门语言的崛起,更是一场关于“如何建造可靠机器”的认知革命。这场革命揭示了一个深刻的悖论:人类越是试图通过工具确保绝对安全,就越需要让渡部分创造自由;系统越是追求数学意义上的确定性,就越要面对工程现实的混沌。这种矛盾在Torvalds那句著名的“Talk is cheap. Show me the code”中达到顶峰——当Rust用类型系统取代程序员的直觉,用编译器取代代码审查时,Linux社区奉行的极客精神正经历着前所未有的重构。

小筱在线博客 1884

Rust 重写 Linux 内核模块实战:迈向安全内核的新篇章

操作系统内核的安全性、稳定性至关重要。传统 Linux 内核模块开发长期依赖于 C 语言,受限于 C 语言本身的内存安全和并发安全问题,开发复杂模块极易引入难以追踪的漏洞。Rust 语言凭借其强大的所有权系统、生命周期管理和无畏并发特性,提供了从根源上消除特定类型内存错误和并发数据竞争的能力,为内核开发注入了新的可能性。本文深入探讨了使用 Rust 重写 Linux 内核模块的实战经验,阐述了其动机与优势,分析了关键技术与挑战,并详细介绍了一个典型内核模块的重写过程及性能考量。

水务人 1671

Rust X DatenLord l Rust China Conf 2023 倒计时!

达坦科技打造的新一代开源跨云存储平台DatenLord,通过软硬件深度融合的方式打通云云壁垒,实现无限制跨云存储、跨云联通,建立海量异地、异构数据的统一存储访问机制,为云上应用提供高性能安全存储支持。其中,原子操作是高性能编程里比较复杂的部分,本次演讲深入分析Rust的原子操作原理,并分享我们在Rust原子操作方面的实际经验,以便于Rust开发者更好地使用原子操作实现高性能编程。Rust语言作为一种强调性能、安全和并发性的新的编程语言,吸引了越来越多的程序员想要尝试学习和使用Rust

DatenLord的博客 557

Rust X Datenlord: 第二届中国Rust开发者大会回顾

达坦科技自成立以来积极探索软硬件深度融合,专注于打造新一代的开源跨云存储平台,以满足不同行业客户对数据跨云、跨数据中心高性能访问的需求。

DatenLord的博客 366

Linux 全新异步接口 io_uring 的 Rust 生态盘点

io_uring 无可置疑是近两年内核圈最火的话题之一,作为风头正劲的 Linux 异步 I/O 接口,其野心更大,不仅仅想将 Linux 的 I/O 操作全面异步化,还希望将所有Linux系统调用异步化。

DatenLord的博客 604

Open-RDMA 项目使用教程

Open-RDMA 项目使用教程 项目介绍 Open-RDMA 是一个高性能的开源网络实现项目,专注于远程直接内存访问(RDMA)服务的实现。该项目通过利用 Linux 操作系统中的服务启用层,提供了对 RDMA 技术的支持。Open-RDMA 项目包括多个组件,如 open-rdma-driver、roce-sim 和 async-rdma 等,这些组件共同构成了一个完整的 RDMA 解决方案。...

gitblog_00261的博客 799

【招人啦】达坦科技寻优秀实习生/23届校招生/社招大佬

【招人啦】达坦科技寻优秀实习生/23届校招生/社招大佬

DatenLord的博客 769

Rust-for-Linux 外树模块项目教程

Rust-for-Linux 外树模块项目教程 1. 项目的目录结构及介绍 rust-out-of-tree-module/ ├── .gitignore ├── Kbuild ├── LICENSE ├── Makefile ├── README.md └── rust_out_of_tree.rs .gitignore: 用于指定Git版本控制系统忽略的文件和目录。 Kbuild: 用于构...

gitblog_00166的博客 615

Rust for Linux:世界上最大的软件项目的内存安全问题有办法了!

Rust 成为Linux 内核第二官方语言,原是为了解决内存安全问题!

开源吞噬世界。 5963

Rust for Linux 源码导读 | Ref 引用计数容器 原创

引子 2022 年,我们很可能会看到 Linux 内核中的实验性 Rust 编程语言支持成为主流。2021.12.6 早上发出了更新的补丁,介绍了在内核中处理 Rust 的初始支持和基础设施。 这次更新的内容包括: 升级到了最新 Stable 编译器和 Rust 2021 edition 。因此可以摆脱了 const_fn_transmute,const_panic、const_unreachable_unchecked、core_panic 和try_reserve 这几个之前未稳定的特性。 自定义 co

CRMEB小程序商城的博客 1116

学习日记-linux内核和rust编程语言

2018年,Canonical公司(Ubuntu的开发公司)的工程师们发起了Rust for Linux项目,旨在探索将Rust语言引入Linux内核开发的可能性。Rust是一种系统级编程语言,旨在提供与C++相近的性能和低-level控制能力,同时通过所有权机制和编译时检查来消除空指针、数据竞争等常见编程错误,提高程序的安全性和可靠性。2021年,Linux 5.14内核版本合并了Rust语言的基础设施代码,标志着Rust正式成为Linux内核的官方支持语言。

地球空间 761

LinuxRust受阻?Android工程师发文:Rust改写C代码太简单了!

不久前,开源维护者Wedson Almeida Filho决定退出一直参与的Rust for Linux 项目构建,起因是社区中一些C 语言内核开发者“似乎决心让 Rust 维护者的工作变得非常艰难,因为他们不觉得 Rust 有价值,甚至希望它消失”,还有人觉得使用 Rust 来改写代码真的太难了。矛盾激化之下,不少人也将关注重点放到了难以下手的 Rust 身上。然而,没想到的是,另一家对...

CSDN资讯 1万+

Rust in Linux Kernel:第一手贡献者经验分享,避开90%新人踩过的坑

掌握Rust语言在Linux内核贡献中的实际应用,避开新手常见陷阱。分享真实开发经验,涵盖模块编写、内存安全优化与编译集成核心方法,提升代码合入效率。适用于驱动开发与内核新功能实现,值得收藏。

VarIsle的博客 820

11. Linux驱动 - Rust编写Linux驱动

Linux 中设备通常被分为三类,每个驱动模块通常实现为这三类中的其中一种: 字符设备。通常是指可以当作一个字节流来存取的设备(比如文件)。 块设备。通常是可以驻有文件系统的设备(比如磁盘),和字符设备类似,但块设备有一个请求缓冲区,因此它们可以选择响应请求的最佳顺序。 网络设备。通常是指能与其他主机交换数据的设备。 我们以编写一个简单的字符设备驱动为例,展示如何用 Rust 来编写内核驱动。 R4L 开发环境准备 为了方便,我们把 Rust for Linux 简称为 R4L。 首先,下载 Rust

笨笨D幸福 - 后花园 4526

LWN: Linux kernel 中的Rust

关注了就能看到更多这么棒的文章哦~The Rust for Linux projectBy Jonathan CorbetSeptember 16, 2021KangrejosDeepL ...

Linux News搬运工 834
上一篇: Datenlord |垃圾回收机制与无锁化编程(二)
下一篇: DatenLord|Understanding Functor in Rust
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

达坦科技DatenLord

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值