- 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
ReleaseSafe werden ungültige Operationen wie das Überschreiten von Array-Indizes automatisch erkannt
- 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
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
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
gl und egl bereit
Noch keine Kommentare.