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

相关推荐
AI智动派4 小时前
从 Python 到 Rust:深入解析 LLM Agent 工具调用的内存安全与异步并发重构实践
rust
_朱志鹏5 小时前
Rust练手项目1--minigrep
rust
ssshooter1 天前
Tauri 项目实践:客户端与 Web 端的授权登录实现方案
前端·后端·rust
AI智动派1 天前
《深入 Rust Async/Await:如何实现一个带超时保护与安全沙箱的 LLM Agent 循环》
rust
范特西林3 天前
一次 to_bits() 引发的 Rust 与 C++ 底层思考
rust
冬奇Lab4 天前
一天一个开源项目(第42篇):OpenFang - 用 Rust 构建的 Agent 操作系统,16 层安全与 7 个自主 Hands
人工智能·rust·开源
量子位4 天前
Transformer论文作者重造龙虾,Rust搓出钢铁版,告别OpenClaw裸奔漏洞
rust·openai·ai编程
哈里谢顿4 天前
Rust 语言入门博客
rust
DongLi016 天前
rustlings 学习笔记 -- exercises/06_move_semantics
rust
ssshooter6 天前
Tauri 踩坑 appLink 修改后闪退
前端·ios·rust