Windowsで動くLinux、プログラムの互換性は大丈夫か


 Windows 10でLinuxのプログラムが改変なしにそのまま動かせるLinux互換環境「Windows Subsystem for Linux(WSL)」。Linuxプログラムに対してWindowsカーネルをあたかもLinuxカーネルのように見せる仕組みだ。その互換性は、WSLがどこまでLinuxカーネルとして振る舞えるかにかかっている。

 WSLは、Linuxの実行ファイルをWindowsで直接実行する。WSLで動作するLinuxディストリビューションの「Ubuntu」や「openSUSE」を構成するプログラムは、オリジナルのそれと同じだ。

 しかし当然、Linuxの実行ファイルが呼び出すOSの機能、いわゆるシステムコールは、Windowsのそれとは異なる。そこでLinuxプログラムによるシステムコールの呼び出しを検知し、Linuxプログラムが要求する形式で処理結果を返す仕組みがWindows側に必要になる。

 このシステムコールの違いを吸収するのが、WSLの実体と言える「lxss.sys」だ。

f:id:nonbei:20171013185846j:plain

 WSLを有効にしたWindows 10上でLinuxプログラムを実行すると、Windowsカーネルはそのプログラムが要求するシステムコールをlxss.sysドライバに渡す。lxss.sysは、Windowsカーネルが持つ同等のシステムコールを呼び出すか、自身が持つLinux互換のシステムコールで処理する。


ソ-ス:今さら聞けない Windows版Linuxの疑問 - Windowsで動くLinux、プログラムの互換性は大丈夫か:ITpro

マイクロソフトは16ビットAPIのように通常使われないシステムコールをテスト対象から除いている。Linuxカーネルとの完全な互換性を目指すのではなく、開発者が利用するアプリケーションの互換性を高めるのが目的だからだ。」に注目したい。