比較 WSL 版本

深入瞭解不同的 WSL 版本,包括為什麼 WSL 2 現在是預設版本,以及可能保證將安裝的 Linux 發行版本切換至舊版 WSL 1 架構的特定案例或例外狀況。

比較 WSL 1 和 WSL 2

本指南將比較 WSL 1 和 WSL 2,包括使用 WSL 1 而非 WSL 2 的例外狀況。 WSL 1 和 WSL 2 之間的主要差異包括:使用受管理 VM 內的實際 Linux 核心、支援完整的系統呼叫相容性,以及整個 Linux 和 Windows 作業系統的效能。 WSL 2 是安裝 Linux 發行版本時目前的預設版本,並使用最新最強大的虛擬化技術,在輕量型公用程式虛擬機器 (VM) 內執行 Linux 核心。 WSL2 會以受控 VM 內的隔離容器的形式執行 Linux 散發套件。 如果您的散發套件目前正在執行 WSL 1,而且您想要更新為 WSL 2,請參閱從 WSL 1 更新至 WSL 2

比較功能

功能 WSL 1 WSL 2
Windows 和 Linux 之間的整合
快速開機時間
相較於傳統虛擬機器,其資源使用量較少
以最新版的 VMware 和 VirtualBox 執行
受控 VM
完整的 Linux 核心
完整的系統呼叫相容性
OS 檔案系統之間的效能
systemd 支援
IPv6 支援

如上面的比較表所示,WSL 2 架構在許多方面都優於 WSL 1,但跨 OS 檔案系統的效能除外,這可藉由將專案檔儲存在與執行以處理專案之工具相同的作業系統上來解決。

WSL 2 僅適用於 Windows 11 或 Windows 10 1903 版 (組建 18362 或更新版本)。 若要檢查您的 Windows 版本,請選取 [Windows 標誌鍵 + R]並輸入 winver,然後選取 [確定]。 (或在 Windows 命令提示字元中輸入 ver 命令)。 您可能需要 更新至最新的 Windows 版本。 若組建低於 14393,則完全不支援 WSL。

如需最新 WSL 2 更新的詳細資訊,請參閱 Windows 命令列部落格 ,包括 Systemd 支援現已在 WSL WSL 2023 年 9 月更新 中取得,以取得 IPv6 支援的詳細資訊。

注意

WSL 2 會與 VMware 15.5.5+ 搭配 運作,雖然 VirtualBox 6+ 指出有 WSL 支援,但仍有重大挑戰,因此不支援它。 若要深入瞭解,請造訪我們的常見問題集

WSL 2 的新功能

WSL 2 是基礎架構的重大檢修,並使用虛擬化技術和 Linux 核心來啟用新功能。 此更新的主要目標是增加檔案系統效能,以及新增完整的系統呼叫相容性。

WSL 2 架構

傳統的 VM 體驗可能會很慢而無法開機、隔離的、耗用大量資源,而且需要您花時間管理。 WSL 2 沒有這些屬性。

WSL 2 可提供 WSL 1 的優點,包括 Windows 和 Linux 之間的無縫整合、快速開機時間、低資源使用量,以及不需要進行 VM 設定或管理。 雖然 WSL 2 會使用 VM,但會在幕後進行管理及執行,讓您擁有與 WSL 1 相同的使用者體驗。

完整的 Linux 核心

WSL 2 中的 Linux 核心是 Microsoft 根據可在 kernel.org 取得的來源,從最新的穩定分支所建立的。此核心已特別針對 WSL 2 進行微調,並針對大小和效能進行最佳化,可在 Windows 上提供絕佳的 Linux 體驗。 該核心將由 Windows 更新提供服務,這表示您將會獲得最新的安全性修正程式和核心改良功能,而且不需要自行管理。

WSL 2 Linux 核心是開放原始碼。 如果您想要深入了解,請參閱部落格文章:以 Windows 搭載 Linux 核心,此文章是由其開發小組所撰寫。

深入瞭解 Windows 子系統 Linux 版核心的版本資訊

增加檔案 IO 效能

處理大量檔案的作業 (例如 git 複製、npm 安裝、apt 更新、apt 升級等等) 在 WSL 2 上明顯速度都更快。

實際增加的速度將取決於您正在執行的應用程式,以及其與檔案系統的互動方式。 相較於 WSL 1,WSL 2 的初始版本在解壓縮 zip 壓縮的 tarball 時,執行速度最多可快 20 倍,而在各種專案上使用 git 複製、npm 安裝和 cmake 時,大約可快 2 至 5 倍。

完整的系統呼叫相容性

