Wayland
Waylandのデモ
作者Kristian Hogsberg
開発元freedesktop.orgその他
初版2008年9月30日 (15年前) (2008-09-30)[1]
最新版Wayland: 1.21, Weston: 11.0.1 / 2022年6月30日 (22か月前) (2022-06-30)
リポジトリ
gitlab.freedesktop.org/wayland/wayland
Wayland は、ディスプレイサーバとクライアント間の通信方法を記述した通信プロトコルである。また、そのプロトコルをCで実装したライブラリでもある。Waylandプロトコルを使用したディスプレイサーバをWaylandコンポジタと呼ぶ。これは、このディスプレイサーバがコンポジット型ウィンドウマネージャの機能も持つためである。
Waylandは当初、Kristian Hogsberg率いるボランティアによって、フリーかつオープンソースコミュニティ主導のプロジェクトとして開発されていた。このプロジェクトは、Linuxやその他のUnix系OSにおいて、X Window Systemをモダンで安全で[4][5][6][7]よりシンプルなものに置き換えることを目的としている。プロジェクトのソースコードは、パーミッシブ・ライセンスのひとつであるMITライセンスで公開されている[8][3]。
成果の一部として、WaylandプロジェクトはWestonと呼ばれるWaylandコンポジタのリファレンス実装も開発した。
概要
Linuxカーネルのevdevモジュールは、イベントを受けとり、Waylandコンポジタへ送る。
Waylandコンポジタはシーングラフを見渡し、どのウィンドウがそのイベントを受け取るべきかを決定する。 シーングラフは画面に表示されているものに対応しており、Waylandコンポジタはイベントが適用されるシーングラフ内の要素との変換が分かる。そのため、Waylandコンポジタは逆変換することで、正しいウィンドウが分かり画面上の座標をウィンドウ内の座標へ変換することができる。ウィンドウに適用できる変換は、コンポジターが適用できることだけに限られ、入力イベントに対して逆変換できることに限られます。
Xの場合、クライアイントはイベントを受け取ると、反応してUIを更新する。しかし、Waylandの場合、クライアントはEGLを通じてレンダリングし、コンポジタへ更新された範囲を通知するために要求を送るだけである。
Waylandコンポジタはクライアントから変更箇所のリクエストを集め、スクリーンを再構成する。それからコンポジタは、KMS(英語版)による画面の再描画をスケジューリングするため、ioctlを直接発行する。
コンポジット型ウィンドウマネージャがアプリケーションやグラフィクスハードウェアと直接通信できる方法を、Waylandが提供する。具体的には、各アプリケーションは自身のバッファに画像を描画し、ウィンドウマネージャがディスプレイサーバとしてそれらバッファを合成して、ディスプレイ上に各アプリケーションウィンドウを作り出す。これは、コンポジット型ウィンドウマネージャとX Window Systemを一緒に使う従来の方法より効率的かつシンプルである[9]。
Waylandはグラフィクス周りのみに特化しており、入力ハードウェアとの通信には他のライブラリを使用することを想定している。
Waylandディスプレイサーバプロジェクトは、Red Hatの開発者であったKristian Hogsbergによって、2008年に開始された[10]。
2010年頃、Linuxデスクトップのグラフィックスは、「中心にあるXサーバとやり取りするためだけの山積みのレンダリングインタフェース」を持つ状態から、"XやWaylandのようなウィンドウシステムを脇に退けて"、Linuxカーネルやそのコンポーネント(たとえばダイレクト・レンダリング・インフラストラクチャ(DRI)、ダイレクト・レンダリング・マネージャ(DRM)(英語版)を間に置くように移行した。その結果、グラフィックシステムはシンプルになり、より柔軟性があり、より良いパフォーマンスを発揮するようになった[11]。
Hogsbergは、多くの最近のプロジェクトと同様にXへの拡張(英語版)を追加することもできたが、クライアントとハードウェアの間のホットなパスからXを[締め出す]ことを採用した。その理由について、プロジェクトのFAQには以下のとおり記載されている[8]。.mw-parser-output .templatequote{overflow:hidden;margin:1em 0;padding:0 40px}.mw-parser-output .templatequote .templatequotecite{line-height:1.5em;text-align:left;padding-left:1.6em;margin-top:0}
今や異なるのは、多くのインフラストラクチャがXサーバからカーネル(メモリ管理、コマンドスケジューリング、モードセッティング(英語版)やライブラリ(cairo, pixman, FreeType, Fontconfig, Pango等)に移行したことだ。