Rust 在 Linux 内核的最新进展

来源: OSCHINA
编辑: 局长
2021-09-14

虽然本周末结束的 Linux 5.15 合并窗口并未支持 Rust 编程语言在内核中的使用,但这项工作仍在进行中。

Linux 内核维护者 Miguel Ojeda 近日在 Linaro Connect 虚拟会议上介绍了 Rust for Linux 的工作进展。Miguel Ojeda 受雇于谷歌,专门负责 Rust for Linux 的开发工作,也是主要开发者之一。

据介绍,现在已经有 RFC 补丁用于添加 Rust 基础设施支持和至少一个基本的虚拟驱动程序,但到目前为止,这项工作还没有真正落地。

Miguel 先是介绍了 Rust 的相关背景和特性,以及它为 Linux 内核提供的好处。后面才进入了主题 —— Rust 在内核中的支持情况。

他还提到了三个编译器后端的进展情况,rustc_codegen_gcc 进展最快,目前已通过了部分的 rustc 测试,rustc_codegen_llvm 是目前的主要开发项目,Rust GCC 预计在 1~2 年内完成。

更多内容查看 PPT

展开阅读全文
7 收藏
分享
加载中
精彩评论
rust不是c的替代方案,除了内存管理那个地方有点自己的想法,并没有降低什么工作量,反而增加了学习其特有内存管理模式的成本,不如go在多线程开发便捷性方面的一目了然更实在一点。rust作为高级语言应用在业务实现上没有效率优势,用作底层开发又有点扭捏作态,显得过于复杂。
2021-09-15 22:36
8
举报
评论中使用rust做过什么项目的出来发个言,我并不认为rust除了可以借鉴的内存管理思路之外还有什么值得留恋的地方。
2021-09-14 11:59
5
举报
rust目前还有个问题就是构建出的二进制文件的容量实在太夸张了,即使使用strip也觉得太大,如果能编译的像go那样轻量一些就更好了,希望继续发力
2021-09-14 10:20
5
举报
当你借鉴了rust的内存管理模式后,那就是另一个rust诞生了,与其发明另一个rust不如直接使用rust
2021-09-14 16:55
4
举报
哦,如果是出于这个原因更没必要了,内核本来就不需要彩笔参与。
2021-09-15 02:38
3
举报
最新评论 (67)
linux内核是C语言写的,不要把C++带进来,不然linus是会生气的.
rust进来也是好事情,乐见其成.
2021-09-18 08:29
0
回复
举报
rust不是c的替代方案,除了内存管理那个地方有点自己的想法,并没有降低什么工作量,反而增加了学习其特有内存管理模式的成本,不如go在多线程开发便捷性方面的一目了然更实在一点。rust作为高级语言应用在业务实现上没有效率优势,用作底层开发又有点扭捏作态,显得过于复杂。
2021-09-15 22:36
8
回复
举报
我的实际感觉和icquu一样,rust的内存管理在编码过程中,满脑子也基本全是c的内存管理思路。编译过程中的报错分析,也基本都是拿着c的内存管理思路去思考。
实际感觉,更像是把内存管理变得十分严格,帮助开发者在编译阶段发现问题
2021-09-18 16:47
1
回复
举报
在实际的开发过程中,成本非常高,但是还是会安慰自己这是为了以后,哈哈哈
2021-09-18 16:48
1
回复
举报
感觉这才是Rust的方向,写业务和C++比优势真不大。
2021-09-14 21:40
1
回复
举报
我倒是感兴趣GCC什么时候支持Rust
2021-09-14 21:32
1
回复
举报
这个工作意义不大,只能让 内核 臃肿
2021-09-14 15:47
1
回复
举报
意义很大,c/c++ 的语法太复杂,总有人用错,一不小心就崩溃。
对于内核,稳定性第一、性能第二。
2021-09-14 21:42
0
回复
举报
哦,如果是出于这个原因更没必要了,内核本来就不需要彩笔参与。
2021-09-15 02:38
3
回复
举报
问题是没有那么多年轻的C语言好手了,要考虑这一批维护者退休之后的事啊。
2021-09-15 09:30
1
回复
举报
c/c++ 的语法很诡异,高手也难免出错。
且内核维护人员,本就没门槛、没面试、没笔试。
换用一个出错概率小的 Rust, 还是有必要的。

