微软用 18 万行 Rust 重写了 Windows 内核
微软正在使用 Rust 编程语言重写其核心 Windows 库。 5 月 11 日——Azure 首席技术官 Mark Russinovich 表示,最新的 Windows 11 Insider Preview 版本是第一个包含内存安全编程语言 Rust 的版本。
“如果你参加了 Win11 Insider 环,你将在 Windows 内核中首次体验 Rust,”Russinovich 昨晚发推文说。
无论如何,这一次来得很快:微软直到 4 月中旬在以色列举行的 BlueHat IL 2023 安全会议上才公开了用 Rust 代码替换部分 Windows 内核的计划。
当时,Windows 操作系统安全总监 David “dwizzle” Weston 在一次演讲中宣布 Rust 将正式进入 Windows 内核。
“在接下来的几周或几个月里,人们将开始在内核中使用 Rust 来启动 Windows。这项工作的基本目标是将系统的一些 C++ 数据类型转换为 Rust 形式。”
Rust 已进入 Windows 内核
微软的重点是“消除错误类”,并希望采取更积极的方法来确保更安全的代码。他们希望通过内存安全语言、CPU 架构变化以及更安全的语言子集来实现这一目标。
David Weston 这次演讲的重点是内存安全语言。在Windows内核中,主要语言是C。由于MFC和COM的存在,内核之外的大部分代码都是C++,甚至MSVC libc实际上也是用C++编写的,带有extern“C”声明。然而,从 Windows Vista 开始,内核开始允许 C++ 代码(VC++ 获得了 /kernel 标志)。
目前微软已经重写了两个主要项目,DWriteCore和Win32 GDI,其中包含一些非常旧的代码。Win32 GDI 编写于 80 年代末和 90 年代初,专为 286/386 设计。
微软首先将 Rust 引入 DWriteCore,它是 Windows DWrite 引擎的 Windows App SDK 实现的一部分,用于文本分析、布局和渲染。
这项工作于 2020 年开始,DWriteCore 目前包含约 152,000 行 Rust 代码和 96,000 行 C++ 代码。
DWriteCore私有API使用类似COM的接口,公共API都是COM,其中C++和Rust可以轻松集成。
据介绍,两名开发人员总共花了六个月的时间才完成这项工作,包括编写代码和做相应的测试。所有这些改进现在都向软件开发人员开放。
David Weston 表示,这是一个非常值得的项目,因为该领域以其安全漏洞而闻名,而重写带来的性能提升是惊人的!除了预期的安全性改进之外,据说使用 OTLS(OpenType 库服务)可以将 Shaping(替换)字形的性能提高 5% 到 15%。
此外,微软的Windows图形设备接口(Win32 GDI)也正在移植到Rust,现在有36,000行Rust代码。weston 强调,Rust 不仅比 C++ 更容易编写,而且更容易理解。最新版本的 Windows 11 从这个版本的 Rust 开始,但尽管它已经通过了所有 GDI 测试,Rust 界面仍然被一个功能标志禁用。
Weston 说:“今天的 Windows 内核中实际上有一个 SysCall,它是用 Rust 实现的。”
但微软对 Rust 的支持并不是理所当然的,Weston 解释道,“恐怕我们不会很快用 Rust 完全重写 Windows,虽然我们都喜欢 Rust,但我们仍然需要有一个健全的策略放在第一位,包括保护我们更多的本机代码。”
但重要的是要承认,微软的认可、支持和代码贡献正在使 Rust 变得更强大,这对于整个开源社区来说是一件好事。
Rust 已经进入 Windows 内核
微软几年前开始对 Rust 表现出兴趣,认为这是在产品正式发布之前捕获和消除内存安全漏洞的好方法。自2006年以来,Windows开发团队修复了大量CVE列出的安全漏洞,其中约70%与内存安全相关。
Rust 工具链致力于防止开发人员构建和发布存在安全缺陷的代码,从而降低恶意黑客攻击软件弱点的可能性。简而言之,Rust 对内存安全和相关保护的关注有效地减少了代码中包含的严重错误的数量。
谷歌等行业巨头也公开拥抱 Rust 语言。
随着业界对内存安全编程的日益关注,微软也表现出了探索 Rust 的热情。去年 9 月,微软向 Microsoft Azure 首席技术官 Mark Russinovich 发出非正式授权,要求其在新软件项目中使用 Rust,而不是 C/C++。
现在 Rust 已经进入 Windows 内核,Weston 表示 Microsoft Windows 将继续推进这项工作,Rust 很快就会广泛使用。
Python Flask 项目的领导者、Sentry 的安全工程师、开源软件开发人员 Armin Ronacher 在一次电子邮件采访中指出,微软的青睐对于 Rust 语言非常重要。
“具体来说,我希望微软能够重用现有的编译器来带来更好的PDB(程序数据库)支持。当前的 Windows 在开发工具支持方面无法跟上其他基于 DWARF(使用属性记录格式进行调试)的平台。”
Pydantic 创始人兼 Python/Rust 开发者 Samuel Colvin 也表示:“微软的这种前瞻性思维给我留下了深刻的印象,但这是有道理的。我相信微软是受到工程师的压力才接受 Rust 的。此时,如果目标是构建一个强调性能或更注重底线的应用程序,那么 Rust 无疑是一个明智的选择。”
Colvin 还提到,虽然市场上可能没有很多优秀的 Rust 工程师,但他仍然认为找到优秀的 Rust 工程师比找到优秀的 C/C++ 工程师更容易。
“拥有丰富 Rust 开发经验的人并不多,但很多工程师愿意尝试和学习。毕竟,编写安全代码本身就不是一件容易的事,而在 Rust 中至少相对来说不那么困难。”
Colvin 总结道:“对于我们这些依赖 Rust 的开发人员来说,微软使用和支持 Rust 的决定确实令人兴奋。”
相关文章:

