抛弃C/C++!微软官宣:请用Rust编写Windows驱动!

C语言与CPP编程 2023-10-09 08:30


击上方“C语言与CPP编程”,选择“关注/置顶/星标公众号

干货福利,第一时间送达!

最近有小伙伴说没有收到当天的文章推送,这是因为微信改了推送机制,有一部分小伙伴刷不到当天的文章,一些比较实用的知识和信息,错过了就是错过了,建议大家加个星标⭐️,就能第一时间收到推送。

凭借卓越的内存效率、速度与安全性等特点,近几年 Rust 可谓深受大厂青睐:
  • 2019 年,AWS 表示开始在其基础架构中越来越多地使用 Rust 后,决定赞助 Rust,即 Rust 团队可以优惠租用 AWS 基础设施以进行语言开发。

  • 2021 年 2 月 9 日,Rust 基金会成立,Mozilla、亚马逊、华为、谷歌和微软作为创始白金成员,承诺在两年时间里每年投入不少于 100 万美元的预算,以用于 Rust 项目的开发、维护和推广。

  • 2022 年,Meta 宣布将 Rust 语言纳入其服务器端编程语言。

  • 2022 年 12 月,Linux 内核 6.1 发布,包含了初始 Rust 支持。

  • 今年年初,谷歌宣布支持使用 Rust 开发 Chromium。

  • ……

在这众多大厂之中,微软对于 Rust 的重视与支持力度也一直未减。继 5 月效仿 Linux 用 Rust 重写部分 Windows 内核后,近来微软在拥抱 Rust 上又进了一步:微软在 GitHub 中发布了一系列开发工具包,让开发者可以使用 Rust 语言来编写 Windows 驱动程序。

最近李伟老师讲了《C++ Primer 5th》这本书的视频,他是美国微软高级工程师,清华大学博士,帮忙推广一下,感兴趣的可以看看。

对此,不少开发者在感慨:没想到啊,Windows 在拥抱 Rust 方面居然走在了 Linux 前面!

在拥抱 Rust 的路上,微软曾遭到反对

事实上,早在 2019 年 2 月,微软工程师 Matt Miller 在以色列举行的安全会议 BlueHat 上曾透露:从 2006 年到 2018 年,微软旗下产品过去 12 年修复的所有漏洞中,有七成涉及的都是内存安全问题。

内存安全问题占比高的原因,主要是因为 Windows 大多是以 C 和 C++ 编写的——著名的“内存不安全”语言。内存管理代码只要有一个漏洞,就会导致大量的内存安全错误,从而可能引发远程代码执行或权限提升漏洞等攻击。

对于这些潜在风险,同年 7 月微软研究院发布了一份声明,希望“在漏洞发生之前消除一整类漏洞”,并表示“满足这些要求的最有前途的新系统编程语言之一,就是最初由 Mozilla 发明的 Rust”。从这份声明可以看出,至少自 2019 年开始,微软已打算在拥抱 Rust 上积极布局。

到了去年 9 月,微软 Azure 首席技术官 Mark Russinovich 在 X(前推特)上发文,正式呼吁业界淘汰 C / C++,应改用更加安全的 Rust 语言:

说到语言,现在是时候停止用 C/C++ 启动任何新项目了,在需要使用非 GC 语言的情况下使用 Rust。为了安全性和可靠性,业界应该宣布这些语言已被淘汰。

可不同于 Mark Russinovich 对 Rust 的支持和青睐,当时他的这则帖子下多是反对和质疑的声音:“这完全是一个与显示脱节、不切实际的想法。”

  • “这听起来像是在指责语言本身而不是程序员。C++ 是门好语言,只是许多使用它的人基本上不懂编程,而换一种语言并不能解决这个问题。”

  • “Rust 是一种不错的语言,但它甚至还未达到 1.0 版本,我认为我们不应该为了尚未经过实战检验的语言而放弃久经考验的语言。”

