2 ポイント 投稿者 GN⁺ 2026-03-16 | 1件のコメント | WhatsAppで共有
  • 従来のWayland環境は、コンポジタとウィンドウマネージャが1つのプログラムとして結合された構造だったが、river 0.4.0ではこれを別プロセスに分離した
  • 新しいriver-window-management-v1プロトコルは、ウィンドウマネージャにウィンドウ配置やキーバインドなどのポリシー全般の権限を与えつつ、フレーム完全性(frame perfection) と性能を維持する
  • この構造は入力遅延(latency) なしで動作し、複雑なタイルレイアウトでも原子的な状態更新によって整ったレンダリングを保証する
  • 分離された構造により、ウィンドウマネージャは独立して開発・再起動可能であり、高水準言語でも実装しやすい
  • このアプローチはWaylandエコシステムにおけるウィンドウマネージャの多様性拡大を促進し、riverはすでに15個以上の互換マネージャをサポートしている

Waylandの従来構造とriverの分離アプローチ

  • 従来のWaylandコンポジタは、ディスプレイサーバ、コンポジタ、ウィンドウマネージャの3つの役割を1つのプロセスに統合していた
    • ディスプレイサーバは入力イベントをルーティングし、カーネルに表示バッファを渡す
    • コンポジタは複数ウィンドウのバッファを合成して最終画面を生成する
    • ウィンドウマネージャはウィンドウ配置やキーバインドなどのユーザーポリシーを担当する
  • X11の構造ではディスプレイサーバが別プロセスとして存在するため、不要な往復通信と遅延が発生した
  • Waylandはこれを解決するためにサーバとコンポジタを統合したが、ウィンドウマネージャまで結合することは必須ではない
  • riverはこの結合を解き、ウィンドウマネージャを別プログラムとして分離した

river-window-management-v1プロトコルの設計原則

  • ウィンドウマネージャが最大限の制御権を持ちながらもWaylandの利点を維持できるよう設計されている
  • 毎フレームや入力イベントごとに往復通信を必要とせず、入力遅延がない
  • フレーム完全性(frame perfection) を維持: ウィンドウが新しく開いたりサイズ変更されたりするときに、隙間や重なりのない画面更新を保証する
    • すべてのウィンドウが新しいバッファを提出するまでレンダリングを遅らせるが、一定時間を超えた場合はタイムアウトで処理する
  • よく実装されたアプリケーションほど、完全なフレーム同期が可能になる

状態マシンベースのウィンドウ管理構造

  • プロトコルは状態をウィンドウ管理状態レンダリング状態に分ける
    • ウィンドウ管理状態: ウィンドウサイズ、フルスクリーンかどうか、キーボードフォーカス、キーバインドなど
    • レンダリング状態: ウィンドウ位置、順序、装飾、クロップなど
  • 変更事項は原子的更新(manage/render sequence) としてまとめて処理される
  • コンポジタがシーケンスを開始し、状態変化がないときはウィンドウマネージャが待機状態に保たれる
  • この構造は既存のriver-classicやswayなどにも内在していた概念を明示的に定式化したものだ

分離構造の利点

  • ウィンドウマネージャ開発者はコンポジタ全体を実装する必要なく、ポリシーに集中できる
  • デバッグと再起動が容易で、ウィンドウマネージャのクラッシュがセッション終了につながらない
  • ガベージコレクション言語で書いても性能低下がなく、フレーム遅延なしで動作する
  • すでに15個以上のriver互換ウィンドウマネージャが存在し、X11並みの多様性拡大が期待される

限界と今後の計画

  • 現在のプロトコルは2Dデスクトップ環境のみをサポートし、VRなどには未対応
  • 複雑な視覚効果(例: 揺れるウィンドウ)は対象外だが、単純なアニメーションは可能
  • 今後カスタムシェーダ対応を検討中だが、短期的な計画ではない
  • river 0.4.0は日常利用に十分であり、1.0.0への移行前にUX改善が予定されている
  • 開発継続のため、liberapay、GitHub Sponsors、Ko-fiを通じた支援を呼びかけている

