このページの本文へ

Windows Info 第83回

Windows Subsystem for LinuxにおけるWin32相互運用性のメカニズム

2017年02月05日 10時00分更新

文● 塩田紳二 編集● ASCII.jp

  • この記事をはてなブックマークに追加
  • 本文印刷

 今回は、前回紹介したWin32相互運用性を実現している仕組みを見ていくことにしよう。驚いたことにこの機能は、Windows Subsystem for Linux(WSL)内にインストールされたLinuxをほとんど変更することなく実現されている。

 本文に入る前に1つ訂正させていただきたい。前回の最後でbash.exeがパイプを受け付けないとしていたが、現在のインサイダープレビューでは、正しく動作する。つまり、

dir | bash -c "grep test"

として、Windows側のdirコマンドの出力をLinuxのgrepで処理することができる。

Windows側からもLinuxのコマンドをbash.exeを介することで起動することができる

Win32アプリかLinuxの実行ファイルかを区別する仕組み

 まず、bash側でWin32アプリを判別して起動する仕組みが必要になる。しかし、WSL内では標準のUbuntuがそのまま動作しており、/bin/bashを改良するわけにはいかない。そのため、Linuxカーネル標準の機能である「binfmt_misc」を使う。

 これは、ファイルのフォーマットなどからデータファイルを識別して、これを解釈実行する「インタプリタ」を起動する仕組みだ。Windowsでいえば、拡張子と実行ファイルの「関連付け」に似た機能だ。

 このbinfmt_miscでは、ファイルの先頭に埋め込まれた「マジックナンバー」を識別に使うことができる。EXE形式のプログラムは先頭に必ず「MZ」という文字列がマジックナンバーとして埋め込まれている。これは、MS-DOSの頃からの定義で、当時は、同じ実行ファイル形式だったCOM形式との区別に使われていた。

 その後、Windowsが登場してWindowsアプリケーションとなったが、構造的には、EXE形式のプログラムが先頭部分にあり、これを実行したあと、Windowsかどうかを判断して、その後に置かれたWin32バイナリを起動する仕組みになっていた。

 このような構造になっているのは、DOSから起動したときに、Windows用であるというメッセージを表示させて停止するためだ。しかし、ウィルスの侵入路に使われてからは、先頭にあるDOSのEXE実行形式部分はまったく使われなくなった。しかし、形式としてはそのまま残っているのだ。

 Linuxの実行ファイル形式ELFは、Windowsのものは違うため、マジックナンバーもまた違ったものになっている。このため、標準のLinux実行ファイルとWindowsの実行ファイルは確実に区別ができる。

 WSLでは、Linuxカーネルは存在せず、WSL側にあるLXSS.SYSとLXCORE.SYSがカーネルAPIコールを受け付け、WindowsカーネルAPIに変換している。このため、WSLの実装自体がカーネルの機能に相当する。実は、RS1の実装ではこのbinfmt_miscは実装されていなかった。

 この機能があるかどうかは、Linuxの/procファイルシステムで判定できる。RS1には「/proc/sys/」以下にfsディレクトリが存在していないが、RS2のWSLでは、「/proc/sys/fs/binfmt_misc」ディレクトリが存在する。

RS1(Windows10 バージョン1607)のWSLには、/proc/sysの下にfsがない

RS2プレビュー版では、/proc/sys/fs/WSLInteropが存在する

 つまり、この機能は、RS1では未実装だったが、RS2では実装されているというわけだ。

 RS2のbinfmt_miscには、標準で以下の画面のようなEXEファイル実行用の登録がある。

/proc/sys/fs/WSLInteropには、インタプリタとして/initが、マジックナンバーとして先頭(offset 0)にMZ(0x4d5a)が指定されている

