Windows Subsystem for Linux

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

1. 特徴
-----

従来からWindows上でUnix/Linuxプログラムを実行する方法として仮想機械や互換レイヤーがあった。実際に最初のバージョンである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開発者やオープンソースプロジェクトを利用する開発者のためのツール」としている。

2. WSL1
-------

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

WSL1はLinuxシステムコールとWindowsシステムコールを変換するレイヤーとUbuntuのプログラムを提供する。これはBashシェルやLinuxコマンドラインツールやインタプリタを含む。

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

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

Windows 10 version 1607  と version 1703  でベータ版を、version 1709  から正式版を利用できる。ただし 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では、当制限が撤廃された正式版が提供されている。

3. WSL2
-------

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

WSL1との違いは以下のとおりである。

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

4. 経緯
-----

2016年3月30日に開催されたマイクロソフトのBuild 2016カンファレンスで発表された。

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

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

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

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

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

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

5. 対応ディストリビューション
----------------

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

WSL提供開始当初のWindows 10 version 1607  のUbuntuバージョンは14.04であったが、2017年4月11日に公開されたversion 1703  では、16.04  に変更された。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
[1] Whitewater Foundry, Ltd. Co.によるDebianベースのWSL専用ディストリビューション
[2] Whitewater Foundry, Ltd. Co.によるScientific LinuxベースのWSL専用ディストリビューション
[3] Whitewater Foundry, Ltd. Co.によるFedoraベースのWSL専用ディストリビューション
[4] Alpine LinuxベースのWSL専用ディストリビューション。Alpine Linux development teamによるものではない。
Oracle Linux
AlmaLinux

6. 使用例
------

6.1. Ubuntuの場合
--------------

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

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

X Window Systemのクライアントを実行する $ 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のコマンドと連携する $ ls -l '/mnt/c/Program Files' | clip.exeWindowsのデスクトップにあるファイルをコピーする $ sudo cp /mnt/c/Users/*/Desktop/ファイル名 ファイル名

7. 関連項目
-------

Cygwin
Microsoft Windows Services for UNIX
Interix
MinGW
Wine
coLinux

8. 脚注
-----

9. 外部リンク
--------

[5]
[6]
[7]
[8]