适用于Linux的Windows子系统

**适用于Linux的Windows子系统**（，简称**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是负责与子系统交互的服务（通过*[[驱动程序]]*和），以及Bash.exe（不要与Linux发行版提供的Shell混淆）的方式启动Linux进程，以及在执行期间处理Linux系统调用和二进制锁。

特定用户调用的所有Linux进程都进入“Linux实例”（通常，第一个调用的进程是init）。关闭所有应用程序后，将关闭实例。

WSL 1的設計沒有硬體模擬/虛擬化（与coLinux等其他项目不同），WSL直接使用主机文件系统（通过和）和硬件的某些部分，例如网络（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%。

## 截图

File:WSL gui Firefox.png|运行于WSL中的Firefox
File:WSL gui Synaptic.png|运行于WSL中的Synaptic


## 参见

* Azure Sphere
* andLinux
* Cooperative Linux
* Cygwin
* FreeBSD的Linux兼容层
* 万圣节文件
* SmartOS
* Interix
* Wine
* Xenix

## 参考资料

## 外部链接
* 
* 微软文档上的WSL页面
* 
* ''Windows Command Line Tools For Developers'' blog 
*