4月22日(現地時間)、MicrosoftはWindows Subsystem for Linux(以下、WSL)に関する詳しい説明を、公式ブログで行った。Microsoftが開発したサブシステム経由でLinuxのELF64バイナリを実行するWSLは、伝統的な仮想マシンとは異なるアプローチでWindows 10に組み込まれている。

そもそもWindows NTのカーネルはWin32に縛られることなく、POSIXやOS/2といったサブシステムを実装していた。初期のサブシステムは対応するアプリケーションがAPIに基づいてNTシステムコールを行う実装形式である。これを応用したのがWSLだ。

ELF64バイナリを実行するためのコンポーネントとして、Linuxインスタンスを処理する「 ユーザーモードセッションマネージャーサービス」と、Linuxシステムコールを変換し、Linuxカーネルをエミュレートする「lxss.sys」「lxcore.sys」で、変更していないユーザーモードLinux(bashなど)を実現。これをユーザーモードとカーネルモードの該当する箇所に組み込んだ。つまり、各プロバイダドライバーはLinuxのシステムコールをNT APIに変換して、Windows 10上でbashといったコマンドの実現を行っている。

Windows Subsystem for Linuxの概要(公式ブログより抜粋)

WSLの実現にはMicrosoft Researchの研究プロジェクト「Drawbridge」を根底にして、Windowsカーネルにはピコプロセスとピコドライバーの概念が導入されている。前者はWin32プロセス環境ブロック(PEB)のようなサブシステムとして動作し、ペアリングドライバーのシステムコールとユーザーモードの例外やプロセスディスパッチャを管理。後者はプロセスのアドレス空間にELF64バイナリをロードし、Linuxカーネルをエミュレートすることで、Linuxのコードを実行する。

その他にもLinuxファイルシステムをサポートするためのvolfsや、Windows環境との相互運用性を実現するDriveFSに関する解説が行われた。記事を投稿したMicrosoftのJack Hammons氏は次回の投稿で、WSLの基礎構築ブロックであるピコプロセスの詳細を解説すると説明しているので、WSLの構造に興味がある方は追いかけてほしい。

阿久津良和(Cactus)