取代C++,3.6万行Rust代码改写Windows内核,这门语言最早竟

2023-05-31 10:09 来源:IT之家    作者:宋元明清   阅读量:5215   
分享到:

取代 C++,Rust 真的要重写万物了!

在得到 Linux、谷歌、亚马逊云等大厂青睐后,最近的爆炸消息 ——

微软已经用 3.6 万行 Rust 代码改写了 Windows 内核。

而且推进速度相当快,4 月剧透消息,过了两周,Windows 11 内部预览版已经用上了。

微软云 Azure CTO 在推特上激动喊话:

如果你加入了 Windows 11 Insider Preview 内测,你将首次体验到 Rust 支持的 Windows 内核!

重写的内核中,主要包括 DWriteCore 以及 Win32 GDI 两个项目,并通过了 Windows 开机所有测试。

其中,Win32 GDI 写于上世纪 80 年代末 90 年代初,是工龄 30 多年的老代码了。

如今之所以被 Rust 取代,微软给的理由简单粗暴:

Rust 语言有着极高的内存安全性,原来内核中大量的不安全的子例程也在改写后消失不见。同时,Rust 语言更简洁高效。

公开资料还表示,随着时间的推移,Windows 内核对 Rust 的采用将被大幅扩展。

不光是大厂喜爱,Rust 还连续多年成为 Stack Overflow 开发者调查中“最受欢迎的编程语言”。最近 Unix 系统的基础工具 sudo 和 su 也要用 Rust 重写了。

不过有点意外的是,Rust 最初被发明出来,竟然是为了修电梯???

怒爬 21 层楼后决定开发新语言

万事起源只在于 2006 年的某天,一位名叫格雷顿老哥住的那栋公寓,电梯又坏了。

第 n 次,他一边骂骂咧咧一边努力爬向自己位于 21 楼的家。他想不通,电梯系统咋就这么容易崩溃呢?不应该呀!

作为一名大厂码农,格雷顿老哥觉得,这事儿不是不能解决。

当时他 29 岁,正在开源网页浏览器 Mozilla 公司打工。作为业内人士,他深知大多数的电梯故障,都是编写程序的语言很容易意外引入内存错误,从而引发软件崩溃。

而当时电梯软件往往是用 C 或 C++ 语言编写。

它们的优点是紧凑、快速,但问题是非常容易引发内存错误,导致系统崩溃,甚至是安全问题。

所以一不做二不休,格雷顿老哥为了不再爬楼,干脆决定搞个新编程语言出来。

目标就是不容易内存错误的语言,最好更短、更快。

于是,Rust 语言诞生了。

而且 Rust 的取名,也很有意思。

Rust 和一种真菌同名,中文学名植物锈病,格雷顿评价其“为了生存而过度设计”。

这种真菌生物结构完全是分布式的,空间上无单点失败,也就是说单独去掉哪部分都不影响它的存活,鲁棒性贼强。

在全生命周期中,Rust 真菌共有 5 种生命形态,其中 3 种形态还能倒退回上一形态,几乎等同于蝴蝶还能变回毛毛虫重新生长。

而且,Rust 真菌可以多宿主寄生,恰能映射 Rust 语言对语言间互操作性的重视。

患有 Rust 的植物

在单枪匹马个人开发几年后,2009 年,Rust 得到 Mozilla 公司研究院的支助;2010 年项目对外公布。

研发过程中,Rust 已经建立了一个活跃度极高的社区,任何开发者都可以直接给这个项目提 bug,或者直接贡献源码。

2015 年 5 月,Rust 的 1.0 版正式发布。

仅仅一年光景,Rust 就吸纳了无数的拥趸。2016 年起,它连续 7 年被 Stack Overflow 开发者调查评为“最受欢迎的编程语言”。

连续荣登榜首所依仗的优点,一是运行速度快,二是内存利用率高,三是防止段错误。

简而言之,是在某些部分可以取代 C / C++ 的利器。

所以代码江湖流传着一种说法,把 Rust 比作跑酷,可以做高危险动作,但是不太容易伤害到自己。

相比之下,C++ 可以看作是在玩带火的电锯。

而凭借着开发 Rust,格雷顿老哥也一战成名。

之后几年内,他还参与了 Swift 的开发。

说来这也是一段有意思的故事。相比于当团队 leader,老哥似乎更喜欢做一线开发。

他曾在回应“为什么离开 Rust 团队”中表示,2013 年前后那段时间个人情感生活遭受重创,导致他没有太多精力负责 Rust 团队,后面他还在 Mozilla 总做了些低调且不着急上线的项目,然后就离职了。

