Windows Subsystem for Linux (WSL) とは、LinuxのプログラムをWindows 10/11およびWindows Server上で実行するための仕組みである。マイクロソフトが提供し、最初のバージョンであるWSL1のベータ版が2016年8月に、正式版が2017年10月に公開された。2019年2月には次バージョンであるWSL2が公開された。

特徴 
従来からWindows上でUnix/Linuxプログラムを実行する方法として仮想機械（例：Hyper-V）や互換レイヤー（例：Cygwin）があった。実際に最初のバージョンであるWSL1はLinuxシステムコールをWindowsシステムコールへ変換しており、後者の互換レイヤーに近い。また、WSL2はLinuxカーネルそのものをHyper-Vで実行するため前者の仮想機械に近い。

この意味で、WSLの特徴はマイクロソフト自身がWindows OSの一部として公式に提供している事である。また、CygwinとWSL1を比較した場合、前者がUNIXのソフトをWindows向けに再コンパイルし、EXEフォーマットの実行ファイルを利用するのに対して、後者はLinuxの実行ファイル形式であるELFをそのまま利用するという違いもある。

Windows 10 MobileでのAndroidアプリ実行を目指したプロジェクトであるProject Astoria（リリースされなかった）を発祥とする。

マイクロソフトはWSLを「主として開発者、特にWeb開発者やオープンソースプロジェクトを利用する開発者のためのツール」としている。

WSL1 
マイクロソフトとカノニカルの提携により、Windows 10 version 1607 (Anniversary Update) のベータ版で、Ubuntu 14.04 (Trusty Tahr) をインストールし、そのプログラムをWSL上で実行することが可能になった。

WSL1はLinuxシステムコールとWindowsシステムコールを変換するレイヤーとUbuntuのプログラムを提供する。これはBashシェルやLinuxコマンドラインツール（例：sed、awkなどのCoreutils）やインタプリタ（例：Ruby、Pythonなど）を含む。

Linuxカーネルそのものを利用しないのでプログラムの互換性は仮想マシンの方が優れるが、WSLはより少ないリソースしか利用しない利点がある。逆説的に、WSLは全てのLinuxソフトウェアを動かせるわけではなく、WSLが提供しないLinuxカーネルサービスを必要とするものは実行不可能である。

グラフィカルユーザインタフェースを使用するアプリケーションは、Windows上にXサーバ（Xming, VcXsrv Windows X Serverなど）をインストールする事で利用可能である。

Windows 10 version 1607 (Anniversary Update) と version 1703 (Creators Update) でベータ版を、version 1709 (Fall Creators Update) から正式版を利用できる。ただし Windows 10 SやWindows 10 IoT Coreを除く。Windows 10 Enterprise 2016 LTSBはリリース当時WSLがベータ版だったため未提供である。Windows Serverでは、Windows 10 version 1607とほぼ同時にリリースされたWindows Server 2016には搭載されていなかったが、2017年8月8日にリリースされた Insider Preview Build 16237 から利用可能になり、Windows Server, version 1709 にて正式搭載された。

Windows 10 version 1703までのベータ版では、Windows 10の開発者モードを有効化しなければならない制限があった。2017年10月に公開されたWindows 10 version 1709では、当制限が撤廃された正式版が提供されている。

WSL2 
2019年6月、従来のWSL1とは異なる仕組みのWSL2が発表され、Windows 10 May 2020 Update（バージョン 2004）で正式サポートとなった。WSL1と並行してサポートされる。

WSL1との違いは以下のとおりである。
 本物のLinuxカーネルを使用する。
 Linuxカーネルを仮想マシン上で動作させる。
 Linux側のファイルシステムはNTFS上のディレクトリではなくディスクイメージファイルに格納する。
 ホストとなるWindowsとは別のIPアドレスを使用する。
本物のLinuxカーネルを使用することで互換性が向上した。また、WindowsのI/Oスタックをバイパスする事でディスクI/O性能が向上した。デメリットとして起動に数秒を要することやメモリー・フットプリントの悪化があげられる。

