www.9778.com 9

微软计划使用 Rust 取代 C和C+

此前,微软表示正探索将 Rust 作为 C 和 C++
的安全替代方案,并且也对外展示了使用 Rust 重写 Windows
组件的体验,根据微软的说法,Rust 是一种从根本上考虑安全性的编程语言,他们将尝试使用
Rust 重写各种产品,因为在过去的十年里,微软 70%
以上的安全补丁都提供了与内存相关的错误,而
Rust 正是解决这个问题的“良药”。

www.9778.com 1

又到了年末各种盘点出炉的时候,开源圈今年虽然没有“GitHub
被微软收购”、“Red Hat 被 IBM
收购”如此重磅且出圈的新闻,但依然不失精彩。开源圈作为开发者密度最高的圈子,微软作为开发者群体中“渗透率”最高的商业公司,微软与开源之间的故事,天生自带流量属性。

而根据 ZDNet
的报导,近日在一次演讲中,谈到微软为解决相应内存问题所做的工作,微软研究人员 Matthew
Parkinson 提到了微软正在开发的基于 Rust 的新编程语言 Verona

新智元推荐

本文就来和大家一起回顾微软在 2019 年与开源相关的重要事件 ——
主要是引发较多关注和广泛讨论的新闻。

www.9778.com 2

来源:InfoQ

为了更好地理解微软的开源
2019,下面我们将会按不同的领域而非时间线进行回顾。

演讲中,Matthew 先是分享了微软在
MemGC(Memory Garbage Collector)上所做的工作,MemGC 是指 IE 和  Edge
浏览器上的内存垃圾回收器,它解决了标准浏览器一个特性——文档对象模型(DOM)中的漏洞,DOM
以树结构表述了 HTML 文档内容。 

作者:王文婧

编程语言

之后他由此牵出另一个问题:如何构建最安全的产品?不仅仅丢弃已有的东西,而要考虑可以在更加安全的系统中构建一些什么。他介绍了微软正在使用 Rust
重写某些组件,并提出:“如果我们想要隔离,并精简遗留代码,以使攻击者的利用代码无法逃逸出来,那么如何设计语言呢?” 
  

微软近日提出,未来将使用 Rust 作为 C、C++
以及其他编程语言的替代方案,以改善应用程序的安全性的计划。

从拥抱 Rust 到开发基于 Rust 的安全编程语言

最初,微软表示正探索将 Rust 作为 C 和 C++
的安全替代方案,并且也对外展示了使用 Rust 重写 Windows
组件的体验。根据微软的说法,Rust 是一种从根本上考虑安全性的编程语言,他们将尝试使用
Rust 重写各种产品,因为在过去的十年里,微软 70%
以上的安全补丁都提供了与内存相关的错误,而
Rust 正是解决这个问题的“良药”。

到后来,微软为解决相应内存问题所做的工作,他们决定开发基于 Rust
的新编程语言 Verona,这是是用于微软“安全基础设施编程(safe
infrastructure programming)”的一种新语言。

Matthew 提出了微软正在开发的基于
Rust 的新编程语言 Verona,他表示这是首次讨论该项目,Verona
是用于微软“安全基础设施编程(safe infrastructure
programming)”的一种新语言。

近日,微软安全响应中心团队在官网更新文章,就近日提出的最新计划,即未来将使用
Rust 作为 C、C++
以及其他编程语言的替代方案以改善应用程序的安全性的计划,从空间内存安全、时间内存安全、数据竞争等方面进行了进一步的深入补充。

微软计划使用 Rust 取代 C和C+。微软推出新编程语言 Bosque

微软推出了一款全新的编程语言 Bosque,该语言参考了 TypeScript
的语法与类型,还有 ML 和 Node/JavaScript 的语义,其作者认为 Bosque
超越了主流的结构化程序设计。

Bosque
由规范化程序设计思想而来,旨在解决当前结构化程序设计中遇到的这些问题,作者把结构化程序设计的兴起认为是编程器与开发工具的第一个黄金时代,他相信此次提出的规范化编程模型将大大提高开发者的工作效率、提高软件质量,并带来编译器和开发工具的第二个黄金时代。

Matthew 介绍,Verona 由 C# 项目经理
Mads Torgensen 与 Microsoft Research Cambridge 研究软件工程师 Juliana
Franco 维护。 

首席安全技术经理 Gavin Thomas
表示,开发人员的核心工作不是担心安全性,而是做好功能开发,首先需要启用一种
“不会引入内存漏洞隐患” 的开发语言。显然,这一次的主角是 Rust。

微软宣布加入 OpenJDK 项目

