時間:2019-08-12 來源:互聯網 瀏覽量:
微軟在開源道路上不斷前進,甚至在Windows10中開放名為 WSL 的 Linux 子係統,讓開發者可以直觀操作 Linux。本文作者作為 WSL團隊的一員,將詳細給我們講述開發 Windows 的 Linux子係統的那些事兒。
作者 | Tara Raj
譯者 | 風車雲馬,責編 | 伍杏玲
以下為譯文:
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開發。
在微軟的第一年我學到了很多,包括項目管理的流程和方法,如何將技術實踐和商業思維結合起來。
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,它是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的熱愛,並創建讓全世界的開發人員都感到滿意的工具。
原文:https://medium.com/microsoft-open-source-stories/when-linux-came-to-windows-204cf9abb3d6