Rust 准备好为系统开发驱动程序了吗?

以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「ENG八戒」mp.weixin.qq.com/s/PJIjENgPM...

微软为了实现操作系统内存安全编程,现在终于迈出关键一步,并在 Github 上发布了相关代码,使得开发人员能够使用 Rust 语言编写 Windows 驱动程序的代码,最起码已经可以开始动手做一些实际的事情了。

微软云 Azure 首席技术官 Mark Russinovich 在 X(改名后的推特) 上发布了推文,同时评论说:"致力于在 Rust 中实现 Windows 驱动程序开发"

如果你上不了 github,可以关注我并在公众号后台回复 rust-windows-driver,即可获取网盘下载链接。

这项工程可以追溯到很多年前。2019 年 7 月,微软研究院宣布了期望在漏洞发生之前就消除所有类似的漏洞,这样就为了内存安全语言提供了用武之地,同时还指出了最有希望满足这些要求的新型系统编程语言之一---- Rust 编程语言。

微软非常欣赏 Rust,除了因为 Rust 的内存安全性,还因为它的数据竞争安全性,Rust 可以确保不会有两个或多个线程对一块内存进行竞争性访问。

去年,Russinovich 声称,是时候停止使用 C/C++ 来启动任何新项目了,并推荐使用 Rust 替代非 GC 语言。另外,为了安全可靠,呼吁业界应该宣布这些语言已被弃用。

GC 或垃圾收集语言(例如 C# 和 Java)适合业务应用程序,但不适合底层系统编码。虽然 C++ 没有 GC,但是我在之前也写过相关的 C++ 垃圾回收功能,可以点击查看《都说 C++ 没有 GC,RAII: 那么我算个啥?》

Windows 大部分构件是用 C 和 C++ 编写的。微软资深软件工程师 Raymond Chen 在 2018 年表示,由于各种技术和历史原因,大多数用户模式代码现在都是 C++ 语言,而内核代码仍然是 C 语言。

虽然 Windows 11 从那时起就出现了,但开发新版本操作系统仍然不会重写所有构件,所以 C/C++ 仍然占据主要内容。

硬件制造商为了适配相应硬件和 Windows 系统,仍然会使用 Windows 驱动程序工具包开发相关驱动,由于这也是一个 C/C++ 工具包,所以最终发布的驱动程序也是基于 C/C++ 语言。

但是,最近情况开始转变,新的基于 Rust 的驱动程序工具包已经发布!其发布时指出其目的是支持 WDM(Windows 驱动程序模型)和 WDF(Windows 驱动程序框架)驱动程序。WDM 驱动程序处于较低级别,与操作系统紧密相关,而 WDF 驱动程序通过框架库与系统交互。初始存储库主要关注 WDK。

但是,这个新的工具包补充说,该项目仍处于开发的早期阶段,尚未建议用于商业用途。Microsoft 仍然鼓励对其实验和更多的反馈,并引导开发人员前往代码库 GitHub 讨论论坛寻求反馈。

想要在工具包中引入 Rust,早期的一个无法回避的问题是如何处理异常。对于 Windows 内核(以及一般的操作系统)来说,结构化异常处理是 Windows 开发中不可或缺的一部分,也是使用 Rust 开发 Windows 内核的真正障碍。

Rust 没有异常处理,只能使用 Result 变量报告可恢复的错误,并在出现不可恢复的错误时以紧急失败退出。这种错误处理在内核代码中是不受欢迎的,因为它们会导致系统崩溃。

有开发商表示,在 Linux 内核(Rust 也被采用)的背景下,因为内核代码与随机用户空间系统工具不同,在内核中内存不足绝不能导致中止,它只需要导致错误返回已通知系统处理。

对于 Rust 想要在内核开发中大展拳脚,异常处理是无法忽视或者逃避的问题。

微软新存储库中的早期代码包含以下注释:

arduino 复制代码
// FIXME: Should this trigger Bugcheck via KeBugCheckEx?

这说明,将 Rust 引入底层 Windows 代码绝不仅仅是为 WDK API 添加 Rust 语言绑定的问题。虽然如此,最初的开发者反应总体上是积极的。内存安全问题在 Windows 安全性和稳定性问题中一直占很大的比例,所以转向 Rust 是一个目前大家都很关注的解决方案。

相关推荐
itas10914 小时前
Rust调用C动态库
c语言·rust·bindgen·bindings·rust c绑定
SomeB1oody14 小时前
【Rust自学】5.1. 定义并实例化struct
开发语言·后端·rust
m0_7482361117 小时前
Calcite Web 项目常见问题解决方案
开发语言·前端·rust
SomeB1oody2 天前
【Rust自学】4.1. 所有权:栈内存 vs. 堆内存
开发语言·后端·rust
SomeB1oody3 天前
【Rust自学】4.2. 所有权规则、内存与分配
开发语言·后端·rust
SomeB1oody3 天前
【Rust自学】4.5. 切片(Slice)
开发语言·后端·rust
编码浪子3 天前
构建一个rust生产应用读书笔记6-拒绝无效订阅者02
开发语言·后端·rust
baiyu333 天前
1小时放弃Rust(1): Hello-World
rust
baiyu333 天前
1小时放弃Rust(2): 两数之和
rust
Source.Liu3 天前
数据特性库 前言
rust·cad·num-traits