Linux 二進位檔會使用系統呼叫來執行功能,例如存取檔案、要求記憶體、建立處理程序等等。 WSL 1 使用 WSL 小組所建置的轉譯層,而 WSL 2 則包含其本身的 Linux 核心,並具有完整系統呼叫相容性。 這些權益包括:

  • 您可以在 WSL 內執行一套全新的應用程式,例如 Docker 等。

  • Linux 核心的任何更新都會立即準備好供您使用。 (您不需要等候 WSL 小組執行更新和新增變更)。

使用 WSL 1 而非 WSL 2 的例外狀況

我們建議您使用 WSL 2,因為其提供更快的效能和 100% 的系統呼叫相容性。 不過,在某些特定案例中,使用 WSL 1 是較好的選擇。 如果是下列情況,請考慮使用 WSL 1:

  • 您的專案檔案必須儲存在 Windows 檔案系統中。 WSL 1 可讓您更快地存取從 Windows 掛接的檔案。
    • 如果您將使用 WSL Linux 發行版本來存取 Windows 檔案系統上的專案檔,而且這些檔案無法儲存在 Linux 檔案系統上,那麼使用 WSL 1,將可以在 OS 檔案系統中達到更快的效能。
  • 需要在相同檔案上同時使用 Windows 和 Linux 工具進行跨平台編譯的專案。
    • 在 WSL 1 中,Windows 和 Linux 作業系統上的檔案效能會比在 WSL 2 中還要快,因此,如果您使用 Windows 應用程式來存取 Linux 檔案,您目前可透過 WSL 1 來達到更快的效能。
  • 您的專案需要存取序列埠或 USB 裝置。 不過,現在可透過 USBIPD-WIN 專案在 WSL 2 上支援 USB 裝置。 如需設定步驟,請參閱連線 USB 裝置
  • WSL 2 不包含存取序列埠的支援。 深入瞭解關於序列支援的常見問題集WSL GitHub 存放庫問題
  • 您有嚴格的記憶體需求
    • WSL 2 的記憶體使用量會在使用過程中上升和下降。 當處理程序釋放記憶體時,系統會自動將記憶體釋放回 Windows。 不過,從現在起,WSL 2 不會將記憶體中的快取頁面釋放回 Windows,直到 WSL 執行個體關閉為止。 如果您長時間執行 WSL 工作階段或存取非常大量的檔案,此快取可能會佔用 Windows 上的記憶體。 我們正透過 WSL GitHub 儲存庫問題 4166 追蹤改善此體驗的工作。
  • 對於使用 VirtualBox 的使用者,請務必使用最新版的 VirtualBox 和 WSL 2。 請參閱相關的常見問題
  • 如果您依賴 Linux 發行版本在與主機電腦相同的網路中擁有 IP 位址,您可能需要設定因應措施以執行 WSL 2。 WSL 2 以 hyper-v 虛擬機器的形式執行。 這是從 WSL 1 中使用的橋接網路介面卡變更而來,這表示 WSL 2 會針對其虛擬網路使用網路位址轉譯 (NAT) 服務,而不是將其橋接至主機網路介面卡 (NIC),因此重新開機時會變更唯一的 IP 位址。 若要深入瞭解將 WSL 2 服務的 TCP 埠轉送至主機 OS 的問題和因應措施,請參閱 WSL GitHub 存放庫問題 4150,NIC 橋接器模式 (TCP 因應措施)

注意

請考慮嘗試 VS Code 遠端 WSL 擴充功能,讓您將專案檔儲存在 Linux 檔案系統上並使用 Linux 命令列工具,以及在 Windows 上使用 VS Code 來撰寫、編輯、偵錯及執行網際網路瀏覽器中的專案,讓您的效能不會因為在 Linux 和 Windows 檔案系統上作業而變慢。 深入了解

Microsoft Store 中的 WSL

WSL 已將更新功能從 Windows OS 映像提升到套件中,該套件可透過 Microsoft Store 取得。 這表示一旦更新可供使用,便能更快完成更新和服務,而不需要等候 Windows 作業系統更新。

WSL 最初包含在 Windows 作業系統中,作為需要啟用才能安裝 Linux 發行版本的選用元件。 Store 中的 WSL 提供相同的使用者體驗,且為相同的產品,但會做為市集套件接收更新與服務,而不是完整的 OS 更新。 從 Windows 19044 版或更新版本開始,執行 wsl.exe --install 命令將會從 Microsoft Store 安裝 WSL 服務更新。 (請參閱宣佈此更新的部落格文章)。 如果您正在使用 WSL,您可以執行 wsl.exe --update 進行更新,以確保您從 Store 接收最新的 WSL 功能和服務。