- In bisherigen Wayland-Umgebungen waren Compositor und Fenstermanager in einem einzigen Programm zusammengefasst; river 0.4.0 trennt sie jedoch in separate Prozesse
- Das neue Protokoll river-window-management-v1 gibt dem Fenstermanager die vollständige Kontrolle über Richtlinien wie Fensterplatzierung und Tastaturkürzel und bewahrt dabei Frame-Perfektion sowie die Performance
- Diese Struktur arbeitet ohne Eingabelatenz und gewährleistet selbst bei komplexen Tile-Layouts durch atomare Status-Updates sauberes Rendering
- Dank der getrennten Struktur kann der Fenstermanager unabhängig entwickelt und neu gestartet werden und lässt sich auch in höheren Programmiersprachen leicht implementieren
- Dieser Ansatz fördert eine größere Vielfalt an Fenstermanagern im Wayland-Ökosystem; river unterstützt bereits mehr als 15 kompatible Manager
Traditionelle Wayland-Struktur und rivers Ansatz der Trennung
- Bisherige Wayland-Compositoren integrieren Display-Server, Compositor und Fenstermanager in einem einzigen Prozess
- Der Display-Server leitet Eingabeereignisse weiter und übergibt Anzeige-Buffer an den Kernel
- Der Compositor kombiniert die Buffer mehrerer Fenster zu einem finalen Bild
- Der Fenstermanager übernimmt Benutzerrichtlinien wie Fensteranordnung und Tastaturkürzel
- In der X11-Architektur läuft der Display-Server als separater Prozess, was zu unnötigen Roundtrips und Latenz führt
- Wayland hat zur Lösung dieses Problems Server und Compositor zusammengeführt, doch die Kopplung auch des Fenstermanagers ist nicht zwingend erforderlich
- river hebt diese Kopplung auf und trennt den Fenstermanager als eigenes Programm heraus
Designprinzipien des Protokolls river-window-management-v1
- Entwickelt, damit der Fenstermanager maximale Kontrolle erhält und gleichzeitig die Vorteile von Wayland erhalten bleiben
- Es sind keine Roundtrips bei jedem Frame oder Eingabeereignis nötig, es entsteht keine Eingabelatenz
- Erhalt der Frame-Perfektion: Wenn Fenster neu geöffnet oder in der Größe verändert werden, wird eine Bildaktualisierung ohne Lücken oder Überlappungen sichergestellt
- Das Rendering wird verzögert, bis alle Fenster neue Buffer eingereicht haben; nach Ablauf einer bestimmten Zeit wird jedoch per Timeout weiterverfahren
- Je sauberer eine Anwendung implementiert ist, desto vollständiger ist die Frame-Synchronisierung möglich
Fenstermanagement-Struktur auf Basis einer State Machine
- Das Protokoll trennt den Zustand in Fenstermanagement-Status und Rendering-Status
- Fenstermanagement-Status: Fenstergröße, Vollbildstatus, Tastaturfokus, Tastaturkürzel usw.
- Rendering-Status: Fensterposition, Reihenfolge, Dekorationen, Cropping usw.
- Änderungen werden in atomaren Updates (manage/render sequence) gebündelt verarbeitet
- Der Compositor startet die Sequenz; wenn es keine Zustandsänderungen gibt, bleibt der Fenstermanager im Wartezustand
- Diese Struktur formalisiert Konzepte, die in river-classic, sway und anderen bereits implizit vorhanden waren, explizit und systematisch
Vorteile der getrennten Struktur
- Entwickler von Fenstermanagern können sich auf Richtlinien konzentrieren, ohne einen kompletten Compositor implementieren zu müssen
- Debugging und Neustart sind einfacher, ein Absturz des Fenstermanagers beendet nicht die gesamte Sitzung
- Auch in garbage-collected Sprachen geschrieben entsteht kein Performanceverlust; der Betrieb bleibt ohne Frame-Verzögerung
- Es gibt bereits mehr als 15 river-kompatible Fenstermanager, und es wird eine Vielfalt auf X11-Niveau erwartet
Einschränkungen und weitere Pläne
- Das Protokoll unterstützt derzeit nur 2D-Desktop-Umgebungen, VR und Ähnliches werden nicht unterstützt
- Komplexe visuelle Effekte (z. B. wackelnde Fenster) liegen außerhalb des Umfangs, einfache Animationen sind jedoch möglich
- Künftig wird Unterstützung für Custom Shader geprüft, kurzfristig ist das jedoch nicht geplant
- river 0.4.0 ist für den Alltagseinsatz ausreichend, vor dem Übergang zu Version 1.0.0 sind jedoch noch UX-Verbesserungen vorgesehen
- Zur Fortführung der Entwicklung wird um Unterstützung über liberapay, GitHub Sponsors, Ko-fi gebeten
Beispiele und Galerie
- Es werden verschiedene unter river laufende Fenstermanager vorgestellt
- Canoe: klassischer Stacking-Fenstermanager
- reka: Emacs-basierter Fenstermanager
- tarazed: fokussierte Desktop-Umgebung
- rhine: rekursives, modulares Fenstermanagement mit Animationsunterstützung
- Darüber hinaus gibt es zahlreiche weitere river-kompatible Fenstermanager
1 Kommentare
Hacker-News-Kommentare
Es fällt mir schwer zu verstehen, warum es in den Kommentaren so viel Unzufriedenheit mit Wayland (dem Protokoll) gibt
Bibliotheken wie wlroots haben die schweren Teile bereits übernommen, und jetzt bietet river Abstraktionen auf höherer Ebene
Das Wayland-Projekt hätte solche Abstraktionen vielleicht früher bereitstellen können, aber ich denke, das hätte jeder tun können
Letztlich bekommen wir diese Fortschritte kostenlos, also sehe ich keinen Grund, sich zu beschweren, nur weil es niemand anders für uns erledigt
Auch Barrierefreiheit wurde als Sicherheitsrisiko betrachtet, was das Design erschwerte, und jetzt, wo wir ins Zeitalter von Agentic AI eintreten, könnte das ein interessanter Punkt werden
Pipewire füllt zwar Lücken, die Wayland offengelassen hat, aber es gibt weiterhin die Wahrnehmung, dass ein benutzerfreundliches Design fehlt
Trotzdem macht Wayland insgesamt zwei Schritte nach vorn, selbst wenn es zwischendurch ein oder zwei Schritte zurückgeht
Häufig heißt es sinngemäß „entweder auf meine Art oder gar nicht“, und auf externe Wünsche wird wenig flexibel reagiert
Dass alles kostenlos bereitgestellt wird, ist zwar gut, aber wenn Xorg eingestellt wird und es keine Alternative gibt, ist dieses erzwungene Durchdrücken problematisch
Bei diesem Projekt hatte ich zum ersten Mal das Gefühl, dass Wayland keine Zeitverschwendung ist
Ich finde nicht, dass ein Display-Server unbedingt auch noch das Fenstermanagement kompliziert übernehmen muss
Dass Wayland ursprünglich Window Manager und Compositor zusammengelegt hat, war vermutlich einfach der Weg des geringsten Widerstands
Die Remote-Zugriffsfunktionen bleiben allerdings ein Problem. Unter X11 funktionierte das gut, unter Wayland gab es viele Bugs
Wayland hat das durch die Integration gelöst, dafür sind aber andere Nebenwirkungen entstanden
Die API-Grenzen sind gut gezogen, was das Teilen von Code einfach macht
Ich frage mich, ob der 90-Grad-Rotationsbug ein Problem des Compositors oder von wlroots ist
Ich denke, hier wird gerade erst einer von Waylands vielen Designfehlern behoben
Bis es gemeinsame Protokolle gibt und Window Manager den Reifegrad von X11 erreichen, dürften noch einmal 15 Jahre vergehen
Und am Ende wird wahrscheinlich wieder jemand kommen, der „etwas Besseres“ bauen will, Wayland verwirft und neu anfängt
Nach viel Ärger mit UEFI bin ich schließlich zu Samsung DEX gewechselt
Die Grenzen sind aus meiner Sicht weniger technisch als vielmehr politisch
Als Linux-Nutzer seit 25 Jahren bin ich seit dem Wechsel zu Wayland vor 5 Jahren zufrieden, vor allem weil ich seitdem kein Tearing mehr habe
Für Entwickler mag dadurch mehr Arbeit entstehen, aber aus Nutzersicht ist es eindeutig eine Verbesserung
Ich frage mich, ob ich darüber irgendwann genauso weiterreden werde wie Leute, die früher den CDE-Funktionen nachtrauerten
River war schon vor der Trennung großartig. Ich freue mich auf die weitere Entwicklung
Ich bin kurzzeitig zu Niri gewechselt, werde aber irgendwann wohl zurückkehren
Für Xmonad-Nutzer dürfte River am besten passen
Mich würde interessieren, ob in River neue Fenster über dem aktuell ausgewählten Fenster eingefügt werden
Und nach der Trennung würde ich auch gern wissen, wie das Projekt auf Window-Manager-Seite heißen wird
Im Grunde erfinden wir die Funktionen von X11 Stück für Stück neu
Vielleicht kann ein Wayland-Fenster irgendwann sogar seine eigene Position kennen
Wahrscheinlich wird man darauf noch eine Weile warten müssen
Den Desktop werden wohl Android, ChromeOS oder VMs auf Windows/macOS übernehmen
Ich nutze einen vollständig angepassten River-Window-Manager
Unter Hyprland war standardmäßig nur BSP-Tiling möglich, was unpraktisch war, während ich in River genau das gewünschte gleichmäßige Tiling umsetzen kann
Diese Trennung hat meinen Workflow stark verändert
Ich war früher i3-Nutzer, und dank hy3 konnte ich Hyprland verwenden
Meine Konfiguration steht in den dotfiles
Soweit ich weiß, war eines der zentralen Konzepte von Wayland die Integration von Window Manager und Compositor
Ich frage mich, warum man das so entworfen hat
Wayland verarbeitet das synchron und beseitigt dadurch visuelle Inkonsistenzen
Dieses neue Protokoll ist ein Versuch, den Leistungsvorteil beizubehalten und gleichzeitig Grafikserver und Window Manager zu trennen
Dass man unter Wayland keine austauschbaren Plug-in-Window-Manager einfach ersetzen kann, ist im Vergleich zu X11 für mich der größte Verlust
Menschen, die solche Probleme lösen wollen, sind wirklich selten und wertvoll
Ich hoffe, dass Ebenen wie River oder Wayback diese Rolle übernehmen können
Ich habe selbst experimentelle Desktop-Ideen, muss aber wegen der schnellen Iteration zwangsläufig mit X11 anfangen
Wayland hat nach wie vor Designschwächen
Der Standard muss keine bestimmte Struktur erzwingen
Ich nutze seit 15 Jahren i3, und bei solchen Projekten frage ich mich jedes Mal, wofür Wayland überhaupt nötig ist
X11 hat zwar Nachteile, aber fast alles, was ich will, ist damit möglich
Wayland wirkt immer so, als bringe es ständig Reibung mit sich
Für mich als Laptop-Nutzer war das ein großer Vorteil, und Unterstützung für VRR oder HDR ist ebenfalls deutlich einfacher als unter X.org
DPI-Anpassung pro Display, kein Tearing und das standardmäßige Blockieren unerlaubter Bildschirmaufnahmen durch Apps sind damit von Haus aus gelöst
Dass ich nicht mehr an der Xorg.conf herumarbeiten muss, hat meine Lebensqualität verbessert
Ich nutze bis heute unterschiedliche Skalierungsfaktoren je Monitor
Ich brauche eine Funktion, bei der ein Fenster auch im inaktiven Zustand Eingaben empfangen kann, wobei nur Mausbewegungen ausnahmsweise funktionieren
Am Ende habe ich auf Window Event umgestellt, aber es bleibt unbequem