MicrosoftがWindowsでLinuxバイナリを実行するための互換レイヤを追加すると発表したとき、本連載では5回に渡って開発版にインストールして利用する方法を取り上げた。あれから開発が進み、2017年10月に公開された「Windows 10 Fall Creators Update」ではついに、この機能が取り込まれた。これからは、Windowsでも大手を振ってUNIX系コマンドが利用できる。もうmacOSをうらやまなくてもいいのである!
手っ取り早く実感するには、アプリストアを開いて「Linux」というキーワードで検索をかけてみるといいだろう。「Ubuntu」「SUSE Linux」「Enterprise Server」「openSUSE」がアプリとして登録されていることを確認できる。
本連載では、もう一度この機能についておさらいすると共に、インストールして利用する方法を取り上げる。どちらかと言うと開発者向けの機能だが、運用担当や一般ユーザーも使えるようになれば便利な環境だ。以下の画面が使いこなせるようになれば大満足である。
Windows Subsystem for Linux(WSL)の概要
まずは、この新機能がどのようなものであるかを説明しておこう。Microsoftはこの技術を「Windows Subsystem for Linux」と呼んでおり、短縮して「WSL」と表記されることもある。WSLは、LinuxカーネルシステムコールをWindowsカーネルシステムコールに差し替えるもので、互換レイヤ技術ということになる。
現在、VMwareやVirtualBoxといった仮想化ソフトウェア、XenやKVM、Hyper-V、bhyveなどのハイパーバイザが存在する。これらの技術を大雑把に説明するなら、「ソフトウェアでPCをエミュレートして、その上で別のOSを実行するもの」だ。だが、WSLはこれらとは違う。
LinuxにしろWindowsにしろ、現在主流のOSではプロセスはカーネルに対してシステムコールを呼ぶことで機能を依頼している。プロセスからのシステムコールがシステムに対する仕事の依頼になっているわけだ。つまり、この部分さえ用意されていれば、そこから先はプロセス側は関与しないので、入れ替えが可能なのである。
ちょっとわかりにくいかもしれないが、要するに申請書類を提出した際、ちゃんと結果が返ってくるのであれば、誰が処理をしていようと申請者は気にしなくてよいということだ。WSLはこれを実現するのである。
Linuxのプログラムは、向こう側にいるのはLinuxカーネルだと想定して処理を申請するが、WSLを経由すると翻訳が行われた後、Windowsカーネルで処理が行われる。結果は、Linuxシステムコール風になって返っていく。このように、WindowsカーネルでLinuxカーネルのシステムコールを実行する仕組みがWSLである。
一見、画期的な技術だと思うかも知れないがそういうわけでもなく、こうした仕組みは結構古くから存在している。WindowsアプリケーションをUNIX系OSで実行するためのソフトウェアである「Wine」はこうした技術の実装系だし、UNIX系OSにはWSLのような機能が大体実装されている。FreeBSDではLinuxバイナリをネイティブスピードで実行できるが、これはWSLと同じようなことをしているためだ。
WSLのような互換レイヤと仮想化ソフトウェアとの大きな違いをざっくり言うとすれば、仮想化ソフトウェアではゲストOSが箱庭的な状態になりやすいのに比べ、WSLのほうはホストと地続きになりやすいといったところだろう(実行速度や消費リソース量にも違いは出るのだが、こちらは徐々に重要度が下がっているように見える。実装によってはWSLのアプローチは高速になりやすいが、WSLの場合はOSのセマンティックの違いがあって逆に遅い部分も目立ってしまっている)。
要するに、Linux環境からそのままWindowsの環境を扱える。macOSではネイティブにUNIX系コマンドが実行できるのでフラットに利用できるが、WSLだと(1枚挟まるものの)これとかなり近い感じになるということだ。
そして、最大の注目ポイントはMicrosoftがこれを開発したということである。Microsoftは営利企業であるため、この機能が使われなければそのうちなかったことにされてしまうかもしれない。しかし、利用するユーザーが多ければ今後も開発を継続し、新しいシステムコールの開発なども行っていくだろう。Linuxユーザーとして、ここはぜひとも頻繁に使って、Microsoftに開発継続のプレッシャーをかけていきたいところである。