Windows 10でLinux GUIアプリケーション対応、プレビュー版登場

現在のWindows 10にはLinuxバイナリを実行する機能が搭載されており、Microsoft StoreからLinuxディストリビューションをインストールして使用できる。これを支えている技術がWSL (Windows Subsystem for Linux)だ。WSL 1とWSL 2という、異なる仕組みの実装系が存在しているが、今後はWSL 2のみが使われていくという認識でいればよいと思う。

Linuxがそのまま利用できるのは便利だが、これまでWSLはGUIアプリケーションをサポートしてこなかった。実行するための環境を自分でセットアップすれば、GUIアプリケーションを動作させることも可能だったが、正直なところ簡単とはいえず、パフォーマンスも満足のいくものではなかった。

Microsoftはこの点に関し、1年前のBUILD 2020で、WSLにおいてGUIアプリケーションを動作させるという目標を発表した。発表から1年経ってしまったが、待望のプレビュー版が登場した。Microsoftはこの機能に「WSLg」というニックネームを付けたようだ。動作の様子は次のページで確認できる。

プレビュー版だが出来は上々だ。GUIアプリケーションとして動作するのみならず、オーディオおよびマイクもサポートされており、さらにGPUを使ったグラフィックアクセラレーションもサポートされている。これは3Dグラフィック系のアプリケーションも実用的な速度で使用できることを意味している。

プレビュー版を試す方法

今回発表された最初のプレビュー版は「Windows 10 Insiders Preview Build 21364」およびこれ以降のバージョンで試せるとされている。該当する開発版のWindows 10を使用している場合、次のコマンドを実行するだけでWSLgの機能が有効になるとされている。

WSLgの機能を有効化する方法

wsl --update

まだWSLを利用していない場合は、次のコマンドでWSLの有効化とWSLgのインストールが自動的に行われるとされている。

WSLの有効化とWSLgの有効化

wsl --install

WSLgのセットアップなどの詳細情報は次のページにまとまっている。

MicrosoftはWSLgの機能を試す前に、可能な限りGPUコンピュートサポート機能を有効化することを推奨している。GPUコンピュートサポート機能を使用することでよりパフォーマンスを得ることができる。

WLSgがリテール版Windows 10まで落ちてくるにはまだ時間がかかるだろう。しかし、プレビュー版が利用できるようになったのは大きい。それほど遠くない段階でリテール版のWindows 10でLinuxのGUIアプリケーションを利用可能になりそうだ。

WSLgはこんな時に役に立つ

WSLgはWindows 10でLinuxのGUIアプリケーションを実行する機能だ。Windows 10で使うという観点からは、特に次のようなシーンでの活用が期待できる。

  • マルチプラットフォームアプリケーション開発でのテストなど。Windows 10のVisual StudioやVisual Studio Codeは、WSLを使うことでWindows 10で開発を行いながらも、Linuxバイナリをビルドするといった作業ができるようになっている。このビルドしたアプリケーションを試験するのに、バイナリを別のLinuxマシンへコピーするとか、仮想環境で動作しているLinuxで試験するといった必要がなくなる。開発しているWindows 10 PCでビルドしたLinux版のLinuxアプリケーションも動作確認ができるようになる。
  • Linuxで人気の高いGUIアプリケーションの多くはWindowsやMacにも移植されていることが多い。それでも、一部のアプリケーションはLinuxしかサポートしていないし、特定の分野のアプリケーションは最初からLinuxのみをターゲットにして開発されている。こうしたアプリケーションをWindows 10で使えるようになる。
  • それほど人気がなかったとしても、LinuxユーザーであればLinuxでお気に入りのアプリケーションがあるもの。そうしたアプリケーションがWindows 10で使用できるようになるのは大きな魅力だ。これでWindows 10をプラットフォームとしてLinuxアプリケーションをこれまで以上に活用できるようになる。

WSLgの利用シーンはリテール版まで降りてきて、多くのユーザーが使うようになるとさらに増えることが予想される。開発者が予想もしていなかった活用方法が普及するかもしれない。WSLgを取り巻く状況がどのように変わっていくのか、今後の展開が楽しみだ。

