【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

Azure CTO: Rust 已登陆 Windows 11 内核

  • 2023-04-28
    北京
  • 本文字数:2464 字

    阅读完需:约 8 分钟

Azure CTO: Rust 已登陆 Windows 11 内核

Rust 对 C 的颠覆已经开始。


5 月 11 日消息,根据 Azure 首席技术官 Mark Russinovich 的说法,最新的 Windows 11 Insider Preview 版本是第一个包含内存安全编程语言 Rust 的版本。


“对于 Win11 Insider ring 用户来说,你将会看到 Rust 代码首次出现在 Windows 内核中,”Russinovich 发推文说。



无论如何,这次的进展很快:微软只是在 4 月中旬的以色列 BlueHat IL 2023 安全会议上公开了其用 Rust 代码替换部分 Windows 内核的计划。

 

当时,Windows 操作系统安全总监 David “dwizzle” Weston 在演讲中宣布 Rust 将正式入驻 Windows 系统内核

 

David Weston 预测“在未来几周或者几个月内”,大家就可以在内核中使用Rust来启动 Windows,“这非常酷。这项工作的基本目标,就是将一部分系统内 C++数据类型转换成 Rust 的形式。”

 

Rust 已经进入 Windows 内核

 

微软的重点是“消灭漏洞类”(killing bug classes),想用一种更为积极的方法来保证更安全的代码。他们希望通过内存安全的语言、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 包含约 15.2 万行 Rust 代码和 9.6 万行 C++代码。

 

DWriteCore 私有 API 使用的是 COM-like interfaces,公共 API 则全是 COM,这些地方很容易将 C++和 Rust 进行集成。

 


据介绍,完成这项工作,两名开发人员总共花了半年时间,包括编写代码以及做相应的测试。目前这些改进均已面向软件开发者开放。

 


David Weston 表示,这是一个非常有价值的项目,因为这个领域以安全漏洞而著称,而且改写后,性能提升也很惊人!除了预期中的安全改进之外,使用 OTLS(OpenType 库服务)据说能将 Shaping(替换)字形的性能提高 5%至 15%。

 

另外,微软 Windows 图形设备接口(Win32 GDI)也在进行 Rust 移植,目前已拥有 3.6 万行 Rust 代码。Weston 强调说,对比 C++,Rust 不仅易于编写还易于理解。最新版本的 Windows 11 启动中使用的就是这个 Rust 版本,不过虽然已经通过了所有 GDI 测试,但 Rust 接口目前仍通过功能标志被禁用。

 

Weston 表示,“如今 Windows 内核中其实存在一个 SysCall,而它正是用 Rust 实现的。”

 

但微软对 Rust 的认可也并非无脑推广。Weston 解释道,“短时间内我们恐怕不会用 Rust 全面重写 Windows。虽然我们都很喜欢 Rust,但首先还是需要制定出完善的策略,包括保护更多原生代码。”

 

但必须承认,微软的认可、支持以及代码贡献正在令 Rust 变得愈发强大,这对整个开源社区也是件好事。

 

微软此举非常振奋人心

 

几年之前,微软就开始对 Rust 表现出兴趣,认为它是一种能在产品正式发布前捕捉并消除内存安全漏洞的好办法。自 2006 年以来,Windows 开发团队修复了大量由 CVE 列出的安全漏洞,其中约 70%跟内存安全有关。

 

Rust 工具链一直努力防止开发者构建和发布存在安全缺陷的代码,从而降低恶意黑客攻击软件弱点的可能性。简而言之,Rust 关注内存安全和相关保护,有效减少了代码中包含的严重 bug 数量。

 

谷歌等行业巨头也已经公开对 Rust 语言示好。

 

随着业界对于内存安全编程的愈发重视,微软也在 Rust 身上显露出积极的探索热情。去年 9 月,微软发布一项非正式授权,Microsoft Azure 首席技术官 Mark Russinovich 表示新的软件项目应该使用 Rust、而非 C/C++。

 

现在,Rust 已经进入了 Windows 内核,Weston 表示微软 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 的决定真的很令人兴奋。”

 

参考链接:

https://www.youtube.com/watch?v=8T6ClX-y2AE&t=3149s

https://news.ycombinator.com/item?id=35729655

https://www.theregister.com/2023/04/27/microsoft_windows_rust/


延伸阅读:


Rust for Linux 要来了,这对我们意味着什么


历时四年,Dropbox 用 Rust 重写同步引擎核心代码


15 年做不好的代码搜索,基于 Rust 重写引擎终于搞定


GitHub 官宣“报废”Atom,创始团队表示正用 Rust 重写一个编辑器


没有 NGINX 和 OpenResty 的未来:Cloudflare 工程师正花费大量时间用 Rust 重构现有功能