例とギャラリー

  • riverで動作するさまざまなウィンドウマネージャの例を紹介
    • Canoe: クラシックなスタッキング型ウィンドウマネージャ
    • reka: Emacsベースのウィンドウマネージャ
    • tarazed: 集中型デスクトップ環境
    • rhine: 再帰的・モジュール型のウィンドウ管理とアニメーションをサポート
  • このほかにも多数のriver互換ウィンドウマネージャが存在する

1件のコメント

 
GN⁺ 2026-03-16
Hacker Newsの意見
  • コメント欄での Wayland(プロトコル)に対する不満は理解しづらいと感じる
    wlroots のようなライブラリがすでに重い部分を処理しており、今では river がより高水準の抽象化を提供している
    Wayland プロジェクトがこうした抽象化をもっと早く提供できた可能性はあるが、誰にでもできたことだと思う
    結局、私たちはこうした進歩を無料で得ているのだから、誰かが代わりにやってくれないと不満を言う必要はないと思う

    • Wayland が初期にスクリーンショット禁止のような原則的立場を取ったことが問題の始まりだったと思う
      アクセシビリティの問題もセキュリティリスクと見なされ、設計が難しくなったが、今やAgentic AIの時代に入ってきていて、これは興味深い論点になりそうだ
      Pipewire が Wayland の取りこぼしを埋めつつあるが、依然としてユーザーフレンドリーな設計が不足しているという認識がある
      それでも Wayland は一歩か二歩後退しても、全体としては二歩前進していると思う
    • 不満の根本原因は Wayland コミュニティ、特にGNOME陣営の態度にあると思う
      「自分たちのやり方が嫌なら出ていけ」というような対応が多く、外部からの要望に柔軟ではない
      無料で提供されている点は良いが、Xorg が終了し代替もない状況で半ば強制的に押し進めるのは問題だと思う
  • 今回のプロジェクトを見て、初めて Wayland は時間の無駄ではないと感じた
    ディスプレイサーバーがわざわざウィンドウ管理まで複雑に担う必要はないと思う
    もともと Wayland がウィンドウマネージャとコンポジタを統合した理由は、単に抵抗の少ない道だったのだろう
    ただしリモートアクセス機能は依然として問題だ。X11 ではうまく動いていたものが Wayland ではバグが多かった

    • X11 は X server とウィンドウマネージャが分離されていたため、初期ウィンドウ配置のような問題を解決しにくかった
      Wayland はこれを統合して解決したが、別の副作用も生んだ
    • ほとんどの小規模な Wayland コンポジタはwlrootsや smithay のようなライブラリを使っている
      API の境界がうまく設計されていて、コード共有がしやすい
      90度回転バグが compositor 側の問題なのか wlroots 側の問題なのか気になる
    • X11 のリモートアクセスはひどいものだった。Wayland では EGL や Vulkan を通じてよりきれいにレイヤー化できるので、むしろ良いと思う
    • X11 ではウィンドウマネージャがデコレーションを担当していたため、分離しようとするとメッセージングや設定が複雑になる
    • おそらくデスクトップ環境が自分たちだけの生態系を作りながらはしごを外したのかもしれない
  • Wayland のさまざまな設計上の欠陥の一つが、ようやく修正され始めたのだと思う
    共通プロトコルが定着し、ウィンドウマネージャが X11 並みに成熟するまでには、さらに 15 年はかかりそうだ
    そして結局また誰かが「もっと良いものを作る」と言って Wayland を捨て、新しく始めるのだろう

    • だから最近はWSLや Virtualization Framework のようなものが、デスクトップ Linux の現実的な解決策だと思う
      UEFI の問題に悩まされた末、結局Samsung DEXに移った
    • Wayland を新しく作り直したとしても、結果は似たようなものになるだろう
      限界は技術的というより政治的な問題だと思う
  • Linux ユーザー歴 25 年だが、5 年前に Wayland に移行して以来、画面のティアリングの問題なしで満足している
    開発者の立場では仕事が増えるだろうが、ユーザーとしては明らかな改善だ

    • それでもウィンドウシェーディング機能がないのは残念だ
      昔の CDE の機能を懐かしむ人たちのように、自分もずっとこの話をし続けることになるのだろうかと思う
  • River は分離前から素晴らしかった。今後の発展が楽しみだ
    一時的に Niri に移ったが、いつかまた戻るつもりだ
    Xmonad ユーザーなら River がいちばん合うと思う

    • 自分も Xmonad を使っているが、Hyprland はmaster/slave スタックをきちんと扱えなかった
      River では新しいウィンドウが現在選択中のウィンドウの上に挿入されるのか気になる
      分離後はウィンドウマネージャ側のプロジェクト名が何になるのかも知りたい
  • 結局、私たちは X11 の機能を一つずつ再発明しているだけだ
    いつか Wayland のウィンドウが自分の位置を分かるようになるのかもしれない

    • 理想主義者たちは今でも仮想的な 2D ピクセルグリッドですら明示したがらない
      しばらくは待つことになりそうだ
    • だが今では GNU/Linux の大半はヘッドレスサーバーや組み込み向けに使われているので、大きな意味はないだろう
      デスクトップは Android、ChromeOS、あるいは Windows/macOS 上の VM が占めることになりそうだ
  • 自分は完全にカスタマイズしたRiver ウィンドウマネージャを使っている
    Hyprland では基本的に BSP タイリングしかできず不便だったが、River では望む通りの均等タイル配置が可能だ
    この分離は自分のワークフローに大きな変化をもたらした

    • 均等タイル配置を望むなら hy3 を見る価値がある
      自分も以前は i3 ユーザーだったが、hy3 のおかげで Hyprland を使えるようになった
    • 自分も Hyprland で似た問題に遭遇し、結局Niriに移って安定した開発環境を手に入れた
      自分の設定は dotfiles にまとめてある
    • BSP が何か聞きたい
  • Wayland の中核設計の一つはウィンドウマネージャとコンポジタの統合だったと理解している
    なぜそう設計したのか気になる

    • ウィンドウマネージャが別プロセスとして非同期通信するとフレーム同期の問題が生じる
      Wayland はこれを同期的に処理して視覚的な不一致をなくした
    • Wayland はコンテキストスイッチの最小化のために、すべてを 1 プロセスに入れた
      今回のプロトコルは、その性能上の利点を維持しつつ、グラフィックスサーバーとウィンドウマネージャを分離しようとする試みだ
  • Wayland ではプラグイン型ウィンドウマネージャを簡単に差し替えられない点が、X11 と比べた最大の損失だと思う
    こうした問題を解決しようとしている人たちは本当に貴重な存在だ

    • 何十年も同じウィンドウマネージャを使ってきた立場からすると、完全な代替インターフェースがなければ Wayland に移行しにくい
      River や Wayback のようなレイヤーがその役割を果たしてくれることを望む
    • この制約は新しい WM・DE 開発にとっても大きな障害だ
      自分にも実験的なデスクトップのアイデアはあるが、高速な反復が可能な X11 で始めるしかない
      Wayland には依然として設計上の弱点がある
    • 実際には、一つの実装だけがWM 拡張 APIを提供すれば十分だと思う
      標準で特定の構造を強制する必要はない
    • 理想的には、ルート Wayland サーバーの下にユーザーごとの Wayland サーバー、その中に X11 サーバー、さらにその上にウィンドウマネージャがある階層構造が最もきれいだと思う
  • 15 年間 i3 を使っているが、こういうプロジェクトが出るたびになぜ Wayland が必要なのか疑問に思う
    X11 には欠点があっても、やりたいことのほとんどは実現できる
    Wayland はいつも摩擦が多そうに見える

    • 自分は KDE 5 の時代から Wayland を使っているが、HiDPI スケーリングは素晴らしかった
      ノート PC ユーザーとして大きな利点であり、VRR や HDR のサポートも X.org よりはるかに容易だ
    • ユーザーの立場では、ただ普通によく動く
      ディスプレイごとの DPI 調整、画面ティアリング防止、そしてアプリによる無断スクリーン録画の遮断が標準で解決されている
    • i3 から sway に移った理由もDPI サポートだった
      もう Xorg.conf をいじらなくてよくなり、生活の質が上がった
      今でもモニターごとに異なるスケール比を使っている
    • X11 では高リフレッシュレート設定がいつも問題だった
    • 最近困ったのは、Wayland がDeviceEventをサポートしていないことだった
      ウィンドウが非アクティブでも入力を受け取る機能が必要なのだが、マウス移動だけが例外的に動く
      結局 Window Event に変えたが、やはり不便だ