微软正式签署了《Oracle
贡献者协议》,甲骨文公司也对微软参与该项目表示了认可及欢迎。

微软及其子公司在许多方面都高度依赖 Java,并且在微软 Azure 云中向客户提供
Java 运行时服务。微软已经认识到在甲骨文成功有效管理下的 OpenJDK
项目所获得的巨大价值,它收购了
Java,得到了更广泛的软件生态系统,微软也期待做出自己的一份贡献,它表示自己的团队在初期将致力于一些小的
bug 修复和反向移植。

微软面临的挑战是应对宽广的应用领域,范围从
C# 桌面应用到 C 或 C# Exchange、ASP.NET、Azure
与设备驱动程序,再到内存管理和启动加载器等底层 Windows 组件,以及
Windows 内核硬件抽象层(HAL,hardware abstraction
layer)。 

过去 12 年,约 70% 的微软补丁针对内存漏洞

微软开源其 C++ 标准库实现 STL

微软开源了其 MSVC 的 C++ 标准库实现(也就是 STL),该库实现是 MSVC
工具集和 Visual Studio IDE 的一部分。

微软表示开源 STL
可以使开发者随时了解其发展情况,使用最新更新,并且帮助完善项目。“随着
C++
标准化的加速发展,并且每年都会有更多的重大特性被投票,我们相信从开源贡献中接受主要特性将很重要。”

“执行内存管理确实很困难,如果有任意并发突变,则临时内存安全性将非常困难”,Matthew
介绍了 Verona 的设计思路:“Verona 的所有权模型是基于对象组的,而不是像
Rust 那样基于单个对象的所有权模型。在 C++
中,可以获得指针,并且它是基于对象的。但这与我关于数据和语法的思考不同,我认为数据结构是对象的集合,而对象的集合则是生命周期。 因此,通过在对象的所有权级别获得所有权,我们就可以更接近人们正在使用的抽象级别,它使我们能够构建数据结构而不会超出安全范围。”

如今,内存漏洞已成为黑客攻击的主要对象。据微软最新调查数据显示,在过去
12 年里,约 70% 的微软补丁都是针对内存漏洞的。

微软官方上线 Python 教程

微软上线了一套 Python 教程《Develop with Python on
Windows》,文档内容包括设置 Python 开发环境、在 Windows 与 WSL
子系统中安装相应开发工具,以及集成 VS Code 与 Git 工具并进行开发等。

So by taking ownership at the level of ownership of objects, then we
get much closer to the level of abstraction that people are using and
it gives us the ability to build data structures without going outside
of safety.

自 2004 年以来,微软安全响应中心
已经对每一个报告的微软安全漏洞进行了分类。从所有的分类中,人们得出了一个令人惊讶的事实:正如
Matt Miller 今年在 BlueHat IL
的演讲中所讨论的那样,大多数修复的漏洞和分配的 CVE
都是由开发人员无意中将内存损坏错误插入到其 C 和 C++
的代码中造成的。这两种存在内存漏洞风险的编程语言允许开发人员在代码被执行的地方对内存地址进行细粒度控制。开发人员内存管理代码中的一个错误可能导致大量内存漏洞,攻击者便可利用这些错误造成具有危险性和侵入性的后果,比如远程代码执行
和权限升级漏洞。

开发工具

另外,Matthew 还表示 Verona 很快将会开源。

www.9778.com 3

微软开源全新终端应用 Windows Terminal

微软在 Build 2019 大会上宣布开源全新的终端 Windows
Terminal,这是一个全新的、流行的、功能强大的命令行终端工具。包含很多来社区呼声很高的特性,例如:多
Tab 支持、富文本、多语言支持、可配置、主题和样式,支持 emoji 和基于 GPU
运算的文本渲染等。

www.9778.com 4

(文/开源中国)    

数据来源:微软安全响应中心网站

Visual Studio Online 公开上线

微软在 Build 2019 大会上宣布了 Web 版本的 VS Code – Visual Studio
Online,并在两个月后的 Ignite 2019 大会上推出 Visual Studio Online
公开预览版。

www.9778.com 5

▲Visual Studio Online

从页面上直观地看,VS Online 就是一个 Web 版的 VS
Code,但这其实只是它的一个前端界面,这个基于网页浏览器的编辑器同样支持
Git
存储库、扩展和内置的命令行接口,因此开发者可从任何设备编辑、运行和调试应用。而
VS Online 更强大的能力来自于背后 Azure
提供的云计算能力,并且这些能力可以支持到 VS Code 与 VS
中,这意味着,其实开发者不使用浏览器也可以体验到 VS Online
带来的强大云计算资源支持。