微软用 18 万行 Rust 重写了 Windows 内核
微软正在使用 Rust 编程语言重写其核心 Windows 库。 5 月 11 日——Azure 首席技术官 Mark Russinovich 表示,最新的 Windows 11 Insider Preview 版本是第一个包含内存安全编程语言 Rust 的版本。 “如果你参加了 Win11 Insider 环,你将在 Windows 内…...

word 调整列表缩进
word 调整列表缩进的一种方法,在试了其他方法无效后,按下图所示顺序处理,编号和文字之间的空白就没那么大了。 即右键word上方样式->点击修改格式->定义新编号格式->字体->取消勾选 “……对齐到网格”->确定...
nginx学习
一、nginx常用版本 Nginx开源版: http://nginx.org/ nginx plus商业版本(好像功能支持更多) https://www.nginx.com/ openresty (免费,用的也是这个) https://openresty.org/cn/ Tengine https://tengine.…...

python+TensorFlow实现人脸识别智能小程序的项目(包含TensorFlow版本与Pytorch版本)(一)
pythonTensorFlow实现人脸识别智能小程序的项目(包含TensorFlow版本与Pytorch版本)(一) 一:TensorFlow基础知识内容部分(简明扼要,快速适应)1、下载Cifar10数据集,并进行…...
ChatGPT怎么用于政府和公共服务?
将ChatGPT用于政府和公共服务领域是一种创新的应用方式,可以改善政府与公众之间的互动,提升公共服务的效率和质量。ChatGPT作为一个自然语言处理模型,可以在政府信息传递、公共参与、服务支持等方面发挥积极作用。以下将详细探讨ChatGPT如何用…...

dvwa文件上传通关及代码分析
文章目录 low等级medium等级high等级Impossible等级 low等级 查看源码: <?phpif( isset( $_POST[ Upload ] ) ) {// Where are we going to be writing to?$target_path DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";$target_path . basename( …...

数字孪生:重塑政府决策与公共服务
在之前的文章中为大家分享了数字孪生在很多行业的应用场景,本文和大家一起探讨一下数字孪生在政务管理方面能有哪些应用,以及其对公共服务提供的积极影响。 1)城市规划方面 数字孪生技术可用于模拟城市的发展和规划。政府可以建立城市的虚拟…...

Leetcode:【448. 找到所有数组中消失的数字】题解
题目 给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。 难度:简单 题目链接:448. 找到所有数组中消失的数字 示例1 输入&…...

2023年中,量子计算产业现状——
2023年上半年,量子计算(QC)领域取得了一系列重要进展和突破,显示出量子计算技术的快速发展和商业应用的不断拓展。在iCV TAnk近期发表的一篇报告中,团队从制度进步、产业生态、投融资形势、总结与展望四个方面对量子计…...
微信小程序智慧流调微信小程序设计与实现
摘 要 自从2020年新冠疫情爆发以来,对全国人民的健康和全国各地区的经济发展都带来了很大的影响,并且新冠肺炎对各个领域带来的影响还未完全消除。近三年以来,全国各地区多次爆发新的疫情,导致许多人被隔离,也导致全国…...

分布式集群框架——有关zookeeper的面试考点
3.掌握Zookeeper的概念 当涉及到大规模分布式系统的协调和管理时,Zookeeper是一个非常重要的工具。 1. 分布式协调服务:Zookeeper是一个分布式协调服务,它提供了一个高可用和高性能的环境,用于协调和同步分布式系统中的各个节点…...