存储量扩大千倍,Discord 是如何使用 Rust 语言和 ScyllaDB 数据库来改进架构的?


雄心勃勃的计划:沃尔沃正在将 Rust 用于其车载软件


Webpack 创始人推出比 Webpack“快 700 倍”的 Turbopack,基于 Rust 编写


那位用 Rust 重写数据库的创始人来复盘了:删除 27 万行 C++ 代码,值吗?


华为也为 Rust“狂”:揭秘国内唯一 Rust 基金会创始成员背后的人与事


2023-04-28 00:0023780

评论 2 条评论

发布
用户头像
Tina老师,厉害👍
2023-05-23 20:25 · 上海
回复
用户头像
现在标题党真多 居然还置顶了
2023-05-15 09:30 · 上海
回复
没有更多了
发现更多内容

一文熟悉 Go 的分支结构(if - else-if - else、switch)

陈明勇

Go golang Switch if 11月月更

支持向量机-选取与核函数相关的参数:degree & gamma & coef0

烧灯续昼2002

Python 机器学习 算法 sklearn 11月月更

python小知识-hook函数

AIWeker

Python python小知识 11月月更

华为云桌面Workspace云上办公,方便得很!

路过的憨憨

一个三年Java程序员的面试总结!绝对会对你有所帮助

钟奕礼

Java java面试 java编程 程序员 java

ipv6地址概述——了解ipv6地址

初学者

网络 11月月更

C++---类型萃取---is_array && is_enum/is_union/is_class

桑榆

C++ STL 11月月更

先到先得!阿里淘系内传322页Java并发编程核心讲义学习笔记

钟奕礼

Java java程序员 java面试 java编程

今年Java技术岗面试太难了,收藏93套BATJ等公司面试题集,已看哭

钟奕礼

java面试 java编程 Java‘’ 程序员‘

在child_process域和错误的冒泡和捕获实践【Note.js】

恒山其若陋兮

前端 11月月更

824页23种设计模式全解析,搞定设计模式各种难题

小小怪下士

Java 程序员 设计模式

进军东南亚市场,腾讯云数据库TDSQL助力印尼BNC银行数字化转型

腾讯云数据库

金融行业 tdsql 腾讯云数据库 BNC

CDH5部署三部曲之一:准备工作

程序员欣宸

大数据 CDH 11月月更

最近面试Java开发的感受:就以平时项目经验面试,通过估计很难

钟奕礼

Java java面试 java编程 程序员 java

Note.js框架中的cluster集群和断言测试的实战剖析

恒山其若陋兮

前端 11月月更

华为云会议,云上办公更轻松高效

路过的憨憨

万字长文!对比分析了多款存储方案,KeeWiDB最终选择自己来

腾讯云数据库

nosql 存储 NoSQL 数据库 腾讯云数据库 KeeWiDB

从零开始读源码,阿里最新JDK源码剖析笔记在架构师社区火了

程序员小毕

Java 程序员 后端 jdk源码 架构师

极致性能!阿里巴巴Java性能优化实录Github首次开源

Java永远的神

JVM 设计模式 多线程 java程序员 Java性能优化

面向大规模队列,百万并发的多优先级消费系统设计

阿里云视频云

阿里云 队列 消费系统

python数据分析-pandas基础(4)-数据映射apply

AIWeker

Python Python数据分析 11月月更

极客时间运维进阶训练营第五周作业

好吃不贵

信息论与编码:线性分组码与性能参数

timerring

数据通信 11月月更 线性分组码

腾讯云大神亲码“redis深度笔记”,不讲一句废话,全是精华

钟奕礼

Java java程序员 java面试 java编程

云原生基础组件选型出发点

穿过生命散发芬芳

11月月更 云原生落地

【网络安全必看】如何提升自身WEB渗透能力?

网络安全学海

黑客 网络安全 信息安全 渗透测试 漏洞挖掘

架构实战营-模块5课后作业

Mr.M

图神经网络之预训练大模型结合:ERNIESage在链接预测任务应用

汀丶人工智能

图神经网络 图学习 11月月更

涨薪50%,从小厂逆袭,坐上美团L8技术专家(面经+心得)

钟奕礼

Java Java 面试 java编程 程序员 java

2022-11-26:给定一个字符串s,只含有0~9这些字符 你可以使用来自s中的数字,目的是拼出一个最大的回文数 使用数字的个数,不能超过s里含有的个数 比如 : 39878,能拼出的最大回文数是

福大大架构师每日一题

算法 rust 福大大

python数据分析-pandas基础3-数据对齐

AIWeker

Python Python数据分析 11月月更

Azure CTO: Rust 已登陆 Windows 11 内核_文化 & 方法_Tina_InfoQ精选文章