X11に替わるものとして、いよいよGnomeやKDEの対応も完了し実用段階に入ったと言えるWaylandですが、「Wayland」という語が表すものが複数あるため混乱を招きやすいようです。
ここでは簡単に「Wayland」が持つ3つの意味を解説したいと思います。
(なおこの3つというのは公式が謳っているわけではなく筆者が観測した範囲で「Wayland」という語がどのように使われているかを独自にカテゴライズしたものであることをご了承ください)
ライブラリとしてのWayland
Waylandのリポジトリはここに有りますが、ビルドしてもいくつかのツールと、ライブラリが出来上がるのみで、これだけでX11サーバの代わりをしてくれるようなものではありません。
では、この「ライブラリとしてのWayland」は何者かというと、一言で表すと「プロトコル作成フレームワーク」です。
ビルドしてできるwayland-scanner
コマンドはXMLファイルに書かれたプロトコルの定義を読み取り、サーバー/クライアント双方のソースを生成します。ユーザーは生成されたソースとWaylandのライブラリを用いれば、エンディアンやアライメントに悩まされること無く通信するサーバー/クライアントアプリが作成できるというわけです。
なおWaylandリポジトリにはprotocol/wayland.xml
というプロトコルが定義されておりこれは「Waylandプロトコル」と呼ばれています。
プロトコルとしてのWayland
「Waylandプロトコル」といったとき前述のwayland.xml
で定義された狭義の「Waylandプロトコル」と、Waylandにより生成されたプロトコル全体を指す広義の「Waylandプロトコル」を表す場合の2通りの場合があります。
wayland.xml
で定義されたWaylandプロトコルは、Waylandコンポジタに対してクライアントアプリから、ウィンドウの作成や描画の要求。逆にWaylandコンポジタからクライアントアプリに対してマウス、キーボード、タッチなどのイベントの通知などが定義されています。
WaylandリポジトリにはWaylandプロトコル1種類しか定義されていませんが、例えばWaylandコンポジタのリファレンス実装であるwestonでは10種類を超えるプロトコル(xdg-shellプロトコル、desktop-shellプロトコル等)が定義されています。
アーキテクチャとしてのWayland
記事の冒頭でも書きましたが、Waylandはよく「X11を置き換えるもの」という説明がなされることが有ります。
その場合はこのアーキテクチャとしてのWaylandを指しています。
上図はWaylandのサイトにあるアーキテクチャ図です。②、③でWaylandプロトコルが使用されます。
この図のWaylandコンポジタが各アプリケーションの描画をコンポジションして実際の画面に描画する役割を果たします。
Waylandコンポジタには様々な実装があり、Waylandプロジェクトによるリファレンス実装がwestonです。
また最近はGnomeやKDEもWayland対応しており、それぞれMutter, KWinがWaylandコンポジタの役割を果たしています。
より学ぶために
実際に手を動かしてWaylandを学ぶための入門記事を書きました。参考にしてください。