WSL 2
「Microsoft」から「WSL 2」がアナウンスされました。「WSL 2」は「Windows Subsystem for Linux」の新しいアーキテクチャーです。
劇的なファイルシステムパフォーマンスの向上や、システムコールの完全な互換性が確保され、「Docker」などさらに多くのLinuxアプリケーションを「WSL 2」上で動作させることができます。
WSL 2とは
開発チームが「WSL」のコミュニティーからもっと多く寄せられた要望は、ファイルシステムパフォーマンスの向上と、「WSL」のシステムコールの互換性を改善し、より多くのLinuxアプリケーションを動かせるようにして欲しいという要望です。「WSL 2」ではこの2つの要望を実現します。
「WSL 2」は「Windows Subsystem for Linux」の新アーキテクチャーであり、「Windows」上で「ELF64 Linuxバイナリー」を動かすための仕組みです。
この新アーキテクチャーでは、Linuxバイナリーが「Windows」及びPCのハードウェアと対話する方法が変更されています。
アーキテクチャーは新しくなりますが、ユーザーから見た使い勝手は「WSL」と同じです。
また「WSL 2」の登場により、従来の「WSL」は「WSL 1」と表現されます。
WSL 1もWSL 2も利用可能
ユーザーはインストールした「Linuxディストリビューション」を「WSL 1」上でも「WSL 2」上でも動作させることができます。ユーザーはいつでも、「WSL 1」上で動作するLinuxディストリビューションを「WSL 2」上で動作するようにアップグレードしたり、逆に「WSL 2」上で動作するLinuxディストリビューションを「WSL 1」上で動作するようにダウングレードすることが可能です。
また「WSL 1」上で動作するLinuxディストリビューションと「WSL 2」上で動作するLinuxディストリビューションを共存して利用することも可能です。
WindowsにLinux kernelを同梱
「WSL 2」は本物の「Linux kernel」を使用する全く新しいアーキテクチャーです。「Microsoft」は「Windows」に本物の「Linux kernel」を同梱します。
本物の「Linux kernel」により、システムコールに完全な互換性が確保されます。
Linux kernel 4.19ベースのLinux kernel
「Microsoft」は2018年にすでに「Azure Sphere」で「Linux kernel」の同梱を行っていますが、「Windows」と共に「Linux kernel」を提供するのは今回が初めてです。「Microsoft」は最新の安定ブランチから「Linux kernel」を社内でビルドし、「Windows」と共に出荷します。
「Linux kernel」のソースコードは「kernel.org」から入手したソースコードがベースとなります。
初期ビルドでは、「Linux kernel 4.19」ベースの「Linux kernel」が提供される予定です。
WSL 2向けに最適化
「Windows」に同梱される「Linux kernel」は、「WSL 2」向けに最適化された「Linux kernel」になります。「Windows」上で素晴らしいLinux体験を実現するため、サイズやパフォーマンスを意識した最適化が施されます。
Windows Updateの対象になる
「Linux kernel」のセキュリティーアップデートや改良は、「Windows Update」を通じて入手できます。つまりユーザーは「Linux kernel」のアップデート管理を行うことなく、最新の「Linux kernel」を入手できるということです。
オープンソース
「Windows」に同梱される「Linux kernel」は、オープンソースで公開されます。「WSL 2」をリリースする際「Github」上でソースコードが公開され、ユーザーは変更された内容やユーザー自身による「Linux kernel」のビルドが可能になります。
WSL 2で行われたアーキテクチャーの変更
「WSL 2」は軽量な仮想マシン(VM)ユーティリティー内部で「Linux kernel」を動作させるため、最新の仮想化技術を使用しています。従来の仮想マシンとは性質が異なる
しかし「WSL 2」は従来の仮想マシンが持つ性質とは異なります。仮想マシンと聞くと、起動に時間がかかり、完全に隔離された環境が存在し、PCのリソースを多く割き、仮想マシンの管理に時間が割かれるという印象を持つでしょう。
「WSL 2」にこのような性質はありません。
「WSL 2」は「WSL 1」が持つ利点を引き続き提供します。
つまり「Windows」と「Linux」間の高度な統合、非常に高速な起動時間、小さなリソース使用量、仮想マシンの設定や管理からの解放です。
「WSL 2」は仮想マシンを使用しますが、その管理や実行はバックグラウンドで行われ、ユーザーは「WSL 1」の時と同じ使い方が可能です。
「WSL 2」の動作デモでは、「Bash」の起動が2秒未満で完了します。
ファイルシステムパフォーマンスの向上
「WSL 2」は「WSL 1」よりもファイルシステムのパフォーマンスが向上しています。以下のような操作を含むファイル操作が頻繁に行われる処理では、劇的な高速化が行われています。
- git clone
- npm install
- apt update
- apt upgrade
実際に向上するパフォーマンスの程度は、実行しているアプリ及びファイルシステムへのアクセス方法に依存します。
WSL 2の初期テスト
「WSL 2」の初期テストで「WSL 1」との比較が行われました。zip圧縮されたtarアーカイブの展開では、20倍高速化されました。
同様に様々なプロジェクトで「git clone」や「npm install」及び「cmake」を実行した結果では、約2倍から5倍高速化した結果が得られました。
システムコールの完全な互換性
Linuxバイナリーは、ファイルへのアクセスやメモリーの要求・確保、プロセスの生成など多くの機能を実行するためにシステムコールを使用します。WSL 1のシステムコール
「WSL 1」ではこれらシステムコールの多くを解釈する変換レイヤーを作成し、Linuxバイナリーは「Windows NT kernel」上で動作できるようになっています。しかしすべてのシステムコールを実装することは困難な作業であり、この結果Linuxバイナリーの中には「WSL 1」上で動作しないLinuxバイナリーもありました。
WSL 2のシステムコール
しかし今や「WSL 2」は本物の「Linux kernel」を内包しています。これにより完全なシステムコールの互換性が提供されます。
例えばLinux版の「Docker」や「FUSE」が動作するようになります。
WSL 2のリリースについて
「WSL 2」の登場がアナウンスされましたが、リリースはこれからです。初期ビルドのリリーススケジュール
「WSL 2」の初期ビルドは、2019年6月末に「Windows Insider Program」を通じて提供される予定です。初期リリースが行われる際、別途アナウンスが行われます。
来月まで待ちましょう。