現在プレビュー中のWindows 10に搭載されているLinux環境WSL(Windows Subsystem for Linux)では、LinuxのGUIアプリを起動することが可能になった。もちろん、プレビュー版のWindows 10でしかいまのところ動作しないが、早ければ今年秋のアップデートで通常版に入る可能性がある。
LinuxのGUIアプリケーションは、ChromeBookのLinux環境(Crostiniと呼ばれる)では、すでに対応しており、Chromebookのアプリケーションエコシステムの拡大に寄与している。WSLは、昨年夏にLinux GUIアプリケーション対応を発表はしたが、ようやくプレビューが開始されたところ。この機能はWSLgと呼ばれ、X Window SystemとWaylandに対応したLinuxのGUIアプリをWindowsのデスクトップにウィンドウとして表示することが可能になっている。アプリのインストールは、WSL2側で行うが、インストーラーが行うメニュー登録などの機能を利用して、Windowsのスタートメニューに起動アイコンを登録できる。
Crostiniもこのあたりは同等で、Linux側でインストールしたLinux GUIアプリは、Chromebookのラウンチャーに登録され、アイコンから直接起動ができる。WSLgやCrostiniの概要については、すでにいろいろとニュースや記事があるので、それを参考にしてほしい。
このWSL2/WSLgとCrostiniをざっと比較したのが(表01)だ。比較は、筆者が思いついた項目で行っている。総論的にいえば、多少の違いはあるものの、いまのところどちらも同程度で、どっちが優れているとも言い切れない感じである。このため、Crostiniがいいのか、WSLgがいいのかは、結局、Chromebookがいいか、Windows 10 PCがいいかという話になりそうだ。
■表01 | ||
名前 | WSLg(Preview) | Crostini(β版) |
---|---|---|
バージョン | Build 21381.1 | CromeOS 90.0.4430.218(安定版) |
実行環境技術 | 軽量ユーティリティ仮想マシン | termina仮想マシン |
Linuxネイティブファイルシステム | ext4(ubuntu-18.04) | btrfs(debian 10) |
Linuxディストリビューション配布形式 | appx | LXC |
ネイティブファイルシステムへのアクセス | /mnt/c | /mnt/chromeos |
ホストからのファイルアクセス | \\wsl$\ディストリビューション名 |
Linuxファイル(ファイルアプリ) |
LinuxとホストのLocalhost | 同等 | 同等 |
Screen Reader | × | × |
ホストソフトキーボード入力 | △(日本語入力ができない) | × |
日本語入力 | Linux側で要対応 | Linux側で要対応 |
GUIアプリのネイティブ側登録 | ○ | ○ |
音声入出力 | 可 | 可(マイクは要設定) |
カメラアクセス | × | × |
USBデバイス | × | △(対象は限定) |
外部ストレージ(Linuxファイルシステム) | ○(要ホスト側設定) | × |
GPUサポート | ○ | 可(実験機能) |
Nested VM | ○ | × |
WSLgとcrostini、基本的な仕組みはほぼ同じ
WSLgもcrostiniも仮想マシンとコンテナー技術を使ってホストOSの上にLinux環境を実現している。Windowsの場合は、まったく違うプラットフォームなので、仮想マシンが必要になるが、Chromebookの場合には、ホスト側もLinuxカーネルを使う。しかし、ChromeOSは、OS自体へのアクセスが制限されており、セキュリティを低下させないため、仮想マシンを使って、ChromeOS自体とは分離させている感じがある。
どちらも、Linuxの実行環境、いわゆるディストリビューションに相当するものは、コンテナー技術を使ってインストールしている。crostiniは、LXCを使ってLinux環境を「パッケージ」化している。これに対して、WSLgは、配布形式にMicrosoftストアの標準形式であるAppxを使い、Linuxディストリビューションを仮想ハードディスクファイル(vhdx)ファイルにインストールする。
比較の詳細
簡単に比較項目について解説しておく。なお、評価はWSLgが「Windows 10 Build 21382」、ChromeOSが「90.0.4430.218」である。また、WSLgは、Linux環境としてUbuntu-18.04をインストールして利用、crostiniは、標準であるDebian 10(buster)だ。表の作成にあたり、基本的には、動作を確認した。
まずは、ファイル関連の機能だが、基本的には、どちらもホスト側とのファイル交換は可能だ。WSLgでは、標準でWindowsのCドライブが「/mnt/c」にマウントされた状態となる。また、ホスト側(Win32側)からは、「\\wsl$\ディストリビューション名」という仮想的なネットワークホストを介してLinux側のファイルシステムにアクセスができる。これに対して、Crostiniでは、ホスト側の「ファイル」アプリでフォルダーを「Linuxと共有」することでLinux側の「/mnt/cromeos」からアクセスが可能になる。ホスト側からは、同じくファイルアプリで「Linuxファイル」を開けばユーザーのホームディレクトリが見える。
ネットワークも、特に設定なく利用できる。ただし、仮想マシン内なので、どちらも仮想ネットワークに接続しており、ホストとは違うIPアドレスが割り当てられている。Linux環境側でWebサーバーなどを立ち上げ接続待ち状態にしたときには、ホスト側からlocalhostでLinux側に接続できるようになっている。
デバイスアクセスだが、まず、サウンド機能は、WSLg、crostiniともに出力、入力が可能。これは、自動的に設定されるので、ユーザーは特に何もする必要がない。しかし、Webカメラは、内蔵、外付けともに、WSLg、crostiniではLinux側からアクセスができなかった。
crostiniは部分的にUSBデバイスに対応
USBデバイスに関しては、WSLgは未対応、crostiniでは、特定のタイプのUSBデバイスのみLinux環境で利用が可能だ。Chrombookの「設定 ⇒ デベロッパー ⇒ Linux開発環境(ベータ版) ⇒ USBデバイスを管理する」(写真01)に表示されたデバイスのみがLinux側で利用できる「可能性」がある。ChromebookにAndroidスマートフォンをUSB接続して、アプリケーション開発用のadbコマンドを使うことは普通に行える。これは、AndroidのUSBデバッグ接続(ADBと呼ばれる)に関しては、すでに対応が完了しているからだ。
しかし、USBメモリを接続すると、前記の設定ページにUSBメモリが表示され、Linuxでの利用を許可することができる。Linux側ではlsusbやlsblkコマンドでは、USBメモリに相当するデバイス(写真02)が見えるがマウントすることはできなかった。crostiniの場合、chromeOSの下で仮想マシンterminaが動作しており、その中にlxcコンテナー(標準ではpenguinという名前)がある。前記の設定では、仮想マシンterminaはUSBメモリを認識しており、/dev/sdaというブロックデバイスが割り当てられている(写真03)。lsusbやlsblkで見えるのはこれなのであろう。しかし、lxcコンテナーには/dev/sdaへのアクセスが許されていないため、crostini内のLinuxではマウントができなかったようだ。ただ、USBメモリに関していえば、ChromeOS側でマウントし、これをLinux側と共有することができるので、実質アクセスは可能で、crostini側でマウントしなければならない必然性はない。
WSLgは、USBデバイスには対応していないが、Linux側でも仮想マシン支援機能が利用できる。WSLgでは/proc/cpuを開いてCPUの機能を調べると、仮想マシン支援機能であるvmxやsmxが表示されるが(写真04)、crostini側は未対応のようだ。このためWSLgでは、KVM(Kernel Virtual Machine)が利用でき、QEMUなどが利用できる。ただし、このためには、Windows側でNested VM機能が有効になっている必要がある(もちろんCPUが対応している必要もある)。
こんな感じで、WSLgとcrostiniは、ほぼ互角という感じである。どちらも純粋なLinux環境とは違う部分があるものの、dockerが動作したり、GPUが利用できるなど、かなり「本物」に近いところまで来ているといえる。ただ、crostini自体はまだβ版扱いであり、GUIに対応しないWSL2は正式版にはなっているものの、GUIアプリ対応のWSLgは、プレビュー版のWindowsでしか動かない。Linux、Android、Web系の開発には十分利用できそうなので、開発系の方はそろそろ検討してみてもいいかもしれない。