5分で分かるWSL/WSL 2:Windows Subsystem for Linuxをざっくり解説
Windows 10上でLinuxを実行できる機能、WSLの概要をおよそ5分でざっくり解説します。
WSLとは?
「WSL」(Windows Subsystem for Linux)とは、「Windows 10」上でLinuxを直接実行できる機能です。WSLがリリースされるまでは、Windows上でLinuxを実行するためには仮想マシンの導入が必要でした。
WSLは2017年4月リリースのWindows 10バージョン1703(Creators Update)にβ版が、2017年10月リリースのWindows 10バージョン1709(Fall Creators Update)から正式版が搭載されるようになりました。WSLの後続であるWSL 2は2020年5月リリースのWindows 10バージョン2004(May 2020 Update)に搭載されています。この記事ではWSLという機能全般を「WSL」、2017年にリリースされたWSLを「WSL 1」、2020年にリリースされた後続のWSLを「WSL 2」と表記します。
WSL 2はWSL 1の完全な上位互換ではなく、それぞれに特徴があります。WSL 2がリリースされた2021年3月現在もWSL 1を引き続き使用することができます。
WSLのメリット
WSLがリリースされる以前から、仮想マシンを用意すれば、Windows上でLinuxを実行できました。では、WSLを使うことでどのようなメリットがあるのでしょうか。
仮想マシンというものは、Windows 10マシン上で別のPCを動かしているようなイメージです。Linuxを動かすために別のPCを用意するような形となり、起動や動作に時間がかかります。また、仮想マシンは別のPCと同様に扱うため、Windows 10側のアプリケーションとはネットワークなどを介してやりとりを行います。WSLは仮想マシンを使わずWindows 10上で直接Linuxを実行することができるため、起動や動作にかかる負荷が少なく済みます。
また、WSLを使用すると、Windows 10の全てのファイルやフォルダにアクセスができます。LinuxのコマンドでWindows 10側のファイルを処理したり、Linuxで処理した結果を「Microsoft Excel」や「Microsoft Word」で読み込んだりすることが可能になります。
WSL 1とWSL 2の違い
WSL 1とWSL 2では、採用しているアーキテクチャや備えている機能に違いがあります。
アーキテクチャ
WSL 1は「サブシステム」という、異なるOS環境を実現するための仕組みを使用しています。このサブシステムがLinuxのカーネルへのファンクションコールをWindowsのカーネルファンクションコールに変換して疑似的なLinux環境を実現しています。WSL 1では、Linux実行環境をLinuxカーネルではなく、サブシステムの「LXCore」によって実装しているため、一部のLinuxアプリケーションやユーザーファイルシステムなどを動かすことができません。
一方、WSL 2ではサブシステムを使用していません。「Light Weight utility Virtual Machine」(軽量ユーティリティー仮想マシン)という専用の仮想マシンを使っています。軽量ユーティリティーVM内でMicrosoft独自のパッチを当てたLinuxカーネル(WSL 2 Linux カーネル)を動かすことで、Linux環境を実現しています。Linuxカーネルを動かせるので、WSL 1で動かすことのできなかったLinuxプログラムも動作させることができます。
機能
WSL 1とWSL 2の相違点は下図の通りです。
機能 | WSL 1 | WSL 2 |
---|---|---|
マネージドVM | × | ○ |
完全なLinuxカーネル | × | ○ |
システムコールの完全な互換性 | × | ○ |
OSファイルシステム間でのパフォーマンス | ○ | × |
- マネージドVM
WSL 2では仮想マシンが使用されています。仮想マシンというと、従来の方式と変わりがないと思うかもしれませんが、バックグラウンドで実行される軽量ユーティリティーVMを利用しているため、仮想マシン環境を起動し、コマンドを受け付けるまで約2秒という速さで利用できます。
- 完全なLinuxカーネル
WSL 2が使用しているLinuxカーネルは、Windowsの更新プログラムによって保守されます。最新のセキュリティ修正プログラムとカーネルの機能強化が自動的に適用されるため、管理の手間が省けます。
- システムコールの完全な互換性
WSL 1ではLinuxカーネルへのファンクションコールを変換するLXCoreサブシステムが使用されていましたが、WSL 2には完全な互換性を持つ独自のLinuxカーネルが使用されています。そのため前述の通り、WSL 1で動かすことのできなかったLinuxプログラムも動作させることができます。
- OSファイルシステム間でのパフォーマンス
WSL 1とWSL 2では、Linuxがインストールされる「ローカルファイルシステム」に違いがあります。WSL 1では、Windows 10側でLinuxカーネルを変換して疑似的なLinux環境を用意しています。これに対しWSL 2では、Linuxカーネル自体を動作させており、WSL 2からWindows 10側へのアクセスは、ネットワークアクセス経由で行います。そのため、WSL 2におけるWindows 10側へのアクセスはWSL 1ほど早くありません。
仮想マシン環境との違い
前述の通り、WSL 2は専用の仮想マシン(軽量ユーティリティー仮想マシン)を使っています。しかし、WSL 2では仮想マシン環境を自動的にバックグラウンドで構築、管理しているため、ユーザーが仮想マシン環境を構築する必要はありません。仮想マシン技術を採用していないWSL 1とほとんど同じ使用感で扱うことができます。
WSL 2はどのようにして仮想マシン技術を組み込んでいるのか、簡単にWSL 2を起動するところから順を追って説明します。
「wsl.exe」などを実行しWSL 2を起動すると、Windows側でWSL 2を制御する「Lxssマネージャーサービス(以下、Lxss)」を呼び出し、Linux環境の起動を要求し、仮想マシンをWindows OSのコンテナ支援サービス「ホストコンピュートサービス」を介して立ち上げます。その後Lxssは、ホストコンピュートサービスを介して軽量ユーティリティー仮想マシン環境を起動します。そして最初のプロセスとしてWSL専用のinitが起動し、bash.exeを起動、wsl.exeが動作しているコンソールを介して入出力を行います。
WSL 2では、Linuxカーネルにext4(fourth extended file system)ファイルシステムを組み込んでおりハイパーバイザー(Hyper-V)を介して仮想ハードディスク(VHD)の上でファイルシステムを動作させています。詳しくはこちらの記事で解説していますので、詳しく知りたい方はご覧ください。
おわりに
ここまでざっくりと、WSLの概要について解説しました。WSL 1/WSL 2共に@ITでは導入方法を解説(WSL 1/WSL 2)していますので、ぜひ確認してください。
参考文献
Copyright © ITmedia, Inc. All Rights Reserved.