微软用 18 万行 Rust 重写了 Windows 内核

news2025/1/21 12:16:47

微软正在使用 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 形式。”

Rust 已进入 Windows 内核

微软的重点是“消除错误类”,并希望采取更积极的方法来确保更安全的代码。他们希望通过内存安全语言、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 已经进入 Windows 内核

微软几年前开始对 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 的决定确实令人兴奋。”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/943152.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言“牵手”天猫商品详情数据方法,天猫商品详情API接口申请指南

天猫商城平台是阿里巴巴集团旗下的一个综合性购物网站。 天猫商城的前身是淘宝商城,于2012年1月11日上午更名。天猫是一个整合数千家品牌商、生产商,为商家和消费者之间提供一站式解决方案的B2C(Business-to-Consumer,商业零售&a…

干货!证书超实用小Tips

1.CSA 是加拿大标准协会(Canadian Standards Association)的简称,它成立于1919年,是加拿大首家专为制定工业标准的非盈利性机构。在北美市场上销售的电子、电器等产品都需要取得安全方面的认证。 2.EAC认证 是海关联盟国家的认证。海关联盟是由俄罗斯…

C# WPF监听USB插入拨出

可以全部监听。好用 private void FormF100WriteCortexLicense_Load(object sender, EventArgs e){this.Text this.Text " " FT_Tools.Program.version;USB USBWatcher new USB();USBWatcher.AddUSBEventWatcher(USBEventHandler, USBEventHandler, new TimeSpa…

【MongoDB系列】3. MongoDB 安全策略:验证和授权

前言 前面文章中通过客户端工具(MongoDB Shell、Robo 3T)连接 MongoDB 服务时,只要有 IP 地址和端口号,就能连接到数据库,之后就能操作数据库。这是因为默认安装的 MongoDB 没有启用身份验证,也没有设置初…

PlotAI = Matplotlib + AI

PlotAI是在 Python 和 Matplotlib 中创建绘图的最简单方法,它使用 LLM 生成Python代码和Matplotlib绘图。 推荐:用 NSDT编辑器 快速搭建可编程3D场景 1、PlotAI简介 PlotAI的思路: 用户提供输入数据框和提示。PlotAI 构建了 LLM 的提示&…

代码随想录打卡—day46—【DP】— 8.29 背包END

1 139. 单词拆分 139. 单词拆分 做了很久...估计2h 一开始我的思路卡死了 看题解之后的思路的详解见注释, 我的写法和carl 答案在一些微小的细节上略有不同,我的更好理解,但他的解法更简单。 我写的过程中,需要注意下标和字符…

记一次空字符串判断的大坑

1. 控制台打印数据如下 2.尝试做判断 如图我肉眼看到的是 " " 于是我做了如下判断 结果竟然是false 我做了修改 竟然还是false 3. 开始各种转数据类型 发现了问题,空字符串的布尔值应该是false,但是这个玩意儿是true 4. 查看数据 我发现在往控制台粘贴数据时,是个…

SAP SD之如何定义销售组织(Sales Organization)

目录 前言 一、注意点 二、创建步骤 1.Step By Step 总结 前言 SAP中的销售组织是SD中的最高级别组织单位,负责公司中发生的所有销售和服务活动。销售组织是根据公司的销售需求在SAP中定义的。控制向客户销售、谈判销售等条款。它只能分配给一个公司代码和一个…

Python(Web时代)—— Django数据库整合

简介 ORM框架介绍 ORM(Object Relation Mapping)框架,可以帮助我们把类和数据表进行一个映射,让我们可以通过类和类对象来直接操作数据库中的数据。 优势:根据对接的数据库引擎翻译成对应的sql语句,所以…

平均值和方差的点估计、区间估计

0,预备知识 0.1,中心极限定理 0.2,均值的标准误差 0.3,卡方分布 1,总体均值的无偏估计量 2.1,当总体方差已知时对样本均值的描述(Z统计量) 2.2,当总体方差未知时对样本均…

RabbitMq深度学习

什么是RabbitMq? RabbitMQ是一个开源的消息队列中间件,它实现了高级消息队列协议(AMQP)。它被广泛用于分布式系统中的消息传递和异步通信。RabbitMQ提供了一种可靠的、可扩展的机制来传递消息,使不同的应用程序能够相互之间进行…

成都优优聚:美团代运营趋势在哪儿?

美团代运营作为一种经营模式,在当今日益竞争激烈的市场中扮演着重要的角色。它为商家提供了全方位的服务,从市场推广到订单管理,从团购券的制作到售后服务,帮助商家解决了运营中的各种难题。 首先,美团代运营的核心优势…

重磅OpenAI发布ChatGPT企业版本

8月29日凌晨,Open AI官网发布ChatGPT企业版本! 企业版简介: ChatGPT企业版提供企业级安全和隐私、无限的高速 GPT-4 访问、用于处理更长输入的更长上下文窗口、高级数据分析功能、自定义选项等等。人工智能可以协助和提升我们工作生活的各个…

DEA创建maven项目,项目结构无src目录和pom.xml文件内容

File > Settings > Build,Execution,Deployment > Build Tools > Maven > Runnner,界面中VM Options 输入框中填入-DarchetypeCataloginternal,重启IDEA,打开即会有src目录和pom.xml文件。 -DarchetypeCataloginternal -DarchetypeCatal…

【校招VIP】产品思维设计之用户需求分析

考点介绍: 理解用户需求时需要我们在看待产品的时候不能以我们创造者的专业身份来看,而需要用同理心,将自己转变为一个产品的典型用户,才能准确挖掘到用户心底最真实的诉求。 『产品思维设计之用户需求分析』相关题目及解析内容可…

新版白话空间统计(26)标准距离

前文再续,书接上一回。 上次我们讲了方向分布工具,这个工具会生成一个标准差椭圆,其中有这样的一句话描述: “短半轴表示数据分布的范围,短半轴越短,表示数据呈现的向心力越明显;反之&#xf…

探索OLED透明屏的优缺点:引领科技未来的革命性突破

OLED透明屏作为一项革命性的创新技术,其令人惊叹的透明度和柔性性能引起了全球范围内的关注。 然而,了解OLED透明屏的优缺点对于我们全面认识其在科技未来中的地位至关重要。 今天,尼伽将深入探讨OLED透明屏的优势和限制,并借助…

耐世特Nexteer EDI解决方案

耐世特Nexteer曾经为美国通用汽车全资子公司,是一家集研发、制造、销售于一体的全球化集团公司。耐世特汽车系统公司是转向系统及相关先进技术的全球供应商。该公司为60多家汽车制造商设计、制造、销售电动助力转向器、液压助力转向器、转向管柱和传动轴产品&#x…

Nacos基础(3)——nacos+nginx 集群的配置和启动 端口开放 nginx反向代理nacos集群

目录 引出nacos集群nginx反向代理nacos集群停止单例nacos准备8848和8858修改cluster.conf配置【配置】修改启动配置文件【配置】开放8858的端口分别以集群方式启动【启动】前端访问查看生产者测试8858nacos nginx反向代理配置代理tcp代理http启动nginx反向代理容器生产者访问测…

C++内存分区模式

内存分区模型 代码区:存放函数体的二进制代码,由操作系统管理的全局区:存放全局变量和静态变量以及常量栈区:由编辑器自动分配释放,存放函数的参数值,局部变量等堆区:由程序员分配和释放&#…