Waylandコンポジタとウィンドウマネージャの分離
概要
Waylandの従来型コンポジタはモノリシック構造で、コンポジタとウィンドウマネージャを一体化。
新しいriver 0.4.0はこれを分離し、ウィンドウマネージャを独立したプログラムに。
river-window-management-v1プロトコルにより、ウィンドウ管理の柔軟性とパフォーマンスを両立。
開発体験の向上や多様なウィンドウマネージャ実装が可能に。
今後の課題やロードマップについても解説。
river 0.4.0:非モノリシックWaylandコンポジタの設計
- 従来のWaylandコンポジタはコンポジタ・ウィンドウマネージャを単一プロセスで実装
- river 0.4.0ではウィンドウマネージャを独立プロセスとして分離
- 複数のウィンドウマネージャがriverと互換性を持ち、選択肢が拡大
- river-window-management-v1プロトコルがウィンドウ管理の全権限をウィンドウマネージャに委譲
- river本体は描画や低レベル処理、フレームパーフェクトなレンダリングを担当
WaylandとX11のアーキテクチャ比較
- X11はディスプレイサーバ・コンポジタ・ウィンドウマネージャが別プロセス
- 入力イベントやバッファのやり取りにラウンドトリップが発生し、遅延の原因
- Waylandはディスプレイサーバとコンポジタを統合し、入力遅延を解消
- 伝統的なWaylandはさらにウィンドウマネージャも統合
- riverはここを分離し、設計の柔軟性と実装の容易さを実現
river-window-management-v1 プロトコルの設計
- ウィンドウマネージャに最大限の制御権限を付与しつつ、Waylandの低遅延やフレームパーフェクトな描画を維持
- 毎フレームや毎入力イベントでのラウンドトリップ不要、入力遅延の増加なし
- フレームパーフェクト:ウィンドウのレイアウト変更時も、隙間や重なりが発生しない描画
- ウィンドウのバッファ提出を短時間待機し、応答なければ即描画でレスポンス確保
ウィンドウ管理状態マシン
- 管理する状態をウィンドウ管理状態(サイズ、フォーカス等)と描画状態(位置、装飾等)に分離
- river-window-management-v1はこれらの変更をアトミックにバッチ処理
- manage sequenceでウィンドウ管理状態、render sequenceで描画状態を更新
- 変更がなければウィンドウマネージャはアイドル状態、必要時のみ起動
- この仕組みはriver以前から存在し、river-classicやswayにも類似実装あり
riverの分離設計による利点
- ウィンドウマネージャ開発の敷居を大幅に低減
- ウィンドウ管理ポリシーに集中でき、Waylandコンポジタ全体の実装不要
- クラッシュしてもセッションが維持され、再起動や切替が容易
- 高水準言語やGC搭載言語での実装もパフォーマンスに影響しにくい
- 多様なウィンドウマネージャの登場を促進し、X11時代の多様性に近づく
現時点の制約と今後の展望
- VRや3Dデスクトップなど、従来の2Dデスクトップから逸脱した用途は未対応
- 複雑な視覚効果(例:wobbly windows)は現状非対応、今後の課題
- ウィンドウ管理ポリシーの制約はプロトコル拡張で対応可能
- river 1.0.0に向けて、ウィンドウマネージャの起動・切替UX改善を検討中
- river 0.4.0対応のウィンドウマネージャは今後も後方互換性を維持予定
サポートと寄付のお願い
- riverの開発は持続的な資金支援が必要
- liberapayによる定期寄付や、GitHub Sponsors・ko-fiでの支援を歓迎
river対応ウィンドウマネージャの例(ギャラリー)
- Canoe:クラシックな外観のスタッキング型ウィンドウマネージャ
- reka:Emacsベースのriver用ウィンドウマネージャ(EXWM類似)
- tarazed:集中力を重視したパワフルなデスクトップ体験
- rhine:再帰的・モジュラー設計とアニメーション対応
riverの非モノリシック設計により、Waylandデスクトップの多様性と開発体験が大きく進化。今後の発展にも注目。