员工揭秘Windows的Linux子系统研发全过程

2019-08-20 21:24 来源:未知

  【CSDN 编者按】微软在开源道路上不断前进,甚至在Windows10中开放名为 WSL 的 Linux 子系统,让开发者可以直观操作 Linux。本文作者作为 WSL团队的一员,将详细给我们讲述开发 Windows 的 Linux子系统的那些事儿。

  2016年8月,我从弗吉尼亚大学计算机科学与技术专业毕业后加入微软,在微软的整个职业生涯都在为Linux开发工具。其实我上大学时几乎只使用Linux操作系统,大部分编程都是用C++编写的。

  当时我的学习经历似乎不太适合微软,但赶上微软正在做企业改革,所有操作系统都很重要,包括Linux。

  到微软的第一份工作是加入Linux的SQL数据库开发团队,该团队特别邀请我把以往的Linux经验发挥出来。我刚刚毕业,一听到自己的开发经验能为团队带来价值时,我真感到受宠若惊。

  几年前,微软想在Linux上开发SQL Server只是一个玩笑,然而到2016年,这个想法却变成了现实。在他们发布第一个版本后不久,我就加入了这个团队,并致力于改进用于SQL Server的管理工具——特别是管理Linux服务器和应用程序。要在Linux上正常运行SQL Server,需要以Linux操作系统的工作方式来设计命令行工具。

  在微软的第一年我学到了很多,包括项目管理的流程和方法,如何将技术实践和商业思维结合起来。

  当时Channel9一经发布就迅速走红,淹没了Build网站上的其他许多报道。《华尔街日报》记者凯文·加洛(Kevin Gallo)对Build大会做了一个简短的视频介绍,虽然只占用了整个主题演讲的两分钟,但观众和媒体都非常激动。Channel9团队曾一度担心WSL视频的巨大点击量是不是DDoS攻击。微软在Windows系统内运行Ubuntu引起了巨大的轰动。

  Windows Console团队是第一个确定客户对WSL有需求的团队。当他们深入客户调研时,一次又一次地听到人们希望在Windows上有类似Bash的东西。最终团队意识到:既然可以让Bash本身在Windows上运行,为什么还要开发类似Bash的东西呢?

  其实为Linux创建Windows子系统并不容易做到。团队需要对Windows内核有深入的了解,还要研究一项微软名为Pico process的技术。恰好有趣的是,Pico process也是在Linux上实现SQL Server的技术。简单的说,WSL使Linux编译的二进制文件在Windows NT内核上运行成为可能,而无需重新编译应用程序或使用虚拟机。

  Ubuntu是WSL中第一个可用的Linux版本。开始我们联系了Canonical公司的开发人员,看看他们是否愿意提供帮助。他们对这个WSL想法很有热情,后来Ubuntu可以在Windows商店(Windows Store)中使用。在Windows商店中存在多种Linux版本的应用(至少有六种),是不是觉得很有趣,你见过多少自家的应用商店有其他操作系统?

  我们编写的代码是兼容Linux的内核系统调用(syscall),将Linux进程与底层Windows内核连接起来。Linux中大约有340个系统调用,问题是先实现哪个系统调用?与所有操作系统版本一样,新的系统调用会与新的操作系统版本一起添加,但是为了保持向后兼容性,不会删除旧的调用。当初涌现了一波syscall浪潮,WSL团队也开始深入理解syscall用户需要什么。

  要实现什么样的syscalls,首先要了解哪些人会使用它。Build公告的主要目的是希望人们使用WSL并提供反馈。任何人都可以通过Windows内部程序获得WSL。也许你认为只有Windows爱好者才会对内部程序感兴趣,但现在有超过1000万的订阅者,他们对各种各样的东西都感兴趣,比如游戏、蓝牙和WSL。

  对Windows中运行Bash感兴趣的还有Web开发人员,他们试图构建运行在Linux服务器上的Web应用程序,可采用一系列Bash命令。此外,如果您查找构建Web应用程序的帮助,比如Stack Overflow,其大多数示例代码只运行在Linux上——而你正在Windows机器上进行开发,这让人感到很无奈。对于Web开发人员来说,只好迁移到Mac和macOS上,在那里运行代码。

  在WSL进入Windows的初期,一位积极的WSL用户设法让XEyes作为GUI应用程序运行在WSL和X11上。XEyes所做的就是在屏幕上画一对卡通眼睛,跟着鼠标指针转。在成功演示时,所有的社交媒体都沸腾了!

  我们想了很多收集用户反馈的方法。曾为WSL建立了一个UserVoice站点,上面已经收集了数百个想法和数千次投票。考虑到WSL的首批受众是Web开发人员,所以觉得GitHub很有作用。但是WSL并不是一个开源项目——在开源的GitHub上放置一个非开源项目似乎很奇怪。最后我们决定在GitHub上创建一个专门反馈和讨论相关问题的论坛,至今我们已经收到了关于WSL的数千个问题。

  在 WSL GitHub repo 上会提交成千上万的问题,而WSL团队会审查每一个问题,通过分析和评估,然后决定要做什么。如果需要编写新代码来实现某个特性或修复某个问题,那么会将任务添加到WSL项目计划中,开发周期可以短至几周。

  这样,人们所希望的WSL功能或遇到的问题通过UserVoice或GitHub得到了有效快速的解决,构建WSL社群也是整个项目创建过程的关键部分。

  当我作为WSL的项目经理时,我的目标是让WSL超越beta版。人们抱怨最多的是兼容性和性能。在我看来这些问题提得很好,这恰恰说明他们在认真使用我们的产品,因为在产品初期我们可能只关心系统一些大的方面。所以,为了让人们用WSL做得更多、更快,我们还有很多工作要做。

  随着WSL功能的扩展和完善,我们将WSL带向其他开发系统及其开发人员——而不仅局限于Microsoft生态系统的开发。当我们参加PyCon和OSCON这样的活动时,那里的开发人员看到微软员工时都很惊讶。当我们告诉他们在微软开发工具上运行Linux时,他们都表示怀疑。然后我当场演示了SQL Server、WSL和Visual Studio代码。

  为了打消他们的疑虑,我让他们自己试一试。当这些开发人员开始运行他们自己的命令、脚本和代码时,总是反应激动:“等等,这实际上是Linux。你是怎么做到的?我怎么会不知道呢? 这很酷。”

  针对有关WSL兼容性和性能的抱怨,我们已经在一个新版本中解决了这个问题——WSL 2。它在Windows中提供了Linux内核并将性能提升了20x。今天,WSL已经经过了beta测试并升级到了版本2。你可以在公告博客上了解更多。

  我还与微软的其他团队合作,希望WSL能与其他产品很好的结合。例如Visual Studio Code,它是Java和Node.js中最流行的文本编辑器。使用Visual Studio代码的开发人员可以从WSL中获益良多。主要的优势在于使运行在WSL中的Node.js代码调试变得更容易。开发人员可以在运行WSL的Windows计算机上编写Linux版本的Node.js并进行调试。

  当我们为Node.js提供这样的功能时,C++、Python和其他语言也有类似的需求。我开始对这种集成非常着迷,这为Linux开发带来了全新的体验。我现在着手c++代码的Visual Studio远程开发,我们会在今年的PyCon上线WSL的c++扩展功能。

  尽管我在微软工作的时间不长,但我为Linux开发工具感到兴奋——从数据库到操作系统再到 IDES。我愿意继续传播对Linux的热爱,并创建让全世界的开发人员都感到满意的工具。

TAG标签: Windows NT
版权声明:转载须经版权人书面授权并注明来源