2 points par GN⁺ 2025-12-25 | 1 commentaires | Partager sur WhatsApp
  • 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

  • Commandes d’installation :
    zig build -Doptimize=ReleaseSafe
    sudo zig build install -p /usr/local -Doptimize=ReleaseSafe
    
  • La désinstallation nécessite de supprimer manuellement /usr/local/bin/phoenix
  • Build de développement :
    zig build
    
    • Binaire généré : ./zig-out/bin/phoenix
    • Il est aussi possible d’exécuter et de compiler en même temps : zig build run

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

1 commentaires

 
GN⁺ 2025-12-25
Commentaires sur Hacker News
  • L’approche visant à reconstruire le serveur X dans un style Wayland est intéressante
    Le fait d’intégrer par défaut le serveur d’affichage et le compositeur, d’isoler les applications nativement, de supprimer les capacités distantes de GLX et d’abandonner sans hésiter les anciens protocoles est impressionnant
    Je ne sais pas qui en aura besoin, mais le choix lui-même semble assez rationnel

    • Pour ceux qui doivent absolument utiliser X11, cela semble être une meilleure option que XLibre
    • Je ne l’ai pas testé moi-même, mais s’ils ont retiré les fonctionnalités existantes, au final on risque de se retrouver avec une situation similaire à Wayland
      Dans ce cas, je ne vois pas bien la différence. Mon analyse est peut-être incomplète
    • Si cela était arrivé plus tôt, beaucoup de gens l’auraient probablement préféré à Wayland
      Et si les applications Wayland fonctionnent aussi dessus, encore plus d’utilisateurs pourraient réellement le choisir
  • Le nom Phoenix est beaucoup trop utilisé
    Il y a aussi Phoenix dans l’écosystème Elixir, et je me souviens l’avoir vu plusieurs fois dans d’autres projets
    C’est un nom courant comme « Apollo », donc je pense qu’il faut commencer par vérifier la recherche avant de lancer un nouveau projet

    • Le Phoenix de l’écosystème Elixir est presque moins source de confusion
      De ce côté-là, il y a beaucoup de noms originaux comme bandit, cowboy, thousand island, ranch, mint, finch
      Les collisions de noms du style ExThing, ThingEx, Thingx sont aussi fréquentes, ce qui rend difficile de savoir ce qui est standard
    • Depuis longtemps, on utilise souvent le nom « projet renaissant de ses cendres » comme symbole
      Je me souviens qu’on nommait déjà de nouveaux logiciels comme ça dans les années 1980
    • Firefox aussi avait essayé d’utiliser le nom Phoenix et a été poursuivi pour des problèmes de marque déposée
      Il y a aussi un projet Phoenix dans wxPython. C’est cool, mais beaucoup trop courant comme nom
  • Ce projet est vraiment génial
    J’aime Wayland, mais les protocoles de portails et le mécanisme d’extension restent décevants
    Il y a encore des manques du point de vue de la productivité par rapport à Windows ou macOS
    Une réécriture de X11 avec la sécurité intégrée, c’est une approche prometteuse

    • Je pense depuis longtemps qu’il vaudrait mieux faire une version nettoyée de X plutôt que Wayland
      Cela semble être un projet utile, et j’espère qu’il progressera
    • Tu as dit que Wayland manquait de choses côté productivité ; je serais curieux de savoir ce qui manque concrètement
    • Je pense au contraire que Windows et macOS ne gèrent même pas correctement les fenêtres
      Au début des années 2000, ils étaient même difficiles à installer, et presque impossibles à installer soi-même pour un utilisateur ordinaire
      Les distributions Linux étaient bien plus simples à installer, et si Windows ralentissait, c’est aussi pour ça qu’on achetait un nouveau PC
    • Personnellement, je n’ai jamais eu l’impression que Wayland me faisait perdre en productivité
      Au travail aussi, j’utilise GNOME + Wayland sans aucun problème
  • Je suis content de voir ce type de projet de préservation de X
    Je préfère Wayland, mais je pense qu’il existe encore des domaines où X reste nécessaire
    Une nouvelle équipe de développement doit partager la charge

    • Mais je pense que ce genre de choix entraîne de la fragmentation
      Il faut désormais enterrer complètement X11 et se concentrer sur un seul serveur d’affichage
  • Je ne sais pas à quel point ce projet fonctionnera bien, mais
    face au mouvement d’unification centré sur les entreprises (par exemple Wayland, GNOME, KDE et leurs développeurs salariés),
    je pense qu’il est bon d’avoir davantage de projets concurrents
    Je me demande aussi combien de financement il faudrait pour moderniser Xorg
    Wayland est apparu en 2008, mais près de 20 ans plus tard, il ne répond toujours pas à tous les besoins des utilisateurs
    En voulant s’aligner sur des spécifications étroites dictées par les entreprises, ses limites sont évidentes

  • Les développeurs d’applications peuvent indiquer le mode release dans leurs scripts de build sous la forme zig build --release
    L’utilisateur peut aussi passer --release directement
    L’auteur de Phoenix semble avoir choisi le mode ReleaseSafe comme release officielle
    À noter que Phoenix est aussi le nom de ma ville natale

  • gpu-screen-recorder, du même auteur, est
    le meilleur enregistreur d’écran que j’aie utilisé sur Wayland
    L’enregistrement en 4K 60 fps fonctionnait immédiatement, sans réglage particulier

  • Je me demande si des applications X11 historiques comme xterm, emacs, xfig ou ghostview fonctionnent

    • La plupart des anciens programmes X11 reposent sur l’API de dessin X11, donc
      il est probable qu’ils ne fonctionnent pas correctement, même si l’implémentation elle-même est simple
  • Le support multi-écran est indiqué comme hors objectif,
    alors je me demande si cela veut dire qu’on ne peut pas l’utiliser avec des gestionnaires de fenêtres prenant en charge les bureaux virtuels (comme i3)

    • Dans X11, « screen » a une signification particulière, donc même avec un seul screen pris en charge,
      cela ne pose pas de problème pour l’usage multi-moniteur ou les bureaux virtuels
    • Des fonctions de multi-moniteur continu comme Xinerama pourront être ajoutées facilement plus tard
  • Il est intéressant qu’ils n’utilisent pas, comme Xorg, des spécifications de protocole XML pour générer du code