微软正在使用 Rust 编程语言重写其核心 Windows 库。 5 月 11 日——Azure 首席技术官 Mark Russinovich 表示,最新的 Windows 11 Insider Preview 版本是第一个包含内存安全编程语言 Rust 的版本。
“如果你参加了 Win11 Insider 环,你将在 Windows 内核中首次体验 Rust,”Russinovich 昨晚发推文说。
无论如何,这一次来得很快:微软直到 4 月中旬在以色列举行的 BlueHat IL 2023 安全会议上才公开了用 Rust 代码替换部分 Windows 内核的计划。
当时,Windows 操作系统安全总监 David “dwizzle” Weston 在一次演讲中宣布 Rust 将正式进入 Windows 内核。
“在接下来的几周或几个月里,人们将开始在内核中使用 Rust 来启动 Windows。这项工作的基本目标是将系统的一些 C++ 数据类型转换为 Rust 形式。”
微软的重点是“消除错误类”,并希望采取更积极的方法来确保更安全的代码。他们希望通过内存安全语言、CPU 架构变化以及更安全的语言子集来实现这一目标。
David Weston 这次演讲的重点是内存安全语言。在Windows内核中,主要语言是C。由于MFC和COM的存在,内核之外的大部分代码都是C++,甚至MSVC libc实际上也是用C++编写的,带有extern“C”声明。然而,从 Windows Vista 开始,内核开始允许 C++ 代码(VC++ 获得了 /kernel 标志)。
目前微软已经重写了两个主要项目,DWriteCore和Win32 GDI,其中包含一些非常旧的代码。Win32 GDI 编写于 80 年代末和 90 年代初,专为 286/386 设计。
微软首先将 Rust 引入 DWriteCore,它是 Windows DWrite 引擎的 Windows App SDK 实现的一部分,用于文本分析、布局和渲染。
这项工作于 2020 年开始,DWriteCore 目前包含约 152,000 行 Rust 代码和 96,000 行 C++ 代码。
DWriteCore私有API使用类似COM的接口,公共API都是COM,其中C++和Rust可以轻松集成。
据介绍,两名开发人员总共花了六个月的时间才完成这项工作,包括编写代码和做相应的测试。所有这些改进现在都向软件开发人员开放。
David Weston 表示,这是一个非常值得的项目,因为该领域以其安全漏洞而闻名,而重写带来的性能提升是惊人的!除了预期的安全性改进之外,据说使用 OTLS(OpenType 库服务)可以将 Shaping(替换)字形的性能提高 5% 到 15%。
此外,微软的Windows图形设备接口(Win32 GDI)也正在移植到Rust,现在有36,000行Rust代码。weston 强调,Rust 不仅比 C++ 更容易编写,而且更容易理解。最新版本的 Windows 11 从这个版本的 Rust 开始,但尽管它已经通过了所有 GDI 测试,Rust 界面仍然被一个功能标志禁用。
Weston 说:“今天的 Windows 内核中实际上有一个 SysCall,它是用 Rust 实现的。”
但微软对 Rust 的支持并不是理所当然的,Weston 解释道,“恐怕我们不会很快用 Rust 完全重写 Windows,虽然我们都喜欢 Rust,但我们仍然需要有一个健全的策略放在第一位,包括保护我们更多的本机代码。”
但重要的是要承认,微软的认可、支持和代码贡献正在使 Rust 变得更强大,这对于整个开源社区来说是一件好事。
微软几年前开始对 Rust 表现出兴趣,认为这是在产品正式发布之前捕获和消除内存安全漏洞的好方法。自2006年以来,Windows开发团队修复了大量CVE列出的安全漏洞,其中约70%与内存安全相关。
Rust 工具链致力于防止开发人员构建和发布存在安全缺陷的代码,从而降低恶意黑客攻击软件弱点的可能性。简而言之,Rust 对内存安全和相关保护的关注有效地减少了代码中包含的严重错误的数量。
谷歌等行业巨头也公开拥抱 Rust 语言。
随着业界对内存安全编程的日益关注,微软也表现出了探索 Rust 的热情。去年 9 月,微软向 Microsoft Azure 首席技术官 Mark Russinovich 发出非正式授权,要求其在新软件项目中使用 Rust,而不是 C/C++。
现在 Rust 已经进入 Windows 内核,Weston 表示 Microsoft Windows 将继续推进这项工作,Rust 很快就会广泛使用。
Python Flask 项目的领导者、Sentry 的安全工程师、开源软件开发人员 Armin Ronacher 在一次电子邮件采访中指出,微软的青睐对于 Rust 语言非常重要。
“具体来说,我希望微软能够重用现有的编译器来带来更好的PDB(程序数据库)支持。当前的 Windows 在开发工具支持方面无法跟上其他基于 DWARF(使用属性记录格式进行调试)的平台。”
Pydantic 创始人兼 Python/Rust 开发者 Samuel Colvin 也表示:“微软的这种前瞻性思维给我留下了深刻的印象,但这是有道理的。我相信微软是受到工程师的压力才接受 Rust 的。此时,如果目标是构建一个强调性能或更注重底线的应用程序,那么 Rust 无疑是一个明智的选择。”
Colvin 还提到,虽然市场上可能没有很多优秀的 Rust 工程师,但他仍然认为找到优秀的 Rust 工程师比找到优秀的 C/C++ 工程师更容易。
“拥有丰富 Rust 开发经验的人并不多,但很多工程师愿意尝试和学习。毕竟,编写安全代码本身就不是一件容易的事,而在 Rust 中至少相对来说不那么困难。”
Colvin 总结道:“对于我们这些依赖 Rust 的开发人员来说,微软使用和支持 Rust 的决定确实令人兴奋。”