尽管不被看好,但微软转向 Rust 的决心依旧坚定。今年 5 月 Mark Russinovich 宣布微软已用 Rust 重写部分 Windows 内核:“如果你在 Windows 11 Insider ring 上,那么将首次感受到 Rust 在 Windows 内核中带来的魔力。”

当时,或许是网友对微软拥抱 Rust 的决定已逐渐接受,也或许是微软解释过并非是用 Rust 替换内核中 C/C++ 的整个“40 年工作”,而是将其中一些内部的 C++ 数据类型替换成 Rust,因此在这则帖子下大多是正面留言。

从 2019 年放出风声,到已用 Rust 重写部分 Windows 11 内核代码,如今微软拥抱 Rust 的程度仍在继续加深:在 Github 上发布工具包,让开发者能用 Rust 编写 Windows 驱动程序——这无疑是为操作系统实现内存安全编程的关键一步。

仍处于早期开发阶段,不建议“用于商业用途

从 Mark Russinovich 在 X 上分享的 Github 链接来看,这个由微软 Surface 团队开发的新项目名为 windows-drivers-rs,是一个由多个 Rust 组件(Crates)组成的项目,可帮助开发人员用 Rust 开发 Windows 驱动程序。

该项目同时支持 WDM(Windows Driver Model)和 WDF(Windows Driver Foundation)两种不同的驱动程序开发模型:WDM 驱动程序级别较低,与操作系统紧密相连,而 WDF 驱动程序则通过框架库与系统交互。

据介绍,windows-drivers-rs 具体包含以下板块:

  • wdk-build:一个用于配置 Cargo 构建脚本的库,可用于绑定生成和 WDK(Windows Developer Kit)的下游链接。

  • wdk-sys:将 FFI 直接绑定到 WDK 中提供的 API。

  • wdk:与 WDK 中的 API 安全绑定。

  • wdk-panic:使用 WDK 构建的程序的默认 panic 处理程序实现。

  • wdk-alloc:为使用 WDK 编译的二进制文件提供分配支持。

  • wdk-macros:宏集合,有助于更轻松地与 wdk-sys 的直接绑定进行交互。

如需查看 windows-drivers-rs 用于创建驱动程序的示例,开发者可前往:https://github.com/microsoft/Windows-rust-driver-samples。

值得注意的是,微软补充:虽然该项目的计划灵活运用不同的 WDK 版本和不同的 WDF 版本,但目前“仅针对 NI eWDK、KMDF 1.33、UMDF 2.33 和 WDM 驱动程序进行了测试”,对于“较旧的 DDK 可能会缺少链接器选项”。

此外,微软还表示 windows-drivers-rs 目前仍处于早期开发阶段,因此“不建议用于商业用途”,但励社区和开发者对其进行试验、建议和反馈,并将利用 GitHub 论坛作为与社区互动的主要形式。

开发者提问:Rust 如何处理异常?

就目前而言,已有少数开发者提出了当前这个旨在助力开发者用 Rust 开发 Windows 驱动程序的新工具平台存在的一些问题,其中一个引起讨论的问题就是 Rust 如何处理异常。

一位开发者指出:“对于 Windows 内核(以及整个操作系统)来说,结构化异常处理是 Windows 开发不可或缺的一部分,也是让 Rust 成为 Windows 内核开发现实的真正障碍。”

但与其他编程语言不同,在 Rust 语言中没有异常这一说,它通常用 Result 类型来处理可恢复的错误,而在遇到不可恢复的错误时,Rust 会提供一个特殊的宏 panic!当执行这个宏时,程序会打印一段错误提示信息,展开(unwind)并清理当前的栈(Stack),然后退出程序的执行。

正如另一位开发者所说,“Windows 内核中的 Panic 往往是最后的手段,只应保留给内核已损坏且无法恢复的情况”,因此不少人认为 Rust 调用 Panic 的方式“在内核代码中是不可取的,这可能会导致系统崩溃”。

那么,你对于 Rust 进一步入驻 Windows 的趋势又有何看法呢?

整理 | 郑丽媛
出品 | CSDN(ID:CSDNnews)