Spring Cloud Gateway的快速使用
环境前置搭建Nacos:点击跳转 Spring Cloud Gateway Docs 新建gateway网关模块 pom.xml导入依赖 <!-- 网关 --> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifact…...
VSCode-C++环境配置+Cmake
文章目录 一、环境配置二、Win10 Cmake 一、环境配置 转载链接 二、Win10 Cmake 创建CMakeLists.txt cmake_minimum_required(VERSION 3.26) project(graph_algorithm)set(CMAKE_CXX_STANDARD 17)add_executable(main main.cppshared_variable.cpp )cmake . -G "MinGW…...

python爬虫14:总结
python爬虫14:总结 前言 python实现网络爬虫非常简单,只需要掌握一定的基础知识和一定的库使用技巧即可。本系列目标旨在梳理相关知识点,方便以后复习。 申明 本系列所涉及的代码仅用于个人研究与讨论,并不会对网站产生不好…...

扩散模型实战(八):微调扩散模型
推荐阅读列表: 扩散模型实战(一):基本原理介绍 扩散模型实战(二):扩散模型的发展 扩散模型实战(三):扩散模型的应用 扩散模型实战(四…...
Android 全局控件属性设置
一 使用需求: 如 设置全局字体、全局文本属性设置 二 实现方式: 在App使用的主题中,添加属性及属性值 如给所有的文本设置属性,注释部分作用是设置应用全局字体 <style name"Theme.AppDemo" parent"Base.Theme.AppDemo&q…...

下面是实践百度飞桨上面的pm2.5分类项目_logistic regression相关
part1:数据的引入,和前一个linear regression基本是一样 part2:数据解析——也就是数据的“规格化” 首先,打算用dataMat[]和labelMat[]数据存储feature和label,并且文件变量fr 然后,是这个for line in fr.readlines()循环&#…...
阿里云误删Python后域yum报错解决方案
阿里云误删Python后域yum报错解决方案 1:找回所有依赖 这里依赖可能很多,也搞不清楚有哪些,建议买一台临时服务器,系统选择跟你当前的系统一致的,配置选最低就行 2:登录临时服务器,创建临时文件夹 mkdir /usr/local/yum-fix cd /usr/local/yum-fix3:查找并下载所有云依赖 r…...

unordered-------Hash
✅<1>主页:我的代码爱吃辣📃<2>知识讲解:数据结构——哈希表☂️<3>开发环境:Visual Studio 2022💬<4>前言:哈希是一种映射的思想,哈希表即使利用这种思想,…...

数据仓库总结
1.为什么要做数仓建模 数据仓库建模的目标是通过建模的方法更好的组织、存储数据,以便在性能、成本、效率和数据质量之间找到最佳平衡点。 当有了适合业务和基础数据存储环境的模型(良好的数据模型),那么大数据就能获得以下好处&…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型
在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重,适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解,并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...
Pydantic + Function Calling的结合
1、Pydantic Pydantic 是一个 Python 库,用于数据验证和设置管理,通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发(如 FastAPI)、配置管理和数据解析,核心功能包括: 数据验证:通过…...

CSS3相关知识点
CSS3相关知识点 CSS3私有前缀私有前缀私有前缀存在的意义常见浏览器的私有前缀 CSS3基本语法CSS3 新增长度单位CSS3 新增颜色设置方式CSS3 新增选择器CSS3 新增盒模型相关属性box-sizing 怪异盒模型resize调整盒子大小box-shadow 盒子阴影opacity 不透明度 CSS3 新增背景属性ba…...
Android屏幕刷新率与FPS(Frames Per Second) 120hz
Android屏幕刷新率与FPS(Frames Per Second) 120hz 屏幕刷新率是屏幕每秒钟刷新显示内容的次数,单位是赫兹(Hz)。 60Hz 屏幕:每秒刷新 60 次,每次刷新间隔约 16.67ms 90Hz 屏幕:每秒刷新 90 次,…...
6.计算机网络核心知识点精要手册
计算机网络核心知识点精要手册 1.协议基础篇 网络协议三要素 语法:数据与控制信息的结构或格式,如同语言中的语法规则语义:控制信息的具体含义和响应方式,规定通信双方"说什么"同步:事件执行的顺序与时序…...

Copilot for Xcode (iOS的 AI辅助编程)
Copilot for Xcode 简介Copilot下载与安装 体验环境要求下载最新的安装包安装登录系统权限设置 AI辅助编程生成注释代码补全简单需求代码生成辅助编程行间代码生成注释联想 代码生成 总结 简介 尝试使用了Copilot,它能根据上下文补全代码,快速生成常用…...