質問: 0 ``` notepadはLinuxのシステムコールではなくWindowsのシステムコールを使用しているため、動かないと思ったのですが、動いてしまいました。 ### 質問 WSLでnotepad.exeが動くのはどうしてでしょうか?
回答: @sayuri さんが書かれているように、Microsoftのこのページに解説されている相互運用性の一環でしょう。 Linux との Windows の相互運用性 > > Windows Subsystem for Linux (WSL) は、Windows と Linux 間の統合を継続的に向上させています。 次の操作を行います。 > > > * Windows ツール (つまり、notepad.exe) を Linux コマンド ライン (つまり、Ubuntu) から実行する。 > > > まさにnotepad.exeを起動できることが書かれています。 Linux からの Windows ツールの実行 > > WSL では、[tool-name].exe を使用して、WSL コマンド ラインから Windows ツールを直接実行することができます。 たとえば、notepad.exe のように指定します。 > > > ただしその記事の中で、ユーザーから見てどのように振る舞うかは書かれていますが、動作させるための仕組みの詳細は書かれていないので、そのページに紹介されている別の資料を見る必要があるようです。 2016 年からの相互運用性に関する WSL のブログの投稿 Windows and Ubuntu Interoperability Launching Win32 applications from within WSL IO Redirection to Win32 英語記事ですが、Google翻訳等で見てみると、binfmt_misc - Wikipediaという、Windowsで言えば拡張子を基に`assoc.exe`と`ftype.exe`で実行プログラムを関連付けるような仕組みを利用してWindowsアプリケーションを起動させているようです。 そしてファイルアクセスはLinuxのVFSとWindowsのAPIを相互に変換(マーシャリング)する仕組みにて行っているようです。 ちなみにその後WSL2も含めて仕組みを解説しているらしき日本語の記事を見つけました。 上記記事と個々の説明内容の詳細化レベルに違いがありますが、参考になるでしょう。 WSLのアーキテクチャ