適用於Linux的Windows子系統

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

## 概覽

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

WSL2基於Hyper-V技術，運行多個帶有GNU/Linux鏡像的虛擬機，同樣可以實現WSL1的大多數功能，但擁有完整的Linux內核與對Systemd的支持。

## 簡介和可用性

在周年更新中引入時，只有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中的Firefox
- 運行於WSL中的Synaptic

## 外部連結

- 微軟文檔上的 WSL頁面
- Microsoft/WSL
- Windows Command Line Tools For Developers blog

## 基本資料

- 其他名稱：WSL
- 開發者：微軟
- 發行日期：WSL 1: 2016年8月2日、WSL 2: 2019年6月12日
- 軟體版本週期：2.3.24
- 軟體版本週期：2024年10月6日
- 原始碼庫：https://github.com/Microsoft/WSL（僅問題）
- 前任：Windows Services for UNIX
- 作業系統：Windows 10, Windows Server 2019, Windows 11
- 類型：兼容層（WSL 1）, 虛擬化（WSL 2）
- 許可協議：子系統: 專有商業軟體、Linux內核: GNU GPLv2（僅）, 具有在兼容GPL變體下或在寬鬆許可如BSD、MIT下的一些代碼