WSL 1 與 WSL 2
新安裝預設是 WSL 2。除非有明確理由,否則不要改回 WSL 1。
架構差在哪
WSL 1 把 Linux 系統呼叫翻譯成 Windows NT 核心能懂的呼叫。沒有完整 Linux kernel,相容性有缺口(當時 Docker 就不能在裡面跑)。
WSL 2 在輕量、由系統代管的虛擬機器裡跑 Microsoft 維護的 Linux kernel。開機仍然很快、記憶體佔用比傳統 VM 小,但系統呼叫相容性是完整的。發行版在這台代管 VM 裡以隔離容器的方式執行。
對使用者來說,進 Ubuntu、打指令的畫面幾乎一樣;差在效能、相容性,以及跨 Windows/Linux 檔案系統時的速度。
功能對照
| 項目 | WSL 1 | WSL 2 |
|---|---|---|
| Windows 與 Linux 整合 | 有 | 有 |
| 開機快、資源比傳統 VM 小 | 有 | 有 |
| 真實 Linux kernel、完整系統呼叫 | 無 | 有 |
| systemd | 無 | 有(需較新的 Store 版 WSL) |
| Docker、完整相容的 Linux 工具 | 受限 | 可以 |
存取 /mnt/c 等 Windows 檔案 |
較快 | 較慢 |
| 與舊版 VirtualBox 並存 | 較容易 | 可能衝突 |
官方實測:解壓縮 tar 有機會快到約 20 倍;git clone、npm install、cmake 常見約 2~5 倍。前提是檔案放在 Linux 檔案系統。
什麼時候才考慮 WSL 1
- 專案必須放在 Windows 磁碟(
C:\),且 Linux 工具會大量讀寫那些檔案 - 同一批檔案要同時給 Windows 與 Linux 工具編譯
- 需要序列埠等 WSL 2 仍不完整的硬體路徑
專案能放在 Linux 家目錄、再用 VS Code WSL 擴充功能編輯時,WSL 2 幾乎都比較好。USB 裝置可用 usbipd-win 接到 WSL 2,不再是改回 WSL 1 的理由。
查版本與切換
wsl -l -v 會列出每個發行版目前是 1 還是 2。切換架構要轉換磁碟映像,大發行版請先 匯出備份。
官方示範
Craig Loewen 在 Tabs vs Spaces 示範 WSL 2 的 I/O 速度、系統呼叫相容性、VS Code 與 Docker。片長約 14 分鐘。
更完整的對照表見 Comparing WSL versions。接著看 快速安裝。