適用於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**
Synaptic package manager running on WSL
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%。

**截圖**

**參見**
 Azure Sphere- andLinux- Cooperative Linux- Cygwin- FreeBSD的Linux兼容層- 萬聖節文件- SmartOS- Interix- Wine- Xenix

**參考資料**

**外部鏈接**
 微軟文檔上的 WSL頁面- Microsoft/WSL-  Windows Command Line Tools For Developers blog date=20190510041504 - dead-url=no