微软正在用 Rust 编程语言重写核心 windows 库。
在以色列特拉维夫举办的 BlueHat IL 2023 上,Windows 操作系统安全总监 David “dwizzle” Weston 宣布 Rust 进入操作系统内核。
“实际上,在接下来的几周或几个月内,你将在内核中使用 Rust 启动 Windows,这真的很酷,”他说。“这里的基本目标是将其中一些内部 C++ 数据类型转换为它们的 Rust 等价物。”
微软的这一举措并非一时兴起,早在几年前,微软就表现出了拥抱 Rust 的意向。
在微软看来,这门语言是一种在代码落入用户手中之前捕获和消除内存安全漏洞的方法。简单来说,Rust 专注于内存安全和类似的保护,这减少了结果代码中不良错误的数量。
Windows 的 Rust 改造始于 2020 年,由 DWriteCore 开始。DWriteCore 是 Windows 的 DWrite 引擎的 Windows App SDK 实现,用于文本分析、布局和渲染。DWriteCore 现在由大约 152000 行 Rust 代码和大约 96000 行 C++ 代码组成。
随着行业对内存安全编程的支持越来越多,微软对 Rust 的探索变得更加热情。
Microsoft Windows 图形设备接口 (Win32 GDI) 正在移植到 Rust 上,到目前为止已包含 36000 行 Rust 代码。最新版本的 Windows 11 使用 Rust 版本启动,该版本通过了所有 GDI 测试,但 Rust 端口目前在功能标志后面被禁用。另据 Weston 透露,Windows 内核中现在有一个 SysCall,是采用 Rust 实现的。
当然,微软对 Rust 的这种拥抱还是有限度的。正如 Weston 所说,“在 Rust 中重写 Windows 可能不会很快发生。虽然我们喜欢 Rust,但我们需要一种策略,包括保护更多的原生代码。”
尽管来自微软的支持是有限的,但其代码贡献也将使 Rust 更有活力,这对于整个开源社区的发展是积极向上的。
Python/ target=_blank class=infotextkey>Python Web 框架 Flask 的作者 Armin Ronacher 在一封电子邮件中表示,微软对 Rust 的承诺对这门语言来说非常棒。
“特别是,因为我希望微软重用现有的编译器,我希望这样做将带来更好的 PDB(程序数据库)支持,”他说。“今天在 Windows 上,开发人员工具支持落后于基于 DWARF 的‘使用属性记录格式进行调试’平台支持。”
Pydantic 的创始人 Samuel Colvin 则在接受外媒采访时表示:“微软的这种前瞻性思维给我留下了深刻的印象……如果你现在正在构建一个性能关键或低级别的应用程序,那么 Rust 在这一点上是不费吹灰之力的。”
同时,他认为,找到优秀的 Rust 工程师比找到优秀的 C/C++ 工程师更容易。虽然拥有丰富 Rust 经验的人较少,但有很多工程师有兴趣尝试学习这门语言。而且编写安全代码的难度很大,在 Rust 中要容易一个数量级。
“对于我们这些依赖 Rust 的人来说,微软正在使用它,并希望能够支持它,这真的很令人兴奋。”
近年来,Rust 舆论声量日益渐涨,在火了的同时发展也渐趋稳定。
在 Tiobe 发布的四月编程语言排行榜中,Rust 进入了前 20 名,尽管差不多是守门员的位置(位列 19),但也可以窥见其发展态势。
图源:TIOBE Index - TIOBE
或许可以归因于之前 linux 内核 6.1 版正式采用了 Rust,为使用 Rust 编写驱动程序扫清了一部分障碍。不过日前 Rust 基金会关于商标政策的迷之操作一度引发社区争议,“平稳发展中又暗流涌动”或许可以概括 Rust 的现状。
而且随着 Rust 逐渐冒头,C++ 与 Rust 之间也是硝烟弥漫。
去年微软 Azure 的首席技术官 Mark Russinovich 公开表示,开发人员应该避免在新项目中使用 C 或 C++,而是使用 Rust,因为它具有内存安全优势,甚至敦促业界宣布弃用这些语言。
随后 C++ 之父 Bjarne Stroustrup 在接受采访时隔空回怼:“新语言通常需要多年时间和重大努力才能在其广泛的应用领域与成熟语言相匹配。爱好者很少看到这一点,并且他们的评论往往是片面的。”
值得一提的是,C++ 在年初时被 Tiobe 评为 2022 年度最佳编程语言。当时 Tiobe 首席执行官 Paul Jensen 如此评价:“C++ 流行的原因是它作为一种高级面向对象语言的出色性能。因此,可以用 C++ 开发快速而庞大的软件系统(超过数百万行代码),而不大会出现‘维护噩梦’。”
虽然双方各执一词,但就现状来看,Rust 还无法撼动 C++ 的地位。相较 C++ 的历史沉淀,Rust 的流行明显还需时日。而且 Rust 陡峭的学习曲线也限制了其快速的规模化普及。曾有开发者感慨:“试图用 Rust 重写公司核心组件,学习曲线是真的陡,JAVA 用了一周上手,Rust 用了一个月才玩明白。”
除了新手不友好外,关于 Rust 在长时间内“叫好不叫座”的原因,近日,前 Deepin CTO 王勇也在推特上分享了自己的观点:Rust 语言很有力量,但他对这个语言并不感冒。原因如下:
1、世界上有很多业务性的逻辑是需要创造力和编程心流体验的,而 Rust 编译器总是打断你方向性的思考, 强制让你关注设计阶段不重要的细节,丧失了很多编程乐趣。
图源:推特
2、Rust 社区的人似乎不懂得市场经济和成本概念,一个好的软件不仅仅只是内存安全和绝对性能,代码可读性,场景适合性,认知深刻和持续维护的软件对用户才有价值,重写完一个软件,证明 Rust 比别的语言快和自己厉害,马上就弃坑的软件没有价值。
3、Rust 社区推崇内存的细腻控制,有时候就和 C++ 的开发人员一样讨厌,把指针或者生命周期控制能力当作比较的炫耀资本,Rust 更像是一种证明自己比别人厉害的工具。我不是说 Rust 不好,而是不喜欢这种认为 Rust 就是天下第一的思想,什么都要用 Rust 重写的想法。
4、Rust 的强制内存管理,在编写复杂逻辑的时候,编译器打断太生硬了,导致人无法安静的思考最重要的架构设计。Rust 对于底层库或者实时性这些不需要 GC 或者性能苛刻的场景很适合,为了内存安全可以忍受编译器严格。但是现实大部分场景不是都是内存安全优先的,而是创造力和逻辑清晰优先的。
最后王勇强调,无论学习何种语言,掌握多少种语言,都是为了学习各种语言的设计思想和看问题角度,主要价值在于提升认知。而不是为了在编程语言之争中踩在制高点抒发优越感。“ 语言只是工具,我们不能拿着锤子到处去攻击别人炫耀自己,那样其实很傻。”