以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「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 是一个目前大家都很关注的解决方案。