Windows Ver.1.0が登場した1980年台、多くのプラットフォームがGUIを装備しようとしていた。当時、急速に発展したUnixワークステーションは、当時俗に「メガマシン」と呼ばれたスペック(1 MIPSのCPU、1メガピクセルのディスプレイ、1メガバイトのメモリ)でイーサーネット装備を想定して作られ、Windowsよりも高い性能のハードウェアを前提にしていた。これに対して1984年のWindows 1.0では、クロック周波数8 MHzの80286のIBM PC/AT、グラフィックスはEGAで640x350ドットを想定していたが、それ以下となるIBM PCとCGAの組合せでも動作できるように作られた。

1980年台、多くのUnixワークステーションで採用されたのがX Window System(Xという名前のウィンドウシステム)である。X最大の特徴は、ネットワークを介して表示が行えるように「プロトコル」として設計されたことだ。Xが動作しているなら、簡単にウィンドウを別のマシンに表示できる。アプリケーションの起動オプションで表示先(たとえば“-display hostx:0”)を付けるだけだった。Windowsで他のマシンに画面を表示できるようになるのは、1998年のWindows NT 4.0にTerminal Service(今で言うリモートデスクトップ)が、搭載されてからである。ある意味、Windowsは、Xを追いかけていた。

X自体は、キーボード、マウスの処理と描画などを行うディスプレイサーバーの立場に止まりユーザーインターフェースを定義せず、ウィンドウマネージャー(ウィンドウの配置やタイトルなどを管理)や、GUIツールキットなどを組み合わせてGUI環境を構築できるようにしていた。このため、Unix、Linuxでは、多数のデスクトップ環境が作られた。

最近では、Xではなく、ディスプレイマネージャーとウィンドウマネージャーを兼ねるWaylandに切り替わりつつある。Xとは互換性はないもののWaylandもプロトコルとして定義されている。Xが作られた当時はスタック型と呼ばれるデスクトップ表示が標準的だったが、さすがに1980年台と今ではハードウェア環境が異なる。Waylandは、ウィンドウをGPUなどで合成してデスクトップを表示するコンポジット型ウィンドウマネージャーの機能を持つ。Waylandでも従来のX用アプリケーションが、動作できるようにXディスプレイサーバーとして動作できるXWaylandが用意され互換性は保たれている。

WindowsのWSL(Windows Subsystem for Linux)では、このWaylandをベースにしたGUIスタックWSLgを持つ。ただし、これは、WSLのディストリビューションとは異なるSystemディストリビューションの中で動く。XやWaylandがプロトコルとして定義されていることをうまく利用した形だ。さらに、RDP(Remote Desktop Protocol。リモートデスクトップのためのプロトコル)のローカルの仮想環境の表示高速化で開発された機能を使って、ホスト側のデスクトップにLinux GUIアプリケーションのウィンドウを表示させている。

・WSLg Architecture

https://devblogs.microsoft.com/commandline/wslg-architecture/

ChromebookのLinux開発環境(Crostini)も同じくLinuxのGUIアプリケーションに対応している。sommelierと呼ばれるモジュールを使い、ホスト(ChromeOS)側のWaylandに描画を行わせる。

・Crostini developer guide

https://chromium.googlesource.com/chromiumos/docs/+/HEAD/crostini_developer_guide.md#what-is-all-this-stuff

WSLは、いまだにディストリビューション側にLinux IMEをインストールしないと、Linux GUIアプリケーションで日本語入力ができない。しかも、IME関連のウィンドウが別のディスプレイに出てしまうなどまだ問題が残る。これに対してCrostiniはホスト側のIMEを利用するための“cros im”がプレビュー中である(写真01)。

・cros_im

https://chromium.googlesource.com/chromiumos/platform2/+/HEAD/vm_tools/cros_im/README.md

写真01: Chromebookブラウザのchome://flagで、“Crostini IME support”を有効にすると、cros imが動作し、geditのようなGTK Linux GUIアプリケーションでChromeOS側のIMEによる入力が可能になる。このほかにVisual Studio Codeなどのelectron系アプリにも対応する。ただし、Chromebookが英語キーボードの場合には、さらに設定が必要になる

geditやvscodeでChromeOS側のIMEが使えるようになる。どっちにしてもmozcというツッコミは置いといて、技術的な意味やCJK環境での意味は非常に大きい。

Xが登場して40年。中身は大きく変わったが、プロトコルとして機能を定義するというコンセプトはまだ健在のようである。

X Window System関連の資料を見ると、テーマ曲で“X”を連呼していた1974年の特撮番組「仮面ライダーX」を思い出す。もっとも、最近ではツイッターを思い出す人のほうが多いのかもしれないが……。