- Phoenix est un nouveau serveur X entièrement réécrit en Zig, sans fork de Xorg, avec l’objectif de proposer une alternative moderne
- À ce stade, il peut exécuter en mode imbriqué dans un serveur X existant de simples applications utilisant les graphismes GLX, EGL et Vulkan, mais l’exécution autonome n’est pas encore prise en charge
- Par souci de simplicité, il ne prend en charge que les applications écrites au cours des 20 dernières années et le matériel des 15 dernières années, et fonctionne sans interface de pilotes serveur
- La sécurité est renforcée grâce au parsing automatique des messages du protocole, et l’accès entre applications est limité par une isolation fondée sur des demandes d’autorisation
- Il prend en charge des technologies modernes comme HDR, VRR, le multi-écran et un compositeur intégré, avec des extensions prévues pour la compatibilité Wayland et le protocole X11
Présentation de Phoenix
- Phoenix est un serveur X moderne destiné à remplacer Xorg, avec une implémentation entièrement réécrite en Zig
- Ce n’est pas un fork de Xorg et il vise une architecture plus simple et plus sûre
- Il n’est pas encore prêt pour un usage complet et ne prend actuellement en charge que le mode imbriqué (nested mode) dans un serveur X existant
- Il peut assurer un rendu accéléré matériellement basé sur GLX, EGL et Vulkan
Objectifs
Simplicité
- Un serveur plus simple que Xorg, qui ne prend en charge qu’une partie du protocole X11
- Il n’inclut que les fonctions nécessaires aux applications écrites au cours des 20 dernières années
- Il cible uniquement le matériel des 15 dernières années prenant en charge Linux DRM et Mesa GBM
- Contrairement à Xorg, il n’utilise pas d’interface de pilotes serveur distincte
- Avec une architecture proche de celle d’un compositeur Wayland
Sécurité
- La sécurité est assurée par le parsing automatique des messages du protocole
- L’option de build Zig
ReleaseSafe permet de détecter automatiquement les comportements invalides, comme les dépassements d’indice de tableau
- Les applications s’exécutent isolées par défaut
- Les interactions avec d’autres applications ne sont possibles que via une demande d’autorisation GUI ou une autorisation préalablement accordée
- Exemple : une application d’enregistrement d’écran ne peut enregistrer que la fenêtre désignée
- En cas de restriction d’accès, le client reçoit des données factices au lieu d’une erreur
- Les raccourcis globaux fonctionnent lorsqu’ils incluent des touches modificatrices (
ctrl, shift, etc.)
- L’utilisation de raccourcis globaux sans touche modificatrice nécessite une autorisation explicite
- Une option permet de revenir à un fonctionnement identique à celui de Xorg
Prise en charge des technologies modernes
- Prise en charge des technologies d’affichage récentes comme le multi-écran, les fréquences de rafraîchissement différentes, le VRR et le HDR
- Traitement indépendant de chaque écran au lieu d’un framebuffer unique
Améliorations du rendu graphique
- Fournit par défaut un rendu sans tearing ainsi qu’un compositeur intégré
- Désactivation automatique si un compositeur externe (comme picom) est lancé
- Si une application en plein écran désactive la vsync, le comportement s’ajuste à cette application
- Vise à réduire la latence de la vsync et du compositeur
Nouveaux standards
- Définit et documente une propriété DPI par moniteur (propriété randr)
- Les applications peuvent ainsi adapter l’échelle de leur contenu selon le DPI de chaque écran
Extensions du protocole X11
- Des extensions du protocole X11 sont prévues si de nouvelles fonctions comme le HDR deviennent nécessaires
Compatibilité Wayland
- En tenant compte du fait que certaines applications peuvent être exclusives à Wayland
- Phoenix pourra soit prendre directement en charge Wayland, soit s’exécuter via un pont Wayland–X11 (par ex. 12to11)
Serveur d’affichage imbriqué
- Possibilité d’exécution imbriquée accélérée matériellement dans X11 ou Wayland
- Utile pour le débogage de Phoenix et pour les tests de gestionnaires de fenêtres et de compositeurs
- Peut servir de serveur alternatif à Xwayland dans un environnement Wayland
Non-objectifs (Non-goals)
- Le remplacement complet du serveur Xorg n’est pas un objectif
- Xorg conserve davantage de fonctions X11 et la prise en charge du matériel ancien
- Les multiples écrans X11 ne sont pas pris en charge (seul le multi-écran l’est)
- Les appels GrabServer sont ignorés
- Les clients/serveurs avec échange d’endianess seront réévalués si nécessaire
- Pas de prise en charge de GLX indirect (rendu distant)
- La complexité est élevée et le streaming distant est plus efficace
- Si nécessaire, le rendu distant reste possible via un proxy GLX
Différences avec le protocole X11
- Certaines parties du protocole cœur de X11, comme les fonctions liées aux polices, ne sont pas implémentées
- L’encodage des chaînes utilise UTF-8 par défaut
- Sauf lorsque le protocole exige explicitement ISO Latin-1
Installation et build
Génération de la documentation du protocole X11
- Commande :
zig build -Dgenerate-docs=true
- Résultat : génération de fichiers
.txt dans ./zig-out/protocol/
- Documentation générée automatiquement dans le style de la documentation officielle, fonctionnalité encore en cours de développement
Dépendances
- Zig 0.14.1
- x11 (xcb) — pour le mode imbriqué X11 (
-Dbackends=x11)
- wayland (wayland-client, wayland-egl) — pour le mode imbriqué Wayland (
-Dbackends=wayland, non pris en charge actuellement)
- drm (libdrm, gbm) — pour l’exécution autonome (
-Dbackends=drm, non prise en charge actuellement)
- OpenGL (libglvnd) — fournit
gl et egl
Aucun commentaire pour le moment.