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的熱愛,並建立讓全世界的開發人員都感到滿意的工具。