我們用Windows官方跑了跑Linux GUI應用,不愧是“膠水操作系統”
本文經AI新媒體量子位(公眾號ID:QbitAI)授權轉載,轉載請聯系出處。
現在,Windows不僅是最好的Linux發行版,還是最好的Linux桌面了。
怎么回事?
原來是Windows官方的Linux子系統(WSL),終于支持Linux GUI了!

也就是說,你現在可以直接在Windows系統中運行喜歡的GUI編輯器&工具,來構建和測試Linux應用程序。

所以在“咕咕咕”一年后,微軟終于實現了去年Build開發者大會上立下的flag:
- 在Windows里運行Linux的IDE開發Linux程序
- 在Windows里運行只支持Linux的GUI程序,或者在Linux環境測試你的程序
- 支持GPU 3D加速
……
那么,實際上手體驗后,效果究竟如何呢?我們幫你測試了一下。
使用體驗
要使用WSLg,首先要加入Windows預覽體驗計劃,并選擇Dev渠道。

接下來將系統升級到最新預覽版。

如果已經安裝過WSL直接運行“wsl —update”就可以了。如果沒有安裝過,運行“wsl —install”就會默認安裝最新帶WSLg的版本。
△不指定發行版的話默認安裝Ubuntu
下載好之后需要重啟,重啟后就會自動安裝了。

在Linux子系統里裝了幾個基礎程序后回到Windows一看,好家伙,直接出現在開始菜單里了。
△但是圖標怎么都是小企鵝?
隨便打開一個Gnome文件管理器試試。

拖動窗口和拖拽選取的時候還是能明顯感覺到有一點掉幀(Surface Book 2)。
接下來安裝VS Code的WSL插件。

在WSL里裝個PyQt,寫個最簡單的demo,成功運行,跨平臺調試以后就方便了。

電腦配置好的話也可以在WSL里安裝Linux環境的開發工具。已經有人試過Pycharm的社區版是可以運行的。

調試的時候如果出現錯誤,安裝一些依賴就行。
- sudo apt-get install build-essential autoconf libtool
“最棒的Linux桌面”
這個名為WSLg的功能,目前相關代碼已經開源,geek們又有的玩了。
具體到顯示服務上,WSLg同時支持X11和Wayland兩種協議,能通過微軟內置的遠程桌面進行連接。
據微軟表示,相比之前的第三方實現,WSLg更加穩定方便。(畢竟是官方欽定)
WSLg基本上是以Wayland為基礎開發的一個Linux桌面,并通過托管XWayland服務器,來支持X11應用程序。
微軟選擇了Weston,來作為WSLg的核心,即Wayland合成器的參考實現,包括一個重度擴展的RDP后端、一個RAIL/VAIL shell和一個X Window管理器。
換而言之,如果一個Linux程序能在Linux的Weston合成器中正常工作,那它也能在WSLg中正常工作。
如下圖,是WSLg的整體結構。

這一架構的部分技術細節如下:
首先,是重度擴展RDP后端實現的功能。
例如,遠程傳輸能在單個窗口顯示,而非整個桌面。開發者采用RDP RAIL技術,將遠程Linux應用程序集成到本地桌面上;同時,采用VAIL技術進行傳輸,在主機和客戶端之間共享內存。

又或者,讓Linux應用程序能在Windows桌面上實現縮放,以支持多顯示器配置,同時支持單個顯示器的DPI(圖像輸出分辨率)縮放。
值得一提的是,這次還增加了剪貼板功能,能在Linux和Windows應用程序之間直接復制文本、html和位圖數據,比虛擬機更方便。當然,目前還不支持拖放操作。
然后,這次還增加了對音頻輸入和輸出的支持。

開發者編寫了小型插件,用于在PulseAudio和RDP后端之間傳輸音頻數據,讓音頻流通過RDP傳輸集成到本地或遠程RDP客戶端。
此外,還有后臺 (用于啟動、暫停Weston核心,以及建立到主機的RDP連接,并在傳輸中止時重啟)、以及應用程序管理插件 (卸載、安裝Linux應用)等功能。

不過,目前的“預覽版”WSLg,仍然采用服務器端來移動和調整窗口大小,導致窗口移動和調整不像在本地操作一樣流暢。
軟件以外,WSLg還支持OpenGL應用程序的加速,可以運行更復雜的3D應用程序。
微軟員工Steve Pronost做了一個簡單的性能測試,獨立顯卡和核顯加速效果都很明顯。

而在今年早些時候,微軟還在WSL中加入了機器學習的API DirectML。
加上現在GPU和Linux GUI應用程序也都已經支持,在WSL2上能直接運行英偉達CUDA加速功能,可以加速cuDNN、cuBLAS、TensorRT等CUDA-X庫。
這意味著開發者能直接在WSL上訓練神經網絡,不必再單獨安裝一個Linux系統了。

WSLg的開發人員表示,他們會繼續完善這個項目,改進用戶體驗。
套娃開始
現在Windows可以運行Linux程序了,Linux也早就能運行Windows程序了。
腦洞大的網友想到這已經坐不住了:如果在WSL下運行Wine,是不是等于套娃了一個Windows?
先來一個簡單的,在WSLg里的Linux下跑一個Wine下的IE。

注意看時間,8分鐘以后,這事就收不住了:WSLg下Linux的Chrome里跑一個JavaScript寫的Windows3.1。

另外有消息稱,微軟在WSL的基礎上正在開發安卓子系統。
沒想到Windows成了一個“膠水操作系統”。