「Windows Subsystem for Linux 2」(WSL 2)はWindowsにLinuxカーネルをもたらした。初代のWSLもLinuxのエミュレーションとしては優秀だったため、2になったからと言って大した影響はないだろうと思う人もいるかもしれないが、それは違う。少なくとも、Dockerのシニアソフトウェア開発者であるSimon Ferquel氏は、まったく違うと述べている。
同氏はエンジニアリングブログの記事で、(コンテナをここまで重要な存在にした企業である)Dockerは、同社の開発プラットフォーム「Docker Desktop」のWindows版を、従来の通常の「Hyper-V」を使用したソリューションから、WSL 2用に用意された軽量なHyper-Vの仮想マシン(VM)を使用した環境に移行する予定であることを明らかにした。
Ferquel氏はその理由について、Microsoftが提供するWSL 2は、事実上軽量なVM内で動作する本物のLinuxカーネルであり、こちらの方が従来のソリューションよりも軽量で、しかもDockerが独自に提供できるよりもWindowsと緊密に統合されているからだと説明している。DockerデーモンはWSL 2上で問題なく動作し、パフォーマンスも申し分ないという。
実際にはどの程度のパフォーマンスなのだろうか。同氏は、コールドスタート後のWSL 2とDockerデーモンの起動について、「圧倒的に高速であり、開発用のラップトップでは、現バージョンのDocker Desktopの起動に数十秒かかるのに対して、2秒以内に立ち上がる」と述べている。
Dockerが言うのだから間違いないはずだ。
ただし、WSL 2に切り替えるという判断は、簡単に行われたわけではなかった。DockerはWSL 2を初期のビルドから評価しており、プロトタイプとしてさまざまなアプローチを試した。その結果として、より高速になったDocker Desktopが開発者の元に届けられようとしている。
Dockerは、Hyper-VのVMが現在担っている部分を、WSL 2の統合パッケージで置き換える予定だ。提供される機能は現在のDocker Desktopと同じで、これには1クリックでKubernetesをセットアップする機能や、自動アップデート、透過的なHTTPプロキシー設定、WindowsからのDockerデーモンへのアクセス、Windowsファイルの透過的なバインドマウントなどの機能が含まれる。
しかし、Docker開発者にとってもっとも重要なのは、Windows用とLinux用の両方のコンテナ化ソフトウェアを同時に開発できるようになることだろう。Ferquel氏は、そうなった暁には、「Linux環境を対象としたプロジェクトに取り組んでいる開発者や、Linux用に合わせたビルドプロセスを使っている開発者は大きなインパクトを受けるだろう。これで、Linux用とWindows用に2つのビルドスクリプトをメンテナンスする必要はなくなる。例えば、あるDockerの開発者は、Linuxマシンを使っている開発者と同じツールとスクリプトを使って、Windows上でLinuxのDockerデーモンを開発している」と述べている。
同氏はまた、WSL 2のバインドマウントは、ネイティブのLinuxマシンとほぼ同等のI/O性能を発揮できると主張している。これで、Docker DesktopでI/Oの入出力が重要なツールチェーンを使用する際の大きな弱点が1つ解消される。この改善によって、NodeJSやPHP、その他のウェブ開発ツールは大きなメリットを受けられるはずだ。