其它编程语言,比如 Java/C# 把内存回收的动作滞后,不适合于内核开发; VB 随有变量出作用范围即刻内存回收的有时,但运行效率偏低、且相互引用情况下有内存不回收的 bug; 其它编程语言的运行效率更低。
难得 Rust 这时候冒出来,有内存即刻自动回收、且运行效率高,就指望它了。类库、函数库目前偏少,可以慢慢补充。
2021-09-15 17:36
0
回复
举报
Linus都觉得有意义了,Rust的宗旨是解决C语言短板和团队协作问题
2021-09-16 09:29
0
回复
举报
内核相关开发,不会因为换了一门语言而变得简单,引入更多的复杂性,只会加重心智负担
2021-09-14 13:02
3
回复
举报
评论中使用rust做过什么项目的出来发个言,我并不认为rust除了可以借鉴的内存管理思路之外还有什么值得留恋的地方。
2021-09-14 11:59
5
回复
举报
当你借鉴了rust的内存管理模式后,那就是另一个rust诞生了,与其发明另一个rust不如直接使用rust
2021-09-14 16:55
4
回复
举报
现阶段除了区块链,没有不可替代的场景。
2021-09-14 23:21
0
回复
举报
区块链用java c#写也一样,但是不太酷。。。
2021-09-19 14:17
0
回复
举报
直接用Rust写个Linux内核得了。何苦,维护过时的架构。
2021-09-14 11:21
1
回复
举报
你来重写吗?
2021-09-14 11:54
0
回复
举报
过时?过时在何处?你是内核开发这个行业的?
2021-09-14 13:00
2
回复
举报
先不说内核使用rust是否优于c,但是工作量就是问题。这是hello world?说重写就重写。
2021-09-14 13:04
0
回复
举报
先不说内核使用rust是否优于c,但是维护量就是问题。这是hello world?该重写就会重写的。
2021-09-15 10:42
0
回复
举报
就是那古老的变量命名,就该淘汰了。一帮子吃现成的,一边享受成果,一边搞宗教。
2021-09-15 10:46
0
回复
举报
你来写?啥时候是改?你问过维护内核的是否全部想换rust换成rust谁维护?现在写rust的人有多少有能力做内核,有几个愿意维护?有没有考虑过可能性?

这么容易实现你看到的文章应该是rust重写内核的进展
2021-09-15 12:40
0
回复
举报
你到说了个重点,维护内核的不一定想换rust,写rust的也不一定想维护内核。所以,何苦来哉。本来rust就不是为旧世界服务的。
2021-09-16 13:52
0
回复
举报
回复 @dwcz : 那自然还有一部分人是维护内核又想用rust的,光靠这部分人重写又不太可能。个人对混合开发没啥好感, 除非能带来质的改变。
2021-09-16 17:21
0
回复
举报
回复 @轻语天涯的风 : 混合开发还行啊。就是现有编程体系不适应。
2021-09-17 12:14
0
回复
举报
回复 @dwcz : c,c++这种同一个工具链可以解决的还行,或者python某些包依赖c这样依赖一个基础的也接受。 c,c++里混入rust就算了。没带来太多好处,反而弄的很乱
2021-09-17 12:48
0
回复
举报
回复 @轻语天涯的风 : 确实很乱。所以,不应该在老体系上打补丁来适应新东西。新东西还得新体系。Linux老的和C++一样的,历史印记太多了。何苦,续命。
2021-09-18 11:15
0
回复
举报
https://www.jianshu.com/p/b23ca75258bf

