适用于Linux的Windows子系统

**適用於 Linux 的 Windows 子系統**（英語：Windows Subsystem for Linux，簡稱 **WSL**）是一個為在 Windows 10 和 Windows Server 2019 以上能夠原生執行 Linux 二進位可執行檔（ELF 格式）的相容層。

## 概覽

WSL 提供了一個由微軟開發的 Linux 相容的核心介面（不包含 Linux 核心代碼），然後可以在其上執行 GNU 使用者空間，例如 Ubuntu，openSUSE，SUSE Linux Enterprise Server，Debian 和 Kali Linux。這樣的使用者空間可能包含 Bash shell 和命令語言，使用本機 GNU/Linux 命令列工具（sed，awk 等），程式語言直譯器（Ruby，Python 等），甚至是圖形應用程式（使用主機端的 X 視窗系統）。

## 簡介和可用性

在周年更新中引入時，只有 Ubuntu 鏡像可用。秋季創意者更新將 Linux 發行版的安裝過程移至 Microsoft 商店，並引入了 Fedora 和 SUSE 鏡像。

WSL 在版本 1607 之後的 64 位元版本的 Windows 10 與 Windows 11 中可用。它也可在 Windows Server 2019 中使用。

## 發展

微軟首次嘗試在 Windows 上實現類似 Unix 的相容性，首先是微軟 POSIX 子系統，由 Windows Services for UNIX 通過 MKS/Interix 取代，後者最終因 Windows 8.1 的發布而被棄用。Windows Subsystem for Linux 背後的技術起源於未發布的 Astoria 專案，它使一些 Android 應用程式能夠在 Windows 10 行動版上執行。它首先在 Windows 10 Insider Preview build 14316 中提供。

雖然微軟以前的專案和第三方 Cygwin 專注於基於 POSIX 標準建立自己獨特的類 Unix 環境，但 WSL 的目標是原生 Linux 相容性。WSL 不是將非原生功能包裝到 Win32 系統呼叫中，而是利用 NT 核心執行程式將 Linux 程式作為特殊的、隔離的最小行程（稱為 _「pico-processes」_ ）作為專用系統連接到核心模式 _「pico-providers」_ 。呼叫和例外處理程式不同於 vanilla NT 行程。

微軟將 WSL 視為「主要面向開發人員的工具 — 尤其是 Web 開發人員以及在開源專案上工作或使用開源專案的人員」。WSL 使用的資源少於完全虛擬化的機器，這是在 Windows 環境中執行 Linux 軟體的最直接方式，同時還允許使用者在同一組檔案上使用 Windows 應用程式和 Linux 工具。

2020 年 9 月，WSL 2 開始向 Windows 10 Version 1903/1909 和 Windows 10 May 2020（20H1/Version 2004）的使用者推播。WSL 2 支援 GUI 應用。

## 設計

### WSL 1

LXSS Manager Service 是負責與子系統互動的服務（通過_驅動程式_`lxss.sys` 和 `lxcore.sys`），以及 Bash.exe（不要與 Linux 發行版提供的 Shell 混淆）的方式啟動 Linux 行程，以及在執行期間處理 Linux 系統呼叫和二進位鎖。

特定使用者呼叫的所有 Linux 行程都進入「Linux 實例」（通常，第一個呼叫的行程是 init）。關閉所有應用程式後，將關閉實例。

WSL 1 的設計沒有硬體類比 / 虛擬化（與 coLinux 等其他專案不同），WSL 直接使用主機檔案系統（通過 `VolFS` 和 `DrvFS`）和硬體的某些部分，例如網路（Web 伺服器，用於例如，可以通過主機上組態的相同介面和 IP 位址進行存取，並且對使用需要管理權限的埠或已經被其他應用程式占用的埠共享相同的限制），這保證了互操作性。

即使從 shell 執行 sudo，某些位置（例如系統資料夾）和組態的存取 / 修改也受到限制。必須啟動具有提升權限的實例才能獲得「真正的 sudo」並允許此類存取。

WSL 1 無法運行所有 Linux 軟體（如 32 位元二進位檔案）或需要在 WSL 中未實現的特定 Linux 核心服務的軟體。由於 WSL 中沒有「真正的」Linux 核心，因此無法執行核心模組（如裝置驅動程式），但是，WSL 2 使用即時虛擬化的 Linux 核心實例。可以通過在 Windows（主機）環境（例如 VcXsrv 或 Xming）中安裝 X 視窗系統來執行一些圖形（GUI）應用程式（例如 Mozilla Firefox），但是這種模式還存在一定的問題，例如缺乏音訊支援或硬體加速（導致圖形效能不佳）。儘管已經在計劃中，但是目前還沒有實現對 OpenCL 和 CUDA 的支援。

也就是說，微軟明確指出 **WSL** 面向應用程式的開發者，而不是面向桌面環境或生產伺服器。微軟建議使用虛擬機器（Hyper-V 或 Kubernetes）和 Azure 來實現這些目的。

在效能測試中，WSL 1 通常接近原生 Linux（如 Ubuntu、Debian、Intel Clear Linux 或其他 Linux 發行版）。在某些測試中 I/O 是 WSL 的瓶頸。

### WSL 2

WSL 2 引入了體系結構中的更改。微軟選擇了通過高度優化的 Hyper-V 功能子集進行虛擬化，以便運行內核和發行版（基於核心），承諾效能相當於 WSL 1，為了 向下相容，開發人員不需要更改其已發佈發行版中的任何內容。 WSL 2 設定可以通過 _WSL 全域 設定_組態進行調整，該組態位在使用者設定檔資料夾中名為 `.wslconfig` 的 INI 檔案。

發行版本安裝在 ext4 格式的虛擬磁碟中，主機檔案系統可以通過 9P 協定協定透明地存取， 類似於 QEMU 等其他虛擬機器技術。 對於使用者，微軟承諾讀寫效能是 WSL 1 的 20 倍。 Windows 提供一個 IFS 網路重新導向程式，使用 UNC 路徑首碼 `\\wsl$` 來存取 Linux 客戶檔。

WSL 2 需要 Windows 11, 或 Windows 10 版本 2004 和更新版本 (組建 19041 和更新版本)

微軟聲稱重新設計的 WSL 2 後端在某些操作上的速度比 WSL 1 提高了 20 倍，2020 年 6 月，使用 AMD Threadripper 3970x 進行了 173 次測試的基準測試顯示，WSL 2 （20H2） 效能良好，效能僅為本機 Ubuntu 20.04.0 LTS 的 87%。這是對 WSL 1 的改進，在此比較中，WSL 1 的效能僅為本機 Ubuntu 的 70%。，WSL 2 改善了 I/O 效能，提供了接近原生的水準。
在 2020 年 5 月，用 Intel i9 10900K 進行的 69 項測試比較顯示了幾乎相同的相對效能。 在 2020 年 12 月，用 AMD Ryzen 5900X 進行的 43 項測試的基準顯示了 WSL 2（20H2）的良好效能，其效能為原生 20.04.1 LTS 的 93%。這比 WSL 1 有進步，後者在這種比較中只有 73%。

## 截圖

* *

## 參見

## 參考資料

## 外部連結

* 官方部落格
* 微軟文件上的 WSL 頁面
* GitHub 上的 WSL 頁面
* _Windows Command Line Tools For Developers_ blog （頁面存檔備份，存於網際網路檔案館）
* Brown, Pete. Fun with the Windows Subsystem for Linux. Windows Developer Blog. Microsoft. 22 July 2016 [2018-12-20]. （原始內容存檔於 2017-07-17）.