取代 C++,3.6 万行 Rust 代码改写 Windows 内核,这门语言最早竟用来修电梯
- 量子位
2023-05-30 12:37
取代 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 年的某天,一位名叫格雷顿老哥(Graydon Hoare)住的那栋公寓,电梯又坏了。
第 n 次,他一边骂骂咧咧一边努力爬向自己位于 21 楼的家。他想不通,电梯系统咋就这么容易崩溃呢?不应该呀!
作为一名大厂码农,格雷顿老哥觉得,这事儿不是不能解决。
当时他 29 岁,正在开源网页浏览器 Mozilla 公司(火狐背后的公司)打工。作为业内人士,他深知大多数的电梯故障,都是编写程序的语言很容易意外引入内存错误,从而引发软件崩溃。
而当时电梯软件往往是用 C 或 C++ 语言编写。
它们的优点是紧凑、快速,但问题是非常容易引发内存错误,导致系统崩溃,甚至是安全问题。
所以一不做二不休,格雷顿老哥为了不再爬楼,干脆决定搞个新编程语言出来。
目标就是不容易内存错误的语言,最好更短、更快。
于是,Rust 语言诞生了。
而且 Rust 的取名,也很有意思。
Rust 和一种真菌同名,中文学名植物锈病,格雷顿评价其“为了生存而过度设计”。
这种真菌生物结构完全是分布式的,空间上无单点失败,也就是说单独去掉哪部分都不影响它的存活,鲁棒性贼强。
在全生命周期中,Rust 真菌共有 5 种生命形态,其中 3 种形态还能倒退回上一形态,几乎等同于蝴蝶还能变回毛毛虫重新生长。
而且,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 做了些低调且不着急上线的项目,然后就离职了。
直到 2016 年初,他接到了苹果团队的一个电话,表示正在找帮忙开发 Swift 的程序员,“是一个非领导职位,我更喜欢”。
靠着安全性成为大厂宠儿
但到这里,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 for Linux 是一个呼吁 Linux 和 Rust 结合的组织)
要知道,此前光是 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++ 写的组件中(如蓝牙、NFC 等),每一千行代码中就会有 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 在加密货币领域也很受欢迎)
不过,Rust 也存在缺点,比如学到后面会比较难,刚上手的开发速度也比 Go、Java 慢很多。
所以 Rust 好评度高,但是“卖座率”还比较一般,甚至会被打上“冷门语言”的标签。
尤其是国内对 Rust 招聘,简直可以用“少得可怜”来形容。
有网友抱着悲观态度:
为此,Rust 也在进一步优化自身。
根据其发布的 Rust 2024 路线中,官方团队将在降低学习门槛、壮大生态连接等方面加大努力。
所以,后面 Rust 会怎么走下去,也还是值得期待了~
参考链接:
[1]https://www.thurrott.com/windows/windows-11/282995/first-rust-code-shows-up-in-the-windows-11-kernel
[2]https://www.technologyreview.com/2023/02/14/1067869/rust-worlds-fastest-growing-programming-language
[3]https://www.reddit.com/r/rust/comments/7qels2/i_wonder_why_graydon_hoare_the_author_of_rust/
[4]https://arstechnica.com/information-technology/2023/05/two-core-unix-like-utilities-sudo-and-su-are-getting-rewrites-in-rust/
[5]https://security.googleblog.com/2022/12/memory-safe-languages-in-android-13.html?m=1
[6]https://aws.amazon.com/cn/blogs/opensource/sustainability-with-rust/
本文来自微信公众号:量子位 (ID:QbitAI),作者:明敏 衡宇
广告声明:文内含有的对外跳转链接(包括不限于超链接、二维码、口令等形式),用于传递更多信息,节省甄选时间,结果仅供参考,IT之家所有文章均包含本声明。