2016年8月,我从弗吉尼亚大学计算机科学与技术专业毕业后加入微软,在微软的整个职业生涯都在为Linux开发工具。其实我上大学时几乎只使用Linux操做系统,大部分编程都是用C++编写的。当时个人学习经历彷佛不太适合微软,但遇上微软正在作企业改革,全部操做系统都很重要,包括Linux。到微软的第一份工做是加入Linux的SQL数据库开发团队,该团队特别邀请我把以往的Linux经验发挥出来。我刚刚毕业,一听到本身的开发经验能为团队带来价值时,我真感到受宠若惊。几年前,微软想在Linux上开发SQL Server只是一个玩笑,然而到2016年,这个想法却变成了现实。在他们发布第一个版本后不久,我就加入了这个团队,并致力于改进用于SQL Server的管理工具——特别是管理Linux服务器和应用程序。要在Linux上正常运行SQL Server,须要以Linux操做系统的工做方式来设计命令行工具。我有幸为Linux的SQL Server设计第一个版本的GUI工具,刚开始采用了Visual Studio代码(如今叫Azure Data Studio代码),它不受操做系统的限制,可用于全部类型的SQL Server开发。c++
在微软的第一年我学到了不少,包括项目管理的流程和方法,如何将技术实践和商业思惟结合起来。数据库
2017年8月,我加入了Windows 的Linux子系统(Windows Subsystem for Linux,简称WSL)研发团队,并担任项目经理。我第一次据说WSL是在2016年的微软Build大会上,当时它被宣布为“Bash on Ubuntu on Windows”。编程
当时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,它是JavaScript和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的热爱,并建立让全世界的开发人员都感到满意的工具。