近年来,随着微软增加其代码库并在代码中使用更多的开源软件,这一问题并没有得以解决,反而变得更糟,而微软也并不是唯一一个暴露出内存漏洞的企业。

微软开源新字体 Cascadia Code

Cascadia Code 是微软在 Build 2019
大会上宣布推出的等宽字体,微软介绍它是与新的终端 Windows Terminal
一起开发的,官方建议将其与终端应用和 VS、VS Code 等文本编辑器一起使用。

Cascadia Code
为命令行和代码编辑器提供了全新的体验,并且它还支持编程连字(Programming
Ligatures),就是在编写代码的时候,可以组合字符创建新的字形,这对于代码的可读性和呈现后的用户友好度都是一种很好的机制,同时这也增强了
Windows Terminal 的现代外观。

www.9778.com 6

在官网发布的最新文章中,微软安全响应中心团队就如何解决内存安全问题进行了如下分析,

操作系统

为了解决内存安全问题,需要采取几种不同的方式。C++ 中的 “现代”
构造能够在一定程度上预防某些内存安全问题。此外,我们应尽可能使用其它现代
C++ 功能。

微软在 Windows 10 中搞了个真正的 Linux 内核

2019 年微软直接在 Windows 中安上了一颗“Linux 内脏”,这颗 Linux
内脏其实是今年 5 月份在 Windows 10 上推出的全新版本 WSL(Windows
Subsystem for Linux),新版本 WSL 2 使用了全新的架构,这是一个真正的
Linux 内核,它改变了 Linux 二进制文件与 Windows 和计算机硬件的交互方式。

www.9778.com 7

然而,现代 C++
仍然不具备全面的内存安全与数据争用机制。更重要的是,如果程序员不加以运用,这些功能本身将毫无意义;而且这些功能在规模较大,且较为模糊的代码库可能也无法奏效。再者,C++
缺乏能够在安全抽象当中打包不安全代码的良好工具,这意味着虽然能够在本地级别强制执行正确的编码实践,但开发人员仍很难在
C 或者 C++
当中构建出能够安全组合的软件组件。除此之外,我们应尽可能将软件最终迁移至具备全面内存安全特性的语言当中,例如,通过运行时检查以及垃圾回收机制,实现内存保护的
C# 或者
F#。毕竟,内存管理是一项极为复杂的功能,最好是确保必要时才与其打交道。

微软将 exFAT 技术添加到 Linux 内核

www.9778.com,微软宣布将其 exFAT 技术添加到 Linux 内核中。exFAT 文件系统是 FAT32
的替代者,它由微软开发,但是不仅用于 Windows 系统,目前 exFAT
在整个电子行业中都得到了广泛应用,特别是 SD 卡、USB 闪存驱动、数码相机和
MP3 播放器中使用最为充分。

如今微软开放了它的 exFAT 技术,并且把技术规范公开,这意味着,往后 Linux
内核可以直接堂堂正正地将 exFAT 支持开箱即用。微软还强调了一句:Linux
社区可以放心地使用 Linux 内核中包含的 exFAT。

Rust 的优势

微软将新版 Edge 浏览器引入 Linux

继推出 WSL2、将 exFAT 技术添加至 Linux 内核,微软再次瞄准了 Linux。在
Ignite 2019 大会上,微软正式宣布 Edge for Linux 不久后将会发布。

微软高级编辑 Zac Bowden 称新的 Edge 是完全跨平台的,该浏览器将是支持
Windows 平台,包括服务器和客户端,以及 macOS、Android、iOS 和 Linux。

多年来,微软始终在寻找更安全的 C 和 C++ 的替代品。2016 年 6
月,微软曾开源 “Checked C”,这是 C
语言的一个扩展,它带来了一些解决安全问题的新特性,但依然没有彻底解决问题。由于自动内存管理,Microsoft
还有其他更安全的编程语言,C#和.NET 系列是一个,编译为 JavaScript 的
TypeScript 是另一个。这些语言被 Microsoft
及其客户广泛使用,但它们无法满足所有需求。对此,微软安全响应中心首席安全技术经理
Gavin Thomas 表示:“如果开发人员能够将确保内存安全的
.NET,C#等语言与高效的 C ++ 结合起来,那就太好了。也许我们可以。”
因此,Rust 成为了这项计划的主角。

微软开源 Bing 搜索背后的关键算法

微软开源了一项 Bing 搜索背后的关键算法——SPTAG,它使 Bing
能够快速将搜索结果返回给用户。