靠着安全性成为大厂宠儿

但到这里,Rust 的传奇故事才说了一半。

凭借着“安全性高”的初衷,近几年它在大厂中的受欢迎度也越来越高。

不仅是 Windows,Linux、Android 这些主流系统也都先后拥抱 Rust。亚马逊云、微软、谷歌和 Rust 的关系也一直不错。

之所以会如此,主要原因或许还是 C / C++ 在内存安全方面,真的不太行。

比如微软几年前就对 Rust 很感兴趣了,他们将其认定为产品交付前消除内存安全漏洞的好办法。

2019 年,微软承认其产品被 CVE 披露的漏洞中,有 70% 是因为使用 C / C++ 后导致的内存安全漏洞。

而 Rust 工具链关注揪出代码中的潜在漏洞,这在理想情况下能减少代码被黑客攻击的可能。

另一边,Linux 内核也已引入 Rust。

去年,由 Linux 基金会主办的 2022 开源峰会上,Linus 老爷子突然官宣,也许下一个版本就要把 Rust 加入进来了!

这意味着官方将把 Rust for Linux 的 PR 合并到 Linux 内核的主线里。

要知道,此前光是 Rust 的支持补丁就已发布到第七版了。

当时现场听到这一消息,立刻掌声雷动,以至于 Linus 花了好一会儿才让大家平静下来。

几个月过后,Linux 6.1 版本发布,内核增加了 Rust 支持,成为了 C 语言之外的第二种官方语言。

谷歌这边的动作其实更早。

2021 年 Android 12 发布,即宣布支持 Rust。从这以后,他们就一直在 Android 开源项目中扩大 Rust 的使用。

不过谷歌的做法不是立刻让 Rust 来替代 C / C++,而是新代码用 Rust 来写。

从官方发布的数据里可以看到,C 和 C++ 还是占主导地位,Rust 的比例在逐步提升。

而截止去年年底,谷歌表示,Android 中用 Rust 写的部分,还没有发现任何安全漏洞。

这个结果非常重要,因为它意味着 Rust 能有效防止 Android 中最常见的漏洞 —— 也就是内存安全漏洞。谷歌 22 年的数据显示,内存安全漏洞在各类漏洞中的占比都非常高。

在许多 C / C++ 写的组件中,每一千行代码中就会有 1 个漏洞。按照这个比例来换算,Rust 很可能已经阻止了数百个漏洞。

以及基于它高并发的优点,在 Android 中使用 Rust,还能进一步平衡系统安全和延迟,一般来说一些安全措施会导致编程语言变慢。

比如使用新的 UWB 堆栈,可以节省几兆内存,并通过现有进程运行来避免一些 IPC 延迟。

亚马逊云对 Rust 也格外喜欢,因为它在节省能源上同样表现很 nice。

一项研究测试了 27 种编程语言,结果发现 C 和 Rust 在能源利用方面,比 Java 高效 50%,比 Python 高效 98%。

但 C 的问题已经说了很多遍了,内存安全漏洞多,所以综合这么一看,Rust 又赢了。

实际上,大厂们对 Rust 已经不只是青睐,甚至是宠爱了。

2020 年,Rust 背后公司 Mozilla 宣布大规模裁员,Rust 团队被裁掉,Rust 的命运陷入巨大的不确定中。

为了规避掉这种隐忧,亚马逊、微软、谷歌、华为等大厂,直接共同发起了一个 Rust 非盈利基金会。承诺两年内投入约 100 万美元预算,支持 Rust 项目维护。

而在业内,Rust 的事迹更是数不胜数。

最近,两个类 Unix 的核心实用程序 sudo 和 su 正在用 Rust 重写中;此前,GitHub 痛改自家搜索引擎基于 Rust;Discord 一个 Go 服务也用 Rust 重写了……

不过,Rust 也存在缺点,比如学到后面会比较难,刚上手的开发速度也比 Go、Java 慢很多。

所以 Rust 好评度高,但是“卖座率”还比较一般,甚至会被打上“冷门语言”的标签。

尤其是国内对 Rust 招聘,简直可以用“少得可怜”来形容。

有网友抱着悲观态度:

为此,Rust 也在进一步优化自身。

根据其发布的 Rust 2024 路线中,官方团队将在降低学习门槛、壮大生态连接等方面加大努力。

所以,后面 Rust 会怎么走下去,也还是值得期待了~

参考链接:

郑重声明:此文内容为本网站转载企业宣传资讯,目的在于传播更多信息,与本站立场无关。仅供读者参考,并请自行核实相关内容。