概要
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デスクトップの多様性と開発体験が大きく進化。今後の発展にも注目。