微软开始让开发人员用 Rust 编写 Windows 驱动程序
微软开始让开发人员用Rust编写Windows驱动程序这项工作可以追溯到很多年前。2019年7月,微软研究院发帖称,它希望"在漏洞发生之前消除一整类漏洞",提出了内存安全语言的理由,并表示"满足这些要求的最有前途的较新系统编程语言之一是最初由Mozilla发明的Rust编程语言"。该公司推崇Rust,不仅因为它的内存安全,还因为它的数据竞赛安全--确保"两个或多个线程不会不同步地访问一段内存"。2022年,Russinovich宣布:"现在是时候停止用C/C++启动任何新项目了,在需要使用非GC语言的情况下使用Rust。为了安全性和可靠性起见,业界应该宣布这些语言已被淘汰。"C#和Java等GC或垃圾回收语言适用于商业应用,但不适合底层系统代码。虽然Windows主要是用C和C++编写的。"由于各种技术和历史原因,现在大部分用户模式代码都是用C++编写的,但大部分内核代码还是用C语言编写的。"2018年,长期从事软件开发的微软软件工程师陈伟明(RaymondChen)说,虽然此后出现了Windows11,但在开发新版本时,操作系统并没有重写。硬件制造商为使其设备能在Windows中运行而使用的Windows驱动程序工具包,仍然是一个C/C++工具包。根据基于Rust的新驱动程序工具包的发布说明,其目的是同时支持WDM(Windows驱动程序模型)和WDF(Windows驱动程序框架)驱动程序。WDM驱动程序级别较低,与操作系统紧密相连,而WDF驱动程序则通过框架库与系统交互。初始资源库的重点是WDK。说明还补充说:"该项目仍处于早期开发阶段,尚不建议用于商业用途。微软鼓励进行试验和反馈,并指出开发人员可以到资源库中的GitHub讨论区寻求反馈。"一个早期问题是如何处理异常。一位开发者说:"对于Windows内核(以及整个操作系统)来说,结构化异常处理是Windows开发不可或缺的一部分,也是让Rust成为Windows内核开发现实的真正障碍。Rust没有异常,它更倾向于使用结果变量报告可恢复的错误,而在无法恢复的错误中,它会以崩溃失败的方式退出。在内核代码中,这种崩溃是不可取的,因为它会导致系统整体崩溃。"开发者约翰尼-肖(JohnnyShaw)引用了LinuxTorvalds在Linux内核(也采用了Rust)中的一段话:"因为内核代码不同于随机的用户空间系统工具。内存耗尽绝对不能导致中止。它只需要导致错误返回"。托瓦尔兹认为这是一个"根本性问题"。微软新版本库中的早期代码包括以下注释://FIXME:ShouldthistriggerBugcheckviaKeBugCheckEx?这个问题说明,在底层Windows代码中引入Rust并不仅仅是为WDKAPI添加Rust语言绑定那么简单。不过,最初的反应总体上是积极的。内存安全问题在Windows的安全性和稳定性问题中占了很大比例,因此采用Rust是一个可行的解决方案。...PC版:https://www.cnbeta.com.tw/articles/soft/1386461.htm手机版:https://m.cnbeta.com.tw/view/1386461.htm