interpreter /init
flags:
offset 0
magic 4d5a

 これは、対象ファイルを判定するのにファイル先頭のマジックナンバーを使い、そのパターンは16進数で「4d5a」、ASCIIコードの「MZ」で、ファイルを解釈するインタプリタは「/init」だという定義だ。

 WSL内の/initは、通常のLinuxプログラムではなく、WSL専用の改良されたプログラムになっている。Linuxでは/initは、システムの起動時に最初に動作するプログラムで、環境整備などを行ったのち、bashを起動している。

 このプログラムは、WSLではWindows側と通信する唯一のプログラムであり、唯一の標準でないLinuxのプログラムだ。WSLの/initは、通常、LxCore.sys、LxSS.sysと通信し、Windows側のLXSSマネージャーサービスを経由してbash.exeに結果を返す。

 RS2では、WSL内で/bin/bashがEXEプログラムを起動すると、通常のコマンドライン処理(シェル変数の処理など)が行なわれたのち、LinuxのカーネルAPIコールが呼び出される。ここでbinfmt_miscが適用され、インタプリタとして/initが起動する。/initではファイルパスや標準入出力の変換が行われ、LxBUS経由でBash.exeにプロセス起動のメッセージが送られる。

 なお、binfmt_miscの登録にあるように、WSL内のLinuxでは/init自体がインタプリタとして動作し、コマンドラインで引数としてEXEファイルを指定すれば、Win32実行ファイルを起動できる。ただし、このときの起動パスは、DrvFSで正しく指定する必要がある。

/initの引数としてWin32バイナリを指定すれば、起動が可能。ただし、DrvFSのパスを指定する必要がある

 また、/initは、WSLが起動されたときのWindows側のPath環境変数をWSL側の/bin/bashへ持ち込む。もちろん、DrvFSに変換したうえでだ。これにより、WSL内ではWindows側のPathが初期値となり、これにWSL側のPATHが追加される。

 /initは、引数で指定されたWin32バイナリをLxCore、LxSSに依頼して起動させる。

「Bash.exeがLXSS Manager service経由でWSLを起動を要求」→「LXSS Manager Serviceは、標準入出力をLxBusに登録(マーシャリング)してWSLを起動」→「/initが起動し受け取った識別子からファイルディスクリプタを作成(アンマーシャリング)」→「/initがアンマーシャリングしたファイルディスクリプタを標準入出力に割り当て/bin/bashを起動」→「/bin/bashがbinfmt_miscで/initを起動。/initは、その時点の標準入出力をマーシャリングしてLxBusに登録。LxBus経由でbash.exeにWin32バイナリの起動依頼メッセージを送る」→「Bash.exeはメッセージを受け取り、識別子をアンマーシャリングして標準入出力のファイルハンドルを受け取る」→「受け取ったファイルハンドルを標準入出力に割り当ててWin32バイナリを起動」

 こうした通信には、LxBusと呼ばれるメカニズムが使われている。これはWSL側では、/dev/lxssと/dev/lxssclientというデバイスで、/initがこれを占有して使っている。

LxBusのため、WSL側には/dev/lxssと/dev/lxssclientというキャラクタデバイスが登録されている

 LxBusは、WindowsとWSLの間の複数の並行した通信を可能にする。1つは、bash.exeの背後にある「LXSS Manager Service」と/init間でメッセージ(たとえば、WSLの起動やWSL側からのWin32バイナリの起動依頼などのメッセージ)のやりとりを行なう。

 もう1つは、Windows側とWSL側の標準入出力を接続するための通信路として使われる。このときには、Windows側ではファイルハンドル、Linux側はファイルディスクリプタとして動作する。つまり、どちら側も、ファイルのように扱えるオブジェクトとして振る舞うことができる。なお、これはLxBus MessagePortと呼ばれている。それぞれの環境での汎用ファイルオブジェクトなので、標準入出力に割り当てることができる。これにより、Win32相互運用性では、Windows側とWSL側の標準入出力を接続することが可能になる。

カテゴリートップへ

本記事はアフィリエイトプログラムによる収益を得ている場合があります