経緯 
2016年3月30日（米国時間）に開催されたマイクロソフトのBuild 2016カンファレンスで発表された。

2016年4月6日にリリースされたWindows 10 Insider Preview ビルド 14316において最初に公開された。

2016年8月2日（日本時間8月3日）に公開されたWindows 10の半期チャンネルのアップデートである Windows 10, version 1607 (Anniversary Update) によってベータ版の提供が開始された。

2017年8月8日、Windows ServerのInsider Preview Build 16237からWindows Serverでも利用可能になった。

2017年10月17日（日本時間10月18日）に公開されたWindows 10の半期チャンネルのアップデートである Windows 10, version 1709 および Windows Server, version 1709 において正式版となった。Windows 10の開発者モードを有効にしなくても利用可能となった。

2019年5月6日（米国時間）に開催されたマイクロソフトのBuild 2019カンファレンスで仮想マシンベースの新しいWSL、WSL 2を発表。

2019年6月12日（日本時間6月13日）WSL 2が利用可能な最初のWindows 10 Insider Preview、ビルド18917が公開される。

対応ディストリビューション 
ベータ版ではUbuntuのみサポートされていたが、正式版となったWindows 10 Fall Creators Updateから各種ディストリビューションが対応された。Microsoftストアからそれぞれインストールでき、システムも独立しているため併用可能である。WSLのインフラストラクチャとツールのサポートはマイクロソフトが、ディストリビューション内部のサポートはディストリビューションの配布元が、それぞれ提供している。

WSL提供開始当初のWindows 10 version 1607 (Anniversary Update) のUbuntuバージョンは14.04であったが、2017年4月11日に公開されたversion 1703 (Creators Update) では、16.04 (Xenial Xerus) に変更された。2018年7月時点でUbuntu 16.04 LTSと18.04 LTSが、2023年5月現在、18.04 LTS、20.04 LTS、22.04 LTSがCanonicalから配布されている。その他提供されているディストリビューションは以下の通りである：

 Ubuntu
 openSUSE Leap 42
 SUSE Linux Enterprise Server

 Kali Linux
 Debian GNU/Linux
 Pengwin
 Whitewater Foundry, Ltd. Co.によるDebianベースのWSL専用ディストリビューション
 Pengwin Enterprise
 Whitewater Foundry, Ltd. Co.によるScientific LinuxベースのWSL専用ディストリビューション
 Fedora Remix for WSL
 Whitewater Foundry, Ltd. Co.によるFedoraベースのWSL専用ディストリビューション
 Alpine WSL
 Alpine LinuxベースのWSL専用ディストリビューション。Alpine Linux development teamによるものではない。

 Oracle Linux
 AlmaLinux

使用例

Ubuntuの場合 
パッケージを最新版に更新する。
$ sudo apt update
$ sudo apt upgrade

NetHackをプレイする。
$ sudo apt install nethack
$ nethack

X Window Systemのクライアントを実行する（あらかじめXmingなどのXサーバーをWindows上で起動しておく）
$ sudo apt install x11-apps
$ sudo apt install x11-utils
$ sudo apt install x11-xserver-utils
$ export DISPLAY=:0
$ xeyes
$ firefox

Windowsのコマンド プロンプトからUbuntuのls、date、sort、uniqコマンドを実行する
C:\Users\a>bash -c "ls -l '/mnt/c/Program Files'"
C:\Users\a>bash -c "date '+%Y年%m月%d日 %H時%M分%S秒'"
C:\Users\a>bash -c "sort|uniq" < "C:\work\テストデータ.txt"

Windowsのコマンドと連携する（bash のlsコマンドの結果をWindowsのclip.exeでクリップボードに送る例）
$ ls -l '/mnt/c/Program Files' | clip.exeWindowsのデスクトップにあるファイルをコピーする（***はWindowsユーザ名）$ sudo cp /mnt/c/Users/***/Desktop/ファイル名 ファイル名