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 是一个目前大家都很关注的解决方案。

相关推荐
用户967151139167215 小时前
Rust 如何轻松实现 RTMP 流媒体推送?深入解析直播推流场景与解决方案
rust·ffmpeg
无名之逆16 小时前
Rust 开发提效神器:lombok-macros 宏库
服务器·开发语言·前端·数据库·后端·python·rust
s91236010116 小时前
rust 同时处理多个异步任务
java·数据库·rust
杰克逊的黑豹20 小时前
不再迷茫:Rust, Zig, Go 和 C
c++·rust·go
Source.Liu21 小时前
【学Rust写CAD】28 带 Alpha 通道的双线性插值函数(bilinear_interpolation_alpha.rs)
rust
Source.Liu21 小时前
【学Rust写CAD】27 双线性插值函数(bilinear_interpolation.rs)
后端·rust·cad
yinhezhanshen21 小时前
理解rust里面的copy和clone
开发语言·后端·rust
叠叠乐1 天前
rust Send Sync 以及对象安全和对象不安全
开发语言·安全·rust
niandb1 天前
The Rust Programming Language 学习 (九)
windows·rust
Source.Liu1 天前
【学Rust写CAD】26 图形像素获取(pixel_fetch.rs)
rust·cad