この連載の記事
1
【整備済み品】富士通 ノートパソコン LIFEBOOK U9310 13.3型FHD(1920x1080) 超軽薄 ノートPC/第10世代 Core i5-10310U@1.7GHz/ 8GB メモリ/高速ストレージ SSD/Webカメラ/WIFI/Type-C/HDMI/win11&MS Office 2019 搭載 ビジネス 在宅勤務向け パソコン (メモリ:8GB/SSD:256GB)
【整備済み品】富士通 ノートパソコン LIFEBOOK U9310 13.3型FHD(1920x1080) 超軽薄 ノートPC/第10世代 Core i5-10310U@1.7GHz/ 8GB メモリ/高速ストレージ SSD/Webカメラ/WIFI/Type-C/HDMI/win11&MS Office 2019 搭載 ビジネス 在宅勤務向け パソコン (メモリ:8GB/SSD:256GB)
¥35,130
2
Apple 2026 MacBook Air M5チップ搭載13インチノートブック:AIとApple Intelligence、13.6インチLiquid Retinaディスプレイ、16GBユニファイドメモリ、512GB SSDストレージ、12MPセンターフレームカメラ、日本語キーボード、Touch ID - ミッドナイト
Apple 2026 MacBook Air M5チップ搭載13インチノートブック:AIとApple Intelligence、13.6インチLiquid Retinaディスプレイ、16GBユニファイドメモリ、512GB SSDストレージ、12MPセンターフレームカメラ、日本語キーボード、Touch ID - ミッドナイト
¥177,333
3
Apple 2026 MacBook Neo A18 Proチップ搭載13インチノートブック:AIとApple Intelligenceのために設計、Liquid Retinaディスプレイ、8GBユニファイドメモリ、256GB SSDストレージ、1080p FaceTime HDカメラ - シトラス
Apple 2026 MacBook Neo A18 Proチップ搭載13インチノートブック:AIとApple Intelligenceのために設計、Liquid Retinaディスプレイ、8GBユニファイドメモリ、256GB SSDストレージ、1080p FaceTime HDカメラ - シトラス
¥95,768
4
【Amazon.co.jp限定】ASUS ノートパソコン Vivobook 15 M1502NAQ 15.6インチ AMD Ryzen 7 170 メモリ16GB SSD 512GB Windows 11 重量1.7kg Wi-Fi 6E クワイエットブルー M1502NAQ-R7165BUW
【Amazon.co.jp限定】ASUS ノートパソコン Vivobook 15 M1502NAQ 15.6インチ AMD Ryzen 7 170 メモリ16GB SSD 512GB Windows 11 重量1.7kg Wi-Fi 6E クワイエットブルー M1502NAQ-R7165BUW
¥98,800
5
ESBOOKノートパソコン 【MS Office 2024搭載&Windows 11 Pro】14インチIPS液晶/1920×1080FHDディスプレイ カメラ付き/薄型PCノート高性能CPU/初期設定不要/8Gメモリ/無線LAN/大容量SSD/初心者向け・パソコンノート/日本語キーボードフィルム付き/ワイヤレスマウス付き(256G SSD, ローズゴールド)
ESBOOKノートパソコン 【MS Office 2024搭載&Windows 11 Pro】14インチIPS液晶/1920×1080FHDディスプレイ カメラ付き/薄型PCノート高性能CPU/初期設定不要/8Gメモリ/無線LAN/大容量SSD/初心者向け・パソコンノート/日本語キーボードフィルム付き/ワイヤレスマウス付き(256G SSD, ローズゴールド)
¥38,999

Amazonのアソシエイトとして、ASCII.jpは適格販売により収入を得ています。

ASCII倶楽部

注目ニュース

  • 角川アスキー総合研究所

プレミアム実機レビュー

