76 年迭代与更新,编程语言界,谁主沉浮?
在六百多种编程语言中,对于开发者而言,其主观印象中或只有几种主流的编程语言,如 Java、C、C++、C#、新贵 Python 等,而之所以它们能够成为主流,软件开发生态必是其中不可或缺的一个重要部分。
以最通用的编程语言之一 C# 为例,作为类型安全、面向对象的编程语言,C# 可以良好地运行在 .NET 框架运行时环境中。随着其优势的逐渐显现,微软作为背后最重要的推动者之一,全面将其运用于数据库、Web 服务、游戏、移动应用程序、服务器应用程序等场景中,由此也吸引了无数开发者加入其生态构建。除此之外,一直以来,微软也是 C++、C 编程语言的生态发展的重要推手。
如今,微软是否会为另一个编程语言——Rust,以及类似于该语言且是微软最新开发的 Verona 的生态带来积极地影响力,我们将拭目以待。
犹记得在问答网站 Quora 上,曾有网友发帖求教“开发 Windows 10 用了哪种编程语言?”
对此,直至今年 4 月,微软内核工程师 Axel Rietschin 在该问题下回应道(https://www.quora.com/Which-programming-language-is-used-for-making-Windows-10/answer/Axel-Rietschin):
Windows 10 与 Windows 8.x、7、Vista、XP、2000 和 NT 的代码库是相同的,其中每一代都在之前的基础上进行重大的重构,并增加大量新功能,改进性能和硬件支持,此外还有安全性的提升,同时保持非常高的前向兼容性。
其中,如 ntoskrnl.exe 内核大部分是使用 C 编写的,在内核模式下运行的大多数内容也是用 C 编定的,包括文件系统、网络与驱动程序等。其中也包含一些 C++ 代码,而越靠近用户模式、越接近新的源码时,C 的使用变得越来越少,反之 C++ 变多。
除此之外,如 .NET BCL 与一些相关库和框架通常都是用 C# 编写的,但它们也只不过是带有几座 C++ 小岛的 C 汪洋大海的一栗,它们自不同的部门,代码并不属于 Windows 源码树。
由此可见,占据全球桌面操作系统龙头老大的 Windows 其内部结构错综复杂,运用的编程语言也远远不止一种。而如今,除了 C、C++、C# 等主流编程语言之外,微软还宣布,正在探索使用 Mozilla 主导开发的通用、编译型编程语言 Rust 语言来作为 C、C++ 和其他语言的替代方案,与此同时,微软也正在研发类似于 Rust 的新的编程语言——Verona,不过,微软采取该两种策略的最终目的只有一个,就是希望以此来加固 Windows 10 的安全性。
微软为何要用 Rust 替代 C、C++?
之所以大动篇幅地想要在安全上面有所改进与提升,必是曾在这个地方跌倒过。
事实上,确实如此。此前据微软官方博客报道,自 2004 年以来,微软安全响应中心(MSRC)对所有微软安全漏洞报告进行了分类,从中发现,所有微软年度补丁中约有 70% 是针对内存安全漏洞的修复。根据深入地调查,我们发现这些漏洞是由开发者无意中在其 C、C++ 代码中插入内容损坏错误引起的。
微软每年修复的 CVE 漏洞中约有 70% 是内存安全问题
在清晰地认知这一点后,微软也开始了寻找更安全的编程语言之路。
在探索伊始,微软熟知有几种语言在一定程度上可以被用来防止内存损坏漏洞,如 C#。但令人无奈的是,像 C++ 这类的编程语言在某些情况下又是必不可少的,毕竟其在运行的速度、内存和磁盘占用的空间上均有优势,除了以上,C++ 还可以预测执行。对此,两者是否可以合二为一,即是否可以运用 .NET、C# 之类的语言来保证所有内存安全,再加上 C++ 所具备的效率。
综合之下,想要满足这些条件,素来以“安全、并发、实用”为设计准则的 Rust 或是一个最佳的选择。对此,微软安全部门也认可道,Rust 是一种从根本上考虑安全性的编程语言,它像 C、C++ 一样也有一个最小的可选“运行时”,此外,它的标准库依赖于 libc,但标准库也是可选的,因此在没有操作系统的平台上运行也是可能的。
微软对安全的深入研究——Verona 语言
不过,世界上没有足够安全的操作系统,当然也不会有完美无瑕疵的编程语言。在基于 Rust 完善 Windows 系统安全之际,MSRC 也发现该语言缺乏与 C++ 的一流互操作性,以及与现有 Microsoft 工具的互操作性。
对此,据外媒 ZDNet 报道,微软研究人员 Matthew Parkinson 在近日的一次演讲中对外透露,微软正在开发类似于 Rust 的新编程语言——Verona。
和以前的目的一样,微软旨在通过 Verona 来开发低级的 Windows 组件以完善 Windows 10 的安全性问题。
“内存安全”是编码框架的术语之一,可帮助保护内存空间免受恶意软件的滥用。微软希望借助 Verona 项目推动在安全方面的工作以关闭这种攻击媒介。此前,有不少业界人士表示,微软的 Vernoa 项目计划可能只是一个无济于事的实验。
不过,在近期的演讲中,微软研究人员 Matthew Parkinson 分享了微软在 MemGC(Memory Garbage Collector)上所做的工作,以及 Verona 的最新进展。
MemGC 是指 IE 和 Edge 浏览器上的内存垃圾回收器,它解决了标准浏览器功能(称为文档对象模型(DOM))中的漏洞。Matthew Parkinson 表示:“我们为 DOM 构建了一个垃圾收集器(GC)。开发者可以通过免费使用,能在 IE 中找到利用 DOM 引擎中的内存管理方法。然后,微软引入了 MemGC,它是 DOM 的保守 GC。它针对这种非常特殊的漏洞样式,从根本上消除了它作为攻击媒介。”
除了以上,Matthew Parkinson 也一直在钻研一个可能引起其产品客户共鸣的问题:“我们将如何构建最安全的产品?如何应对遗留问题?我们不能想着仅仅丢弃已有的东西,而是思考可以在更安全的系统中构建什么。”
基于这样的信念,Parkinson 表示,“如果想要隔离,并精简遗留的部分代码,以使攻击者的利用代码无法逃逸出来,那么在语言设计该有何创新?”
这就是微软最新的“安全基础结构编程” ——Verona 语言 ,据了解,这一项目将很快“开源”。
目前,该项目得到 C# 项目经理 Mads Torgensen 和 Microsoft Research Cambridge 研究软件工程师 Juliana Franco 的支持。
对于微软而言,其当前面临的挑战是应对广泛的“应用程序范围”,如从用于桌面应用程序的 C# 到用于 Exchange 的 C 或 C#、ASP.NET、Azure 和设备驱动程序,再到内存管理和启动加载器等底层 Windows 组件,以及 Windows 内核硬件抽象层(HAL)。
Matthew Parkinson 表示:“执行内存管理确实很困难。如果有任意并发突变,那么,临时内存安全性将非常困难。”此外,Matthew Parkinson 还介绍了 Verona 的设计思路,“Verona 的所有权模型是基于对象组的,而不是像 Rust 那样基于单个对象的所有权模型。在 C ++ 中,开发者可以获得指针,并且它是基于对象的,并且几乎是每个对象。不过,这和我关于数据和语法的思考不同,我认为数据结构是对象的集合,而对象的集合则是生命周期。
“因此,通过对象的所有权级别来获得所有权,我们就可以更接近人们正在使用的抽象级别,它使我们能够构建数据结构而不会超出安全范围。”
你如何看待 Verona 语言?
那么,Verona 究竟是否会为 Windows 的安全性带来突破性的进展,我们将拭目以待。而在此同时,不少网友也纷纷感叹道:
- 一定是 Rust 本身不够好,宁愿自己重写,也不愿参与一起开发让 Rust 更好;
- 放出这消息的是 Microsoft Research ,并不是 Microsoft。就和之前为 Rust 设计 com 库的是微软安全部一样。而且研究院更多的是偏向于研究性质,指不定只是搞着实验用的;
- Rust 语法很繁琐复杂,C# 是出了名的很甜的语言,MS 肯定不能忍 Rust 这啰嗦繁琐的语法,估计要推出升级版,看好。
你怎么看呢?欢迎下方留言,分享你的看法。
参考:
https://msrc-blog.microsoft.com/2019/07/16/a-proactive-approach-to-more-secure-code/
https://www.zdnet.com/article/microsoft-were-creating-a-new-rust-based-programming-language-for-secure-coding/