Windows Subsystem for Linux Overview

情報源: Windows Subsystem for Linux Overview

Windows Subsystem for Linuxのソフトウェアアーキテクチャに関するペーパーと解説のビデオが出てきました。

LXSS-diagram-1024x472

記事本文にもありますが、今回のWSLは従来のOS/2サブシステムやSFUのInterixのサブシステムとは全く作り方が違います。従来はNTDLL.DLLという門に守られていたWindowsのカーネルモードの壁に新しい通用口を作った感じです。

bash.exeはユーザーモードで動いているLX Session ManagerにCOM(!)で接続し、一方Ubuntuのユーザーモードは一つの大きな分離プロセスとしてユーザーモードで動作し、外側へのインターフェイスとしてinitというタスクを持っています。LX Session Managerとinitとの間はカーネルモードで動作するLXCore/LXSSを通して接続されています。そして、分離プロセスとして動作しているLinuxのインスタンスの中で動作するbashやvimなどは、Linuxのインスタンスの中のピコプロセスとしてinitにより起動されます。

このピコプロセス管理し、カーネルとして振る舞うこともLXCore/LXSSの仕事になり、Linuxのバイナリが必要とするLinuxシステムコールをWindowsのシステムコールに翻訳をします。Windowsから見るとこのlxcodre.sysとlxss.sysはデバイスドライバとして動作しています。

ファイルシステムとしてはUnixファイルシステムを再現し、Windowsアプリケーションやそのファイルとは相互互換性のないVolFsと、Linuxサブシステム上からWindowsのファイルシステムを使用するためのDriveFs(/mnt/cのやつですね)が作られたようです。

ということで、自分が理解した内容をつらつら書いてきましたが、正確な内容については情報源のところの元の記事とビデオとで参照・確認してください。

いやぁ、やはりというか思った以上にというかELFバイナリをそのまま動かすって大変ですね。やっぱすごいことしてた。UWPと分離プロセスとかWindowsコンテナのような様々な要素技術が十分そろった今だからこういうことができるようになったという感じですね。Drawbridgeの成果物としてこういうものも出てくるとは思ってもみなかったです。

あと、MSKKには是非ちゃんと翻訳してほしい。


コメントを残す