Windows Subsystem for Linux

**Windows Subsystem for Linux**（**WSL**、**Linux用Windowsサブシステム**）とは、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オペレーティングシステムの一部として公式に提供している事である。また、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 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が公開される。

2025年5月19日、マイクロソフトはWSL 1で使用されるドライバーとWSL 2のIFSネットワークリダイレクタードライバーを除いて、WSLの大部分がオープンソースソフトウェアとしてリリースされたと発表した。

## 対応ディストリビューション
ベータ版では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の場合
パッケージを最新版に更新する。

```console
$ sudo apt update
$ sudo apt upgrade
```


NetHackをプレイする。

```console
$ sudo apt install nethack
$ nethack
```


X Window Systemのクライアントを実行する（あらかじめVcXsrvなどのXサーバーをWindows上で起動しておく）。WSL2では「WSLg」というGUI機能が標準で実装されているのでXサーバーのインストールは不要となった。

```console
$ 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コマンドを実行する

```doscon
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でクリップボードに送る例）

```console
$ ls -l '/mnt/c/Program Files' | clip.exe
```
Windowsのデスクトップにあるファイルをコピーする（***はWindowsユーザ名）
```console
$ sudo cp /mnt/c/Users/***/Desktop/ファイル名 ファイル名
```


## 脚注

### 注釈

### 出典

## 関連項目
* Cygwin
* Microsoft Windows Services for UNIX
* Interix
* MinGW
* Wine
* coLinux
* Windows Subsystem for Android

## 外部リンク
* 
* Linux 用 Windows サブシステムとは | Microsoft Learn
* 
* マイクロソフトによる公式解説
* ''Windows Command Line Tools For Developers'' blog
* ''Fun with the Windows Subsystem for Linux'' blog post