Build 2019 上微軟的開源動作有點不一樣
微軟今年舉辦的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 系統也不是沒可能的事,你覺得呢?