SPTAG (Space Partition Tree And
Graph)是分布式近似最近邻域搜索(ANN)库,为大规模矢量搜索场景提供高质量矢量索引构建、搜索和分布式在线服务工具包。利用
SPTAG 算法作为开源 Python 库的核心,Bing
能够在几毫秒内搜索数十亿条信息。

据了解,Rust 创建于 2006 年,被创建者 Mozilla 称为 “C / C ++
的替代品”。最初,它只是 Mozilla
的一个研究项目,旨在开发更安全、快速的编程语言以重写 Firefox
浏览器,大多数开发人员认为它是一个理论项目,而如今 Rust
正在逐步证明自己的实力。2016 年 8 月发布的 Firefox 48 采用了以 Rust
构建的 mp4 轨道元数据解析器,该解析器首次在 Windows 和 32 位 Linux
桌面提供。最近,Brave 浏览器用 Rust 替换了最初用 C ++
编写的广告拦截组件。Cloudflare 和 Dropbox 目前也在生产系统中运行 Rust。

开源文化

Rust 的显着特征包括:

自由软件之父 RMS 受邀到微软发表演讲

自由软件运动发起人 RMS
受邀在微软进行了演讲,其中谈到微软在开源上的贡献,他表示微软未来活动的主要动力,无论如何都必定是基于利润的,微软的开源贡献其实对于“自由世界”毫无贡献。

RMS 还给了微软十条建议,代表性的包括开源 Windows、收回“毒瘤”言论以及指导
GitHub 正确许可证。

零成本抽象

微软将主办首场 Linux 会议 WSLConf

微软公布了明年 3 月在 Microsoft HQ 举办 WSLConf 的消息,WSLConf
是由微软主办的首个与 Linux 相关的会议,主要围绕 WSL
进行讨论,内容涉及该平台的最新发展动态,也会介绍 WSL 与一些 IDE 如
Visual Studio 和 JetBrains 的集成。

Canonical 宣布它将成为 WSLConf 的“特别赞助商”,毕竟 Ubuntu
是最早与微软合作的 Linux 发行版,它也是 WSL 中最受欢迎的版本。

(文/开源中国)    

移动语义

保证内存安全

没有数据竞争的线程

基于特质的泛型

模式匹配

类型推断

最小运行时间

高效的 C 绑定

Rust
团队表示,它具有丰富的系统和所有权模型,可确保内存安全和线程安全。此外,它还提供文档,包含集成的包管理器和其他有助于提高开发人员工作效率的工具。更为重要的是,Rust
从一开始就设计了防止内存损坏的漏洞。它的语法也更为简单,由它编写的应用程序不会产生相同数量的错误,因此开发人员可以专注于扩展其应用程序,而非进行持续的维护工作。

根据 StackoverFlow2019 年开发者调查报告的数据显示,Rust
是如今最受欢迎的编程语言,因此更容易招募到相关开发人员。相比之下,在这项调查中,受访者将
C 列为第四个最讨厌的编程语言,C++ 则排名第九。

www.9778.com 8

www.9778.com 9

StackoverFlow2019 年开发者调查报告数据

据了解,目前,除 Mozilla 之外,全球有数百家公司正在使用 Rust,如
Amazon、Atlassian、Dropbox、Facebook、Google、Microsoft、Red Hat 和
Reddit 等。在国内,百度、字节跳动、 PingCAP、蚂蚁金服、知乎、SenseTime
等企业也都在使用 Rust。

Rust 存在的问题

然而,Rust 仍存在一些不足。据先前的一项调查显示,它需要改进的方面包括:

更好的人体工程学

更好的文档

更好的库支持

更简单的学习曲线

更多的 IDE 支持

一些用户在谈及为何不使用 Rust
的原因时表示,“尽管学习曲线和语言的复杂性仍是人们学习 Rust
的阻碍,但令许多人产生共鸣的一个方面是,只是还没有足够活跃的采用 Rust
的商业项目让人们参与其中……
对于一些人来说,只要有强烈的动机,他们就可以克服 Rust 的学习曲线。”
此外,受缺少 IDE 支持的影响,约 10% 的用户正在寻找更好的 IDE 支持,而 5%
的老用户因此停用 Rust。

对于这项或将构建新的语言生态的计划,微软安全响应中心首席安全技术经理
Gavin Thomas 表示,“我们是一个响应组织,但我们也发挥积极的作用
“,“我们应该从一开始就努力防止开发人员引入问题,而不是为解决问题提供指导和工具
“。目前,关于何时在其产品或云服务上使用 Rust,微软还没有具体透露。

(本文经授权转载自InfoQ)