首页 » 软件优化 » 微软开始让开发人员用 Rust 编写 Windows 驱动程序(驱动程序微软代码内核编写)

微软开始让开发人员用 Rust 编写 Windows 驱动程序(驱动程序微软代码内核编写)

落叶飘零 2024-07-24 03:59:28 0

扫一扫用手机浏览

文章目录 [+]

这项工作可以追溯到很多年前。
2019 年 7 月,微软研究院发帖称,它希望\"在漏洞发生之前消除一整类漏洞\",提出了内存安全语言的理由,并表示\"满足这些要求的最有前途的较新系统编程语言之一是最初由 Mozilla 发明的 Rust 编程语言\"。

该公司推崇 Rust,不仅因为它的内存安全,还因为它的数据竞赛安全--确保\"两个或多个线程不会不同步地访问一段内存\"。

2022 年,Russinovich 宣布:\"现在是时候停止用 C/C++ 启动任何新项目了,在需要使用非 GC 语言的情况下使用 Rust。
为了安全性和可靠性起见,业界应该宣布这些语言已被淘汰。
\"C# 和 Java 等 GC 或垃圾回收语言适用于商业应用,但不适合底层系统代码。

微软开始让开发人员用 Rust 编写 Windows 驱动程序(驱动程序微软代码内核编写) 软件优化
(图片来自网络侵删)

虽然 Windows主要是用 C 和 C++ 编写的。
\"由于各种技术和历史原因,现在大部分用户模式代码都是用C++编写的,但大部分内核代码还是用C语言编写的。
\"2018年,长期从事软件开发的微软软件工程师陈伟明(Raymond Chen)说,虽然此后出现了Windows 11,但在开发新版本时,操作系统并没有重写。
硬件制造商为使其设备能在 Windows 中运行而使用的 Windows 驱动程序工具包,仍然是一个 C/C++ 工具包。

根据基于 Rust 的新驱动程序工具包的发布说明,其目的是同时支持 WDM(Windows 驱动程序模型)和 WDF(Windows 驱动程序框架)驱动程序。
WDM 驱动程序级别较低,与操作系统紧密相连,而 WDF 驱动程序则通过框架库与系统交互。
初始资源库的重点是 WDK。

说明还补充说:\"该项目仍处于早期开发阶段,尚不建议用于商业用途。
微软鼓励进行试验和反馈,并指出开发人员可以到资源库中的 GitHub 讨论区寻求反馈。
\"

一个早期问题是如何处理异常。
一位开发者说:\"对于 Windows 内核(以及整个操作系统)来说,结构化异常处理是 Windows 开发不可或缺的一部分,也是让 Rust 成为 Windows 内核开发现实的真正障碍。
Rust 没有异常,它更倾向于使用结果变量报告可恢复的错误,而在无法恢复的错误中,它会以崩溃失败的方式退出。
在内核代码中,这种崩溃是不可取的,因为它会导致系统整体崩溃。
\"

开发者约翰尼-肖(Johnny Shaw)引用了 Linux Torvalds 在 Linux 内核(也采用了 Rust)中的一段话:\"因为内核代码不同于随机的用户空间系统工具。
内存耗尽绝对不能导致中止。
它只需要导致错误返回\"。
托瓦尔兹认为这是一个\"根本性问题\"。

微软新版本库中的早期代码包括以下注释:

// FIXME: Should this trigger Bugcheck via KeBugCheckEx?

这个问题说明,在底层 Windows 代码中引入 Rust 并不仅仅是为 WDK API 添加 Rust 语言绑定那么简单。
不过,最初的反应总体上是积极的。
内存安全问题在 Windows 的安全性和稳定性问题中占了很大比例,因此采用 Rust 是一个可行的解决方案。

相关文章