• Azure CTO:我们正努力使Windows驱动程序开发能够利用Rust 语言
  • 发布于 2个月前
  • 504 热度
    0 评论
微软在 GitHub 上发布了代码,让程序员能够利用 Rust 语言编写 Windows 驱动程序,这是实现操作系统内存安全编程的关键一步。
GitHub:https://github.com/microsoft/windows-drivers-rs

Azure CTO Mark Russinovich 在 X 平台上公布了这个链接,并评论说:“我们正在努力使 Windows 驱动程序开发能够利用 Rust 语言。”

这项工作可以追溯到很多年前。在 2019 年 7 月,微软研究部门发布了他们希望 “在问题发生之前消除一整类漏洞” 的愿景,强调了内存安全语言的重要性,并表示 “满足这些要求的最有前景的新系统编程语言之一就是由 Mozilla 初发明的 Rust 编程语言。”

该公司不仅因为 Rust 的内存安全性而欣赏它,还因为它的数据竞争安全性 —— 确保 “两个或多个线程不会非同步地访问内存中的数据。”

2022 年,Russinovich 宣布:“是时候停止开始任何新的 C/C++ 项目,并在需要非垃圾收集语言的场景中使用 Rust 了。为了安全和可靠性,业界应该宣布这些语言已被弃用。” 垃圾收集语言如 C# 和 Java 很适合商业应用,但不适合用于底层系统代码。

虽然 Windows 主要是用 C 和 C++ 编写的,但正如微软资深软件工程师 Raymond Chen 在 2018 年所说:“现在大多数的用户模式代码是用 C++ 编写的,但大多数内核代码仍然是用 C 编写的,这有各种技术和历史原因。” 

尽管自那时以来 Windows 11 已经推出,但在开发新版本时,并没有重写操作系统。由硬件制造商用来使他们的设备能在 Windows 中运行的 Windows Driver Kit 仍然是一个 C/C++ 工具包。

根据新推出的基于 Rust 的驱动程序包的发布说明,该项目旨在支持 WDM(Windows 驱动模型)和 WDF(Windows 驱动框架)驱动程序。WDM 驱动程序是较低层次的,与操作系统紧密结合,而 WDF 驱动程序则通过一个框架库与系统交互。最初的仓库主要集中在 WDK 上。

说明中还补充说:“该项目仍处于开发的早期阶段,并且尚不推荐用于商业用途。” 微软正在鼓励实验和反馈,并指导开发者向仓库中的 GitHub 讨论论坛提供反馈。

一个早期遇到的问题是如何处理异常。“对于 Windows 内核(以及一般的操作系统来说),结构化异常处理是为 Windows 开发的一个不可缺少的部分,这也是让 Rust 成为 Windows 内核开发现实的一个真正的障碍。” 一位开发者这样说。

Rust 并没有异常处理机制,它倾向于用 Result 变量报告可恢复的错误,并在遇到无法恢复的错误时用 panic 来终止程序。在内核代码中这样的 panic 是不可取的,因为它们会导致系统崩溃。开发者 Johnny Shaw 引用了 Linus Torvalds 的话,在谈到 Linux 内核(Rust 也在被采纳)的情境时说:“因为内核代码不同于普通的用户空间系统工具。内存耗尽绝不能导致中止。它只需要导致一个错误返回。” Torvalds 认为这个问题是一个 “基本问题”。

微软新仓库中的早期代码包括以下评论:
// FIXME: Should this trigger Bugcheck via KeBugCheckEx?
这个问题明确地表明,将 Rust 引入 Windows 的底层代码并非只是为 WDK API 添加 Rust 语言接口那么简单。尽管如此,最初的反馈大体上是正面的。内存安全问题在 Windows 的安全和稳定性问题中占据了很大比例,转向 Rust 很可能是一个有效的解决方案。
用户评论