参考链接:

https://github.com/microsoft/windows-drivers-rs

https://devclass.com/2023/09/25/microsoft-posts-early-stages-code-for-developing-windows-drivers-in-rust/

EOF

你好,我是飞宇,本硕均于某中流985 CS就读,先后于百度搜索以及字节跳动电商等部门担任Linux C/C++后端研发工程师。

同时,我也是知乎博主@韩飞宇,日常分享C/C++、计算机学习经验、工作体会,欢迎点击此处查看我以前的学习笔记&经验&分享的资源。

我组建了一些社群一起交流,群里有大牛也有小白,如果你有意可以一起进群交流。

欢迎你添加我的微信,我拉你进技术交流群。此外,我也会经常在微信上分享一些计算机学习经验以及工作体验,还有一些内推机会

加个微信,打开另一扇窗






C语言与CPP编程 C语言/C++开发,C语言/C++基础知识,C语言/C++学习路线,C语言/C++进阶,数据结构;算法;python;计算机基础等
评论
  • 流量传感器是实现对燃气、废气、生活用水、污水、冷却液、石油等各种流体流量精准计量的关键手段。但随着工业自动化、数字化、智能化与低碳化进程的不断加速,采用传统机械式检测方式的流量传感器已不能满足当代流体计量行业对于测量精度、测量范围、使用寿命与维护成本等方面的精细需求。流量传感器的应用场景(部分)超声波流量传感器,是一种利用超声波技术测量流体流量的新型传感器,其主要通过发射超声波信号并接收反射回来的信号,根据超声波在流体中传播的时间、幅度或相位变化等参数,间接计算流体的流量,具有非侵入式测量、高精
    华普微HOPERF 2025-01-13 14:18 477浏览
  • 数字隔离芯片是现代电气工程师在进行电路设计时所必须考虑的一种电子元件,主要用于保护低压控制电路中敏感电子设备的稳定运行与操作人员的人身安全。其不仅能隔离两个或多个高低压回路之间的电气联系,还能防止漏电流、共模噪声与浪涌等干扰信号的传播,有效增强电路间信号传输的抗干扰能力,同时提升电子系统的电磁兼容性与通信稳定性。容耦隔离芯片的典型应用原理图值得一提的是,在电子电路中引入隔离措施会带来传输延迟、功耗增加、成本增加与尺寸增加等问题,而数字隔离芯片的目标就是尽可能消除这些不利影响,同时满足安全法规的要
    华普微HOPERF 2025-01-15 09:48 70浏览
  • 新年伊始,又到了对去年做总结,对今年做展望的时刻 不知道你在2024年初立的Flag都实现了吗? 2025年对自己又有什么新的期待呢? 2024年注定是不平凡的一年, 一年里我测评了50余块开发板, 写出了很多科普文章, 从一个小小的工作室成长为科工公司。 展望2025年, 中国香河英茂科工, 会继续深耕于,具身机器人、飞行器、物联网等方面的研发, 我觉得,要向未来学习未来, 未来是什么? 是掌握在孩子们生活中的发现,和精历, 把最好的技术带给孩子,
    丙丁先生 2025-01-11 11:35 457浏览
  • 根据Global Info Research(环洋市场咨询)项目团队最新调研,预计2030年全球无人机电池和电源产值达到2834百万美元,2024-2030年期间年复合增长率CAGR为10.1%。 无人机电池是为无人机提供动力并使其飞行的关键。无人机使用的电池类型因无人机的大小和型号而异。一些常见的无人机电池类型包括锂聚合物(LiPo)电池、锂离子电池和镍氢(NiMH)电池。锂聚合物电池是最常用的无人机电池类型,因为其能量密度高、设计轻巧。这些电池以输出功率大、飞行时间长而著称。不过,它们需要
    GIRtina 2025-01-13 10:49 180浏览
  • 随着数字化的不断推进,LED显示屏行业对4K、8K等超高清画质的需求日益提升。与此同时,Mini及Micro LED技术的日益成熟,推动了间距小于1.2 Pitch的Mini、Micro LED显示屏的快速发展。这类显示屏不仅画质卓越,而且尺寸适中,通常在110至1000英寸之间,非常适合应用于电影院、监控中心、大型会议、以及电影拍摄等多种室内场景。鉴于室内LED显示屏与用户距离较近,因此对于噪音控制、体积小型化、冗余备份能力及电气安全性的要求尤为严格。为满足这一市场需求,开关电源技术推出了专为
    晶台光耦 2025-01-13 10:42 495浏览
  • ARMv8-A是ARM公司为满足新需求而重新设计的一个架构,是近20年来ARM架构变动最大的一次。以下是对ARMv8-A的详细介绍: 1. 背景介绍    ARM公司最初并未涉足PC市场,其产品主要针对功耗敏感的移动设备。     随着技术的发展和市场需求的变化,ARM开始扩展到企业设备、服务器等领域,这要求其架构能够支持更大的内存和更复杂的计算任务。 2. 架构特点    ARMv8-A引入了Execution State(执行状
    丙丁先生 2025-01-12 10:30 465浏览
  • 01. 什么是过程能力分析?过程能力研究利用生产过程中初始一批产品的数据,预测制造过程是否能够稳定地生产符合规格的产品。可以把它想象成一种预测。通过历史数据的分析,推断未来是否可以依赖该工艺持续生产高质量产品。客户可能会要求将过程能力研究作为生产件批准程序 (PPAP) 的一部分。这是为了确保制造过程能够持续稳定地生产合格的产品。02. 基本概念在定义制造过程时,目标是确保生产的零件符合上下规格限 (USL 和 LSL)。过程能力衡量制造过程能多大程度上稳定地生产符合规格的产品。核心概念很简单:
    优思学院 2025-01-12 15:43 519浏览
  • PNT、GNSS、GPS均是卫星定位和导航相关领域中的常见缩写词,他们经常会被用到,且在很多情况下会被等同使用或替换使用。我们会把定位导航功能测试叫做PNT性能测试,也会叫做GNSS性能测试。我们会把定位导航终端叫做GNSS模块,也会叫做GPS模块。但是实际上他们之间是有一些重要的区别。伴随着技术发展与越发深入,我们有必要对这三个词汇做以清晰的区分。一、什么是GPS?GPS是Global Positioning System(全球定位系统)的缩写,它是美国建立的全球卫星定位导航系统,是GNSS概
    德思特测试测量 2025-01-13 15:42 487浏览
  •   在信号处理过程中,由于信号的时域截断会导致频谱扩展泄露现象。那么导致频谱泄露发生的根本原因是什么?又该采取什么样的改善方法。本文以ADC性能指标的测试场景为例,探讨了对ADC的输出结果进行非周期截断所带来的影响及问题总结。 两个点   为了更好的分析或处理信号,实际应用时需要从频域而非时域的角度观察原信号。但物理意义上只能直接获取信号的时域信息,为了得到信号的频域信息需要利用傅里叶变换这个工具计算出原信号的频谱函数。但对于计算机来说实现这种计算需要面对两个问题: 1.
    TIAN301 2025-01-14 14:15 107浏览
  • 食物浪费已成为全球亟待解决的严峻挑战,并对环境和经济造成了重大影响。最新统计数据显示,全球高达三分之一的粮食在生产过程中损失或被无谓浪费,这不仅导致了资源消耗,还加剧了温室气体排放,并带来了巨大经济损失。全球领先的光学解决方案供应商艾迈斯欧司朗(SIX:AMS)近日宣布,艾迈斯欧司朗基于AS7341多光谱传感器开发的创新应用来解决食物浪费这一全球性难题。其多光谱传感解决方案为农业与食品行业带来深远变革,该技术通过精确判定最佳收获时机,提升质量控制水平,并在整个供应链中有效减少浪费。 在2024
    艾迈斯欧司朗 2025-01-14 18:45 57浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