Xサーバはどこへ行ったのか、答えはMicrosoftの「CBL-Marinerディストリビューション」

LinuxでGUIアプリケーションを実行することに詳しいユーザーやエンジニアは、Xサーバはいったいどうなっているのかが気になるだろう。LinuxではXサーバがGUIアプリケーション実行の重要なポジションを担っている。通常、最初にXサーバを起動する必要があるのだ。

WSLgは技術的にはMicrosoftが開発した「CBL-Mariner」と呼ばれるLinuxディストリビューションが背後で動いている、というのがポイントとなっている。もともとCBL-MarinerはクラウドインフラストラクチャやMicrosoftが内部で使用するLinuxディストリビューションとして開発を行っているものだ。今回、このディストリビューションがWSLでGUIアプリケーションを実行するために拡張され、使われている。

WSL内部でGUIアプリケーションの実行が試みられると、Wayland、Xサーバ、Pulse Audio Serverおよびそのほか動作するために必要となる機能などを含んだCBL-Marinerディストリビューションが自動的に起動され、必要なサービスが動作する。このシステムディストリビューションのおかげでLinuxのGUIアプリケーションが動作するのだ。

  • WSLgアーキテクチャ - 資料: Microsoft提供

    WSLgアーキテクチャ 資料: Microsoft

このシステムディストリビューションはGUIアプリケーションが終了し、WSLディストリビューションが終了されると、自動的に終わる。MicrosoftはLinux GUIアプリケーションがシームレスに動作することを意図しているため、wsl -l -vなどのコマンドを実行してもこのシステムディストリビューションは一覧に表示されない仕掛けになっている。

GUIアプリケーションに関するサービスを「CBL-Marinerディストリビューション」という別のLinuxディストリビューションに分離したことで、Microsoft StoreからインストールするLinuxディストリビューションの種類によらず、一貫したユーザーエクスペリエンスを提供できるという利点があるほか、開発・メンテナンス、更新の面でも扱いやすくなるとされている。

WSLgの技術的なポイント

WSLgの技術的なポイントや、どのような考え方で現在のソフトウェア構成を選択したのか、オープンソース化した理由や、GUIアクセラレーションの詳細などは、次のページに詳しい説明が掲載されている。

重要なポイントをざっくりまとめると次のようになる。

  • WSLでGUIアプリケーションのサポートの検討を始めた時、まず、X11とWaylandの双方のアプリケーションをサポートしたいと考えた。LinuxデスクトップコミュニティはWaylandへ向かっており、ユーザーが対応を望んでいたアプリケーションの多くはX11ベースだったものの、Waylandをサポートすることも重要だと考えた。
  • ユーザーエクスペリエンスの面では統合されたデスクトップにしたいと考えた。Linux GUIアプリケーションとWindows GUIアプリケーションが統一されたデスクトップ上で同じように実行されることが重要だと考えた。
  • WSLgの技術的な中心部はWestoneコンポーザーと大幅に拡張されたRDPバックエンド、新しいRAIL/VAILシェルで構築されている。RDPバックエンドはさまざまな方法で拡張されており、デスクトップ全体ではなく、ウィンドウごとにリモートで動作することが可能になっている。また、マルチモニタもサポートするように変更した。
  • オーディオの入出力にはPulse Audio Serverを使うことにした。
  • 最初に起動するのはWSLGdデーモンであり、ここからWestoneとPulse Audio Serverが起動され、ホストとRDP接続を確立する。セットアップ終了後にはこれらを監視し、クラッシュしたり動作しなくなった場合には再起動を実施する。
  • WSLにおいてGPUをサポートする機能はすでに提供されているが、今回はもっと一般的なAPIをネイティブに近いパフォーマンスで利用できるようにした。
  • WSLgはオープンソースであり、WSL2とWindows間の通信のすべては標準化されたプロトコルやオープンソースソフトウェアとして公開されているものを使っている。ソースコードはGitHub.comでホストしており、開発者が望めばいじれるようにしておきたいと考えている。

Microsoftは今後しばらくの間WSLgを積極的に開発することを計画している。最初は主に互換性の向上やパフォーマンスの向上、バグの修正などが取り組まれるものと見られる。

参考