微软今年举办的 Build 开发者大会可谓是抢足风头,大会第一天就放了不少大招:宣布新的命令行终端 Windows Terminal、Windows 10 的 Linux 子系统 WSL 2 将运行真正的 Linux 内核、跳过 .NET 4 宣布 .NET 5 的计划、宣布 Web 版本的 VS Code Visual Studio Online)。
这种积极拥抱开源的态度对微软而言不是什么新鲜事,毕竟他们家的两个重量级项目 —— Visual Studio Code 和 .NET Runtime 早已开源,并按照规范的开源、社区驱动的方式来运作。
但微软这次在 Build 2019 上的开源举动有点不一样。
我们都知道,微软在 Windows 10 一周年更新的版本中引入了名为 Windows Subsystem for Linux WSL) 的 Linux 子系统,不过 WSL 只是 Linux 兼容层,而非真正的 Linux 内核,它是由微软自己开发的内核组件,提供了与 Linux 内核相同的 API,本质上是将 Linux API 翻译到 Windows NT kernel API。
由于 WSL 使用的是自研的内核组件,所以它天生就有不少缺陷,例如无法使用 Linux 驱动(尤其是文件系统驱动),这使得它的文件系统性能只有真正内核的二十分之一。另外,WSL 提供的 API 集也比较陈旧,甚至部分 API 都没有实现,还有的 API 即便实现了也只是部分实现。
这里有人可能会问,反正 Linux 内核是开源的,既然微软自己做得不好,为什么不直接把现成的拿过来用呢?微软当然不傻,之所以选择自研正是为了避免使用 Linux 内核的代码,因为 Linux 内核使用的 GPLv2 许可证具有“传染性”,这可能会迫使微软开源 WSL,甚至 Windows 系统的部分代码。虽然微软爱开源,但也怕爱过了头。
所以刚被公布的 2 代 WSL 才会显得有点不一样。微软表示 WSL 2 会在轻量级的虚拟机里运行真正的 Linux 内核。通过运行完整的内核,WSL 2 不仅大幅度提升了文件系统性能,也提供了完整的系统调用兼容性。
更重要的是,WSL 2 这次不再“畏惧” Linux 内核所采用的 GPLv2 许可证,因为微软宣布它将根据许可证要求完全开源 WSL 2 的内核补丁和修改。
基于 GPL 许可证的项目构成了 Windows 系统的一部分,这意味着它骨子里已经拥有开源的“基因”,身上某处流淌的是开源的“血液”。
除了运行真正 Linux 内核的 WSL 2,新发布的命令行终端 Windows Terminal 也是这次大会上的那个“不一样”。
相信很多人都知道 Windows 的命令行工具cmd.exe)依赖于一个名为 conhost.exe 的程序,它在系统中被称为“控制台窗口主机”,是命令行程序的宿主进程。
conhost.exe 实现了 Windows 命令行工具的基础架构,同时提供 Windows Console API、输入引擎、渲染引擎和用户配置信息,在系统中是一个十分重要且核心的程序。
作为 Windows Terminal 项目的一部分,微软采用 MIT 许可证将 conhost.exe 一同开源出去。这绝对称得上是史无前例的操作,虽然微软此前也曾将 Windows 系统里面的项目进行开源,但都是一些不太重要的工具,如计算器,或是其他已不再更新的程序。
这次将 conhost.exe 开源,不但是微软首次开源核心的 Windows 系统代码,更重要的是,如果 Windows Terminal 稳定后并被集成到 Windows 系统中,那么它将是首个以开源方式进行开发的 Windows 核心组件。
上面的两个“不一样”可以让我们深刻感受到微软的转变,从它对待开源的态度,对开源的贡献,不难看出微软把开源看得十分重要 —— 不再仅仅是将一个个独立的项目开源,而是将开源融入到 Windows 系统乃至微软的方方面面,并且能够持续发展。
一直以来,大家都不认为、更不相信微软会开源 Windows 系统,但按现在的趋势,有生之年见证微软开源 Windows 系统也不是没可能的事,你觉得呢?