https://zhuanlan.zhihu.com/p/137733625?from_voters_page=true
2021-09-14 13:47
1
回复
举报
现有linux并不过时啊?引用rust只是看中了他的内存安全,毕竟内存安全很重要,只能说是锦上添花,现在的linux是C语言写的
2021-09-14 16:57
1
回复
举报
Linux 内核是很多人、很多时间、很多辛苦、很多钱堆出来的,你一个简单"过时"就打发了?
如果等你去弄一个不"过时"的内核,恐怕等待世界毁灭也等不到。
2021-09-14 21:40
1
回复
举报
怪了。就说个过时,一帮子跳出来。搞得Linux内核是他die写的。
2021-09-15 11:04
0
回复
举报
因为不少人从事这个行业,不会和你一样犯傻ac
2021-09-15 11:33
1
回复
举报
就是不少吃现成的喽。害怕改了饭碗没饭吃了。
2021-09-16 13:53
0
回复
举报
是的,就是吃现成的,大家早就把里面各个模块研究得透透的,要是用rust实现,也相对轻松,怎么可能没饭吃?会rust不代表会写系统,系统能跑起来,并不代表跑的好。跑的好不代表大家都愿意重学一遍新的。底层技术不是你换一门语言就能逃避的了的。多研究研究点深层技术,而不是纠结在语言上。
2021-09-16 15:17
0
回复
举报
按你说的,就别用C了,用汇编得了。用语言不就是图个方便快捷,能更好实现想法。再深层技术,还不是依赖硬件实现。搞硬件把搞软件的养懒了,躺个架构上,就不动了,研究个所谓的深层技术,最后还是依赖硬件来提速。
2021-09-17 12:13
0
回复
举报
回复 @dwcz : 你的话显得很外行。硬件加速是一方面,软件上能最大化使用硬件性能,组织起整个软件架构来让复杂硬件系统工作,这就是linux的存在意义。我一直坚持的观点是Linux架构是比较新的,紧跟硬件发展的。你的想法是觉得他已经老了,因为没用rust这些。实际上语言只是驱动工程师系统工程师让硬件工作的方式,C也好,rust也好。用rust开发,并不意味着软件架构就是最合理的。
2021-09-17 12:51
1
回复
举报
回复 @Artrener : 你也知道是“组织起整个软件架构”。既然,有更新更好的组织方式,为何不用,非要在老的上打补丁,维护老的江湖地位?
2021-09-18 11:20
0
回复
举报
回复 @dwcz : 我不赞同的是你说linux是过时的这个说法。至于rust?它需要证明它自己。你说再多,也没啥用。另外,你安利别人rust,先得自己有大量使用,这样言之有物,别人才能认可。
2021-09-18 12:26
1
回复
举报
讨论就讨论,骂人就不对了。。。
2021-09-18 14:37
0
回复
举报
因为你的思维太过二极管
2021-09-19 12:47
0
回复
举报
那你就电感线圈--只会感应别人,不然就是没用一段fei线。
2021-09-22 11:29
0
回复
举报
rust目前还有个问题就是构建出的二进制文件的容量实在太夸张了,即使使用strip也觉得太大,如果能编译的像go那样轻量一些就更好了,希望继续发力
2021-09-14 10:20
5
回复
举报
比 go 还大?
2021-09-14 10:55
0
回复
举报
刚试了下 最简单的hello world
os是ubuntu 20.04
rust 使用cargo build --release 是3.3M
go 使用 go build main.go 是1.2M
2021-09-14 11:29
3
回复
举报
Rust更小
2021-09-14 14:22
2
回复
举报
请用数据说话
2021-09-15 08:45
0
回复
举报
rust strip 后 288K
2021-09-17 11:53
0
回复
举报
回复 @osc_07180214 : go upx -9后310K 好吧 rust赢了
2021-09-17 13:46
0
回复
举报
是不是静态编译,可以试试再做下 UPX 去壳。
2021-09-15 12:45
0
回复
举报
去除调试信息,编译成release版本就很小了
2021-09-14 17:00
2
回复
举报
我测试的就是--release参数构建hello world工程,而且还手工运行strip删除无用的链接(目前cargo并未添加strip构建的选项,一直在unstable),即使这样构建出来的容量依旧比go大一倍左右,如果再引入其他依赖,这个容量还会更大。关于构建容量的优化官方一直没有做重点,github issue还在那里挂了很久
2021-09-14 18:57
1
回复
举报
go语言不分debug版和release版,因为他的debug是web调试模式,rust是本地调试的,debug模式有很多调试信息,而release版也有很多附加信息方便追踪,如果你真的不需要可以去除,无需使用unstable版本和strip,就是普通stable版本就可以,我不知道你用的是什么IDE什么系统,我用windows10+Clion+Rust插件,rust是gcc版本,配置这里run --release --package xxx --bin xxx,Backtrace选No,最关键的Environment variables填入RUSTFLAGS=-C link-arg=-s,实测生成hello world 900KB,对比go语言的helloworld 1.9MB。Rust的文件更小,以后等官方把这个体积优化做成自动的就没事了,现在可以先这样使用,当然这点文件大小似乎不用太纠结。
2021-09-14 23:40
2
回复
举报
rust不熟悉 说一下go吧 并非你说的什么web调试模式
os:Ubuntu 20.04.3 LTS
go version go1.17 linux/amd64

```go
package main

func main() {
  println("hello")
}
```
go build -ldflags "-w -s" main.go 去掉调试信息 二进制文件752K
go build main.go 带调试信息是1.2M
2021-09-15 08:48
0
回复
举报
go语言在调试的时候会启动一个server,通过网络来调试类似nodejs,可能我说web调试模式有点不太准确,我不知道你平时调试有没有看到这个:API server listening at: [::]:55883
2021-09-15 13:33
1
回复
举报
而且我刚刚实机测试了,在windows10上go1.16版本,helloworld,带调试信息是1.99MB,用你说的去掉调试信息后1.42MB
2021-09-15 14:27
1
回复
举报
我又升级了go的版本从1.16.7到1.17.1(windows10/amd64),再次测试
带调试信息1.83MB
去掉调试信息1.27MB
Rust使用的是1.54/GNU/amd64版本
带调试信息4.00MB
去掉调试信息977KB
2021-09-15 14:42
1
回复
举报
回复 @Francesca : 如果rust开启lto和编译优化的话opt-level = 'z'/lto = true,release版本为214KB
2021-09-15 14:48
2
回复
举报
可怜的娃,连个容量大点的硬盘都舍不得买
2021-09-17 11:58
2
回复
举报
Linux内核支持Rust开发之后,大伙们维护的积极性应该会增强吧,毕竟可以用到高级语言特性了。
2021-09-14 10:03
3
回复
举报
啊,我一直以为只有汇编才是低级语言
2021-09-14 12:55
2
回复
举报
相对C语言更高级点了,抽象能力更高了,C语言也是高级语言,但硬要在这些高级语言中再分高低的话。。
2021-09-14 16:59
1
回复
举报
更多评论
67 评论
7 收藏
分享
返回顶部
顶部