ピックアップ
1
KIOXIA(キオクシア) 旧東芝メモリ microSD 128GB UHS-I Class10 (最大読出速度100MB/s) Nintendo Switch動作確認済 国内サポート正規品 メーカー保証5年 KLMEA128G
KIOXIA(キオクシア) 旧東芝メモリ microSD 128GB UHS-I Class10 (最大読出速度100MB/s) Nintendo Switch動作確認済 国内サポート正規品 メーカー保証5年 KLMEA128G
¥2,386
2
Anker PowerLine III Flow USB-C & USB-C ケーブル Anker絡まないケーブル 240W 結束バンド付き USB PD対応 シリコン素材採用 iPhone 17 / 16 / 15 / Galaxy iPad Pro MacBook Pro/Air 各種対応 (1.8m ミッドナイトブラック)
Anker PowerLine III Flow USB-C & USB-C ケーブル Anker絡まないケーブル 240W 結束バンド付き USB PD対応 シリコン素材採用 iPhone 17 / 16 / 15 / Galaxy iPad Pro MacBook Pro/Air 各種対応 (1.8m ミッドナイトブラック)
¥1,890
3
KIOXIA(キオクシア)【日本製】USBフラッシュメモリ 32GB USB2.0 国内サポート正規品 KLU202A032GL
KIOXIA(キオクシア)【日本製】USBフラッシュメモリ 32GB USB2.0 国内サポート正規品 KLU202A032GL
¥1,080
4
Anker USB Type C ケーブル PowerLine USB-C & USB-A 3.0 ケーブル iPhone 17 / 16 / 15 /Xperia/Galaxy/LG/iPad Pro/MacBook その他 Android 等 USB-C機器対応 テレワーク リモート 在宅勤務 0.9m ホワイト
Anker USB Type C ケーブル PowerLine USB-C & USB-A 3.0 ケーブル iPhone 17 / 16 / 15 /Xperia/Galaxy/LG/iPad Pro/MacBook その他 Android 等 USB-C機器対応 テレワーク リモート 在宅勤務 0.9m ホワイト
¥740
5
UGREEN USB Type Cケーブル PD対応 100W/5A 超急速充電 USB C ナイロン編み 断線防止 iphone17/16/15シリーズ/iPad/MacBook Pro/Galaxy S24/Matebook/iPad/Xperia等USB-C各種対応(1m, ブラック)
UGREEN USB Type Cケーブル PD対応 100W/5A 超急速充電 USB C ナイロン編み 断線防止 iphone17/16/15シリーズ/iPad/MacBook Pro/Galaxy S24/Matebook/iPad/Xperia等USB-C各種対応(1m, ブラック)
¥743
6
Anker iPhone充電ケーブル PowerLine II ライトニングケーブル MFi認証 超高耐久 iPhone 14 / 14 Pro Max / 14 Plus / 13 / 13 Pro / 12 / 11 / X/XS/XR / 8 Plus 各種対応 (0.9m ホワイト)
Anker iPhone充電ケーブル PowerLine II ライトニングケーブル MFi認証 超高耐久 iPhone 14 / 14 Pro Max / 14 Plus / 13 / 13 Pro / 12 / 11 / X/XS/XR / 8 Plus 各種対応 (0.9m ホワイト)
¥990
7
NIMASO ガラスフィルム iPad 第11世代(A16) 2025用/iPad 10.9インチ 第10世代 2022用 衝撃吸収 強化 ガラス 保護フィルム 指紋防止 ガイド枠付き NTB22I574
NIMASO ガラスフィルム iPad 第11世代(A16) 2025用/iPad 10.9インチ 第10世代 2022用 衝撃吸収 強化 ガラス 保護フィルム 指紋防止 ガイド枠付き NTB22I574
¥1,519
8
KIOXIA(キオクシア)【日本製】SDカード 128GB SDXC UHS-I Class10 読出速度100MB/s 国内正規品 メーカー保証5年 KLNEA128G
KIOXIA(キオクシア)【日本製】SDカード 128GB SDXC UHS-I Class10 読出速度100MB/s 国内正規品 メーカー保証5年 KLNEA128G
¥2,424
9
エレコム 電源タップ 6個口 3m 雷ガード 個別スイッチ ほこりシャッター付 耐熱 PSE技術基準適合 ブラック T-K6A-2630BK
エレコム 電源タップ 6個口 3m 雷ガード 個別スイッチ ほこりシャッター付 耐熱 PSE技術基準適合 ブラック T-K6A-2630BK
¥1,690
10
JAMJAKE iPad用ペンシル アップルペンシル代用ペン 2018年~2026年 iPad対応 タッチペン 超高感度 極細 スタイラスペン Type-C急速充電 傾き感知/磁気吸着/誤作動防止機能対応 軽量 耐摩 学生 子供 筆記 絵を描く デザイン用 ドローイング用
JAMJAKE iPad用ペンシル アップルペンシル代用ペン 2018年~2026年 iPad対応 タッチペン 超高感度 極細 スタイラスペン Type-C急速充電 傾き感知/磁気吸着/誤作動防止機能対応 軽量 耐摩 学生 子供 筆記 絵を描く デザイン用 ドローイング用
¥1,880

Amazonのアソシエイトとして、ASCII.jpは適格販売により収入を得ています。

デジタル用語辞典

ASCII.jpメール デジタルMac/iPodマガジン