Phoenix – ein moderner X-Server, von Grund auf neu in Zig geschrieben
(git.dec05eba.com)- Phoenix ist ein neuer X-Server, der von Grund auf in der Sprache Zig geschrieben wurde, ohne einen Fork von Xorg zu verwenden, und zielt auf eine moderne Alternative ab
- Derzeit können einfache Anwendungen, die GLX-, EGL- oder Vulkan-Grafik verwenden, verschachtelt innerhalb eines bestehenden X-Servers ausgeführt werden; ein eigenständiger Betrieb wird noch nicht unterstützt
- Für Einfachheit werden nur Anwendungen unterstützt, die in den letzten 20 Jahren geschrieben wurden, sowie Hardware aus den letzten 15 Jahren; der Server funktioniert ohne Server-Treiber-Interface
- Die Sicherheit wird verbessert, indem Protokollnachrichten automatisch geparst werden und der Zugriff zwischen Anwendungen durch eine Isolationsstruktur auf Basis von Berechtigungsanfragen eingeschränkt wird
- Moderne Technologien wie HDR, VRR, Multi-Monitor und ein integrierter Compositor werden unterstützt; außerdem sind Wayland-Kompatibilität und Erweiterungen des X11-Protokolls geplant
Überblick über Phoenix
- Phoenix ist ein moderner X-Server als Ersatz für den Xorg-Server, eine vollständig neu geschriebene Implementierung in Zig
- Kein Fork von Xorg, sondern mit Fokus auf eine einfachere und sicherere Architektur
- Derzeit ist es noch nicht vollständig für den produktiven Einsatz bereit und unterstützt nur den verschachtelten Betrieb innerhalb eines bestehenden X-Servers (nested mode)
- Hardwarebeschleunigtes Rendering auf Basis von GLX, EGL und Vulkan ist möglich
Ziele
Einfachheit
- Ein einfacherer Server als Xorg, der nur einen Teil des X11-Protokolls unterstützt
- Enthält nur die Funktionen, die für Anwendungen benötigt werden, die in den letzten 20 Jahren geschrieben wurden
- Zielhardware ist auf Geräte der letzten 15 Jahre beschränkt, die Linux DRM und Mesa GBM unterstützen
- Wie Xorg wird kein separates Server-Treiber-Interface verwendet
- Die Struktur ähnelt der eines Wayland-Compositors
Sicherheit
- Automatisches Parsen von Protokollnachrichten sorgt für mehr Sicherheit
- Mit der Zig-Build-Option
ReleaseSafewerden ungültige Operationen wie das Überschreiten von Array-Indizes automatisch erkannt
- Mit der Zig-Build-Option
- Anwendungen laufen standardmäßig isoliert voneinander
- Interaktionen mit anderen Apps sind nur über GUI-Berechtigungsanfragen oder vorab erteilte Berechtigungen möglich
- Beispiel: Eine Bildschirmaufnahme-App kann nur das angegebene Fenster aufzeichnen
- Bei eingeschränktem Zugriff erhält der Client Dummy-Daten statt eines Fehlers
- Globale Tastenkürzel funktionieren, wenn Modifizierertasten (ctrl, shift usw.) enthalten sind
- Für globale Tastenkürzel ohne Modifizierertasten ist eine explizite Berechtigung erforderlich
- Per Option kann auf ein mit Xorg identisches Verhalten umgeschaltet werden
Unterstützung moderner Technologien
- Unterstützung für aktuelle Display-Technologien wie Multi-Monitor, unterschiedliche Bildwiederholraten, VRR und HDR
- Verarbeitung erfolgt pro Display separat statt über einen einzelnen Framebuffer
Verbesserte Grafikverarbeitung
- Standardmäßig Rendering ohne Tearing und ein integrierter Compositor
- Wird ein externer Compositor (z. B. picom) ausgeführt, wird dieser automatisch deaktiviert
- Wenn eine Vollbild-App vsync deaktiviert, wird das Verhalten an diese App angepasst
- Ziel ist eine geringere Latenz bei vsync und im Compositor
Neue Standards
- Definition und Dokumentation einer DPI-Eigenschaft pro Monitor (randr property)
- Anwendungen können Inhalte passend zur monitorabhängigen DPI skalieren
Erweiterungen des X11-Protokolls
- Bei Bedarf sind Erweiterungen des X11-Protokolls für neue Funktionen wie HDR vorgesehen
Wayland-Kompatibilität
- Es wird berücksichtigt, dass manche Apps möglicherweise nur für Wayland verfügbar sind
- Phoenix kann Wayland direkt unterstützen oder über eine Wayland–X11-Bridge (z. B. 12to11) ausgeführt werden
Verschachtelter Display-Server
- Hardwarebeschleunigter verschachtelter Betrieb innerhalb von X11 oder Wayland ist möglich
- Nützlich für das Debugging von Phoenix sowie für Tests von Window-Managern und Compositoren
- Kann in Wayland-Umgebungen als alternativer Server zu Xwayland dienen
Nicht-Ziele (Non-goals)
- Ein vollständiger Ersatz des Xorg-Servers ist nicht das Ziel
- Xorg behält mehr X11-Funktionen und Unterstützung für ältere Hardware
- Mehrere X11-Screens werden nicht unterstützt (nur Multi-Monitor)
- Aufrufe von GrabServer sind wirkungslos
- Clients/Server mit Endian-Swap werden bei Bedarf erneut geprüft
- Keine Unterstützung für indirektes GLX (Remote-Rendering)
- Die Komplexität ist hoch, und Remote-Streaming ist effizienter
- Falls nötig, ist Remote-Rendering über einen GLX-Proxy möglich
Unterschiede zum X11-Protokoll
- Einige Teile des X11-Kernprotokolls, darunter schriftbezogene Funktionen, sind nicht implementiert
- Für Zeichenketten wird standardmäßig UTF-8 verwendet
- Ausnahme: wenn das Protokoll ausdrücklich ISO Latin-1 vorgibt
Installation und Build
- Installationsbefehle:
zig build -Doptimize=ReleaseSafe sudo zig build install -p /usr/local -Doptimize=ReleaseSafe - Für die Deinstallation muss
/usr/local/bin/phoenixmanuell gelöscht werden - Entwicklungs-Build:
zig build- Ergebnis-Binärdatei:
./zig-out/bin/phoenix - Build und Ausführung gleichzeitig möglich:
zig build run
- Ergebnis-Binärdatei:
Dokumentation des X11-Protokolls erzeugen
- Befehl:
zig build -Dgenerate-docs=true- Ergebnis:
.txt-Dateien werden unter./zig-out/protocol/erzeugt - Automatisch generierte Dokumentation im Stil offizieller Dokumente; derzeit noch in Arbeit
- Ergebnis:
Abhängigkeiten
- Zig 0.14.1
- x11 (xcb) — für den verschachtelten X11-Modus (
-Dbackends=x11) - wayland (wayland-client, wayland-egl) — für den verschachtelten Wayland-Modus (
-Dbackends=wayland, derzeit nicht unterstützt) - drm (libdrm, gbm) — für den eigenständigen Betrieb (
-Dbackends=drm, derzeit nicht unterstützt) - OpenGL (libglvnd) — stellt
glundeglbereit
1 Kommentare
Hacker-News-Kommentare
Der Ansatz, den X-Server im Wayland-Stil neu zu gestalten, ist interessant
Beeindruckend ist, dass Display-Server und Compositor standardmäßig integriert werden, Apps standardmäßig isoliert sind, die GLX-Remote-Funktion entfernt wurde und veraltete Protokolle konsequent verworfen wurden
Ich weiß nicht, wer das brauchen wird, aber die Entscheidung selbst wirkt ziemlich vernünftig
Dann verstehe ich nicht, worin der Unterschied besteht. Vielleicht war die Analyse unvollständig
Wenn darauf außerdem Wayland-Apps laufen, könnten sich tatsächlich noch mehr Nutzer dafür entscheiden
Der Name Phoenix wird viel zu oft verwendet
Es gibt auch das Phoenix-Framework für Elixir, und ich meine, den Namen schon bei mehreren anderen Projekten gesehen zu haben
Wie „Apollo“ ist das so ein häufiger Name, bei dem man meiner Meinung nach vor einem neuen Projekt erst einmal suchen sollte
Dort gibt es viele eigenwillige Namen wie bandit, cowboy, thousand island, ranch, mint und finch
Auch Namensdopplungen wie ExThing, ThingEx und Thingx kommen oft vor, sodass man durcheinanderkommt, was eigentlich der Standard ist
Ich erinnere mich, dass man auch in den 1980er-Jahren neue Software auf diese Weise benannt hat
Auch bei wxPython gibt es ein Phoenix-Projekt. Cooler Name, aber viel zu häufig
Das Projekt ist wirklich cool
Ich mag Wayland, aber bei Portal-Protokollen und Erweiterungsmechanismen bin ich immer noch unzufrieden
Im Vergleich zu Windows oder macOS gibt es bei der Produktivität noch Schwächen
Ein X11-Rewrite mit eingebauter Sicherheit klingt nach einem vielversprechenden Ansatz
Sieht nach einem nützlichen Projekt aus, und ich hoffe, dass es sich weiterentwickelt
Anfang der 2000er war sogar die Installation schwierig, und für normale Nutzer war es fast unmöglich, das selbst einzurichten
Linux-Distributionen ließen sich deutlich einfacher installieren, und wenn Windows langsam wurde, kaufte man deshalb eben einen neuen PC
Auch bei der Arbeit nutze ich GNOME + Wayland problemlos
Solche X-Erhaltungsprojekte finde ich willkommen
Ich bevorzuge Wayland, denke aber trotzdem, dass es weiterhin Bereiche gibt, in denen X gebraucht wird
Ein neues Entwicklerteam sollte die Last mittragen
X11 sollte man jetzt vollständig begraben und sich auf einen einzigen Display-Server konzentrieren
Ich weiß nicht, wie gut dieses Projekt funktionieren wird,
aber ich finde es gut, wenn es mehr Konkurrenzprojekte gibt, die sich dem von Unternehmen geprägten Vereinheitlichungstrend entgegenstellen (z. B. Wayland, GNOME, KDE mit ihren bezahlten Entwicklern)
Mich würde auch interessieren, wie viel Finanzierung nötig wäre, um Xorg zu modernisieren
Wayland gibt es seit 2008, aber selbst nach fast 20 Jahren erfüllt es noch nicht alle Nutzeranforderungen
Wenn man sich auf die engen Spezifikationen konzentriert, die Unternehmen wollen, sind die Grenzen klar erkennbar
Anwendungsentwickler können im Build-Skript die Release-Modi in der Form
zig build --releaseangebenNutzer können
--releaseauch selbst übergebenDer Autor von Phoenix scheint den ReleaseSafe-Modus als offizielle Release-Version gewählt zu haben
Übrigens ist Phoenix auch der Name meiner Heimatstadt
gpu-screen-recorder vom selben Autor ist der beste Bildschirmrekorder, den ich unter Wayland ausprobiert habe
Selbst 4K-60-fps-Aufnahmen funktionierten sofort, ganz ohne besondere Konfiguration
Ich frage mich, ob bestehende X11-Apps wie xterm, emacs, xfig und ghostview funktionieren
Die Unterstützung für mehrere Screens ist als Nicht-Ziel aufgeführt,
daher frage ich mich, ob man es dann nicht mit Window-Managern verwenden kann, die virtuelle Desktops unterstützen (wie i3)
Interessant ist, dass hier im Gegensatz zu Xorg keine XML-Protokollspezifikation zur Codegenerierung verwendet wird