Wayland débarque et souhaiterait mettre X11 à la retraite

Aujourd'hui, l'interface graphique est quasiment une obligation dans un système d'exploitation. Malgré tout ce que peuvent dire les utilisateurs de Gentoo ou d'Arch Linux, peu de monde utiliserait un ordinateur si la seule interface disponible était la console avec du texte en noir et blanc. Il y a quelques jours est sortie la version 1.0 de Wayland, un projet ambitieux qui rêve de mettre le serveur X à la retraite. Celui-ci gère l'interface graphique depuis les années 1980 dans (quasiment) tous les systèmes d'explotation de type Unix. C'est une bonne occasion pour s'y intéresser, découvrir les raisons de sa création mais aussi pourquoi un remplaçant est aujourd'hui nécessaire et comment celui-ci va fonctionner.

 

X11, un ancêtre de l'informatique

 

L'invention de l'interface graphique

 

Pour comprendre ce qu'est X11, il est nécessaire de faire un retour dans le passé. L'histoire des débuts de l'interface graphique sur ordinateur est assez connue. Tout commence dans le début des années 1970 quand l'entreprise Xerox conçoit l'Alto : le tout premier ordinateur à disposer d'une interface graphique. Cette révolution ne se présente pas seule, car contrairement aux autres machines de l'époque, l'Alto n'est pas conçu pour les informaticiens, mais pour des utilisateurs plus occasionnels comme des employés de bureau. L'idée vient alors à l'équipe de création de réutiliser les éléments du bureau (les dossiers, les pots à crayon...) ainsi que des fenêtres pour séparer les différentes applications dans son ordinateur. De là est née la métaphore du bureau que l'on retrouve encore aujourd'hui dans la majorité des interfaces utilisateurs. La suite est plus connue. L'équipe d'Apple visite les laboratoires de Xerox et Steve Jobs comprend alors que ce concept pourrait révolutionner l'informatique grand public. Il essaye de convaincre la direction de Xerox de mettre en place l'interface graphique dans les ordinateurs Apple ; celle-ci accepte, car elle considère son invention comme un gadget. Après avoir connu un revers avec l'Apple Lisa (1983), le premier ordinateur qui propose une interface graphique, Apple va démocratiser l'invention de Xerox avec un ordinateur de légende : le Macintosh (1984).

 

La création de X11

 

L'interface graphique va très vite se vulgariser et tous les constructeurs de l'époque vont petit à petit en mettre en place dans les systèmes d'exploitation de l'époque. Le problème, c'est qu'il n'existe pas à l'époque de standards, ce qui a eu pour conséquence une grande variété d'implémentations de l'interface graphique autant du point de vue fonctionnel pour l'utilisateur que technique pour les développeurs. Ainsi, on trouva dans les années 1980 une foule de constructeurs qui créèrent des systèmes complètement différents, par exemple :
FM Towns avec Windows 3.0 et une surcouche graphique (Towns OS) ;
Atari ST avec TOS ;
Amiga 1000 avec Amiga OS.
L'idée vient alors à un groupe de chercheurs du MIT de standardiser les interfaces graphiques en proposant une façon de faire que chaque constructeur pourra implémenter dans son système d'exploitation. Ce standard s'appelle X Window System et sa première version sort en 1984. Pourtant, la version la plus connue est la version 11 qui sortit en 1987, c'est pour cela qu'on appelle couramment ce standard X11. Ce système va se démocratiser notamment dans les dérivés d'Unix, mais aussi plus récemment dans les systèmes GNU/Linux, tandis que Windows continue d'utiliser une solution maison et que Mac OS X utilise Quartz.

 

Fonctionnement de X11

 

Cela peut surprendre aujourd'hui, mais X11 fonctionne sur un mode client-serveur. La communication entre les clients (les applications) et le serveur (qui gère l'affichage) se fait donc avec des sockets. Ce choix, qui peut paraître étrange au premier abord, s'explique par des raisons historiques. Dans les années 80, les ordinateurs coûtaient cher et il était courant d'avoir dans une université ou une entreprise seulement un ordinateur qui contenait les données et les programmes, tandis que tous les autres n'étaient que des terminaux graphiques. X11 pouvait donc faire la communication entre le serveur sur une machine et les terminaux graphiques.

Le fonctionnement de X11 étant assez complexe, le schéma ci-dessous le résume assez bien :

 Image utilisateur

Quelques explications s'imposent :

  • les clients X, comme expliqué ci-dessus, sont les applications de l'utilisateur telles que gEdit, Firefox, etc... ;
  • le serveur X récupère toutes les informations graphiques des différentes applications et les envoie au compositeur ;
  • le compositeur va dessiner ce qu'il y aura à l'écran en prenant en compte certaines informations comme les fenêtres en plein écran ou encore la fenêtre en premier plan qui ne doit pas être cachée par les autres ;
  • KMS et evdev sont des éléments du noyau Linux qui permettent de gérer respectivement la partie graphique pour KMS, et les périphériques (souris, clavier...) pour evdev.

 

Chaque constructeur commença à implémenter X11 dans son système d'exploitation. Le nombre de serveurs X explose jusqu'en 1991 où quatre programmeurs se rassemblent pour corriger les bugs d'une implémentation libre nommée X386. Quand X386 devint payant quelques mois plus tard, les quatre programmeurs décidèrent de créer un fork de celui-ci afin de fournir une implémentation libre de X11. Ce fork prit le nom de XFree86 et fut le premier serveur X à fonctionner sur la quasi totalité des systèmes d'exploitation de l'époque. Il équipa la plupart des distributions Linux et des systèmes d'exploitation BSD jusqu'en février 2004. À cette date, une partie de l'équipe de développement décida de créer un nouvel embranchement avant un changement de licence de XFree86. Ce fork pris le nom de X.Org et est aujourd'hui le serveur X le plus connu et le plus utilisé.

Aujourd'hui, il existe quelques autres serveurs X parmi lesquels :

  • X11.app développé par Apple permet de faire tourner les applications X11 sur Mac OS. Cette application n'est plus maintenue depuis la sortie de Mac OS Leopard ;
  • XQuartz est développé à partir du code source de X11.app qui est distribué par Apple sous licence libre. Celui-ci continue d'être mis à jour et souhaite à terme remplacer X11.app ;
  • X-Ming est un serveur X qui tourne sous Windows et permet de rediriger l'interface graphique d'un système Unix vers une machine Windows.

 

Wayland, un possible successeur

 

Pourquoi un successeur à X11 ?

 

Comme expliqué dans la première partie, X11 est vieux. La dernière version de la norme date de plus de 25 ans et l'informatique d'aujourd'hui n'a plus grand chose à voir avec celle des années 1980. X11 utilise beaucoup de fonctionnalités qui ne sont plus utilisées aujourd'hui et qui ont pour la plupart été remplacées par d'autres librairies. Par exemple, X possède un système de gestion des sous-fenêtres pour éviter d'avoir à mettre à jour toute la fenêtre à chaque modification ainsi que pour gérer les événements du curseur. Pourtant, cette partie de code n'est plus maintenue dans la majorité des implémentations, car le code qui le gère est complexe et que plus aucun programmeur n'a les connaissances pour s'en charger. Une librairie nommée XDamage permettant de gérer les événements du curseur de la souris a donc été créée pour pallier ce problème.
D'autre part, le fonctionnement des drivers sous X11 est dépassé, car le serveur X gère un pilote par périphérique alors que le seul pilote utilisé la majorité du temps est evdev, la partie du kernel qui gère les périphériques.
Enfin, le serveur X délègue énormément au compositeur qui a pour rôle de dessiner les fenêtres, et aujourd'hui le serveur X n'a plus qu'un rôle, celui de distribuer les événements. Or, ce rôle nécessite de connaître la fenêtre qui doit recevoir l'information pour être fait correctement ; malheureusement le serveur X ne peut pas faire correctement cette tâche, car seul le compositeur connaît la fenêtre active.
En résumé, le serveur X demande énormément de maintenance de la part de la communauté alors qu'il n'apporte quasi rien aujourd'hui.

 

Fonctionnement de Wayland

 

Ce sont tous ces problèmes qui ont poussé Kristian Høgsberg à lancer le projet Wayland. Il s'est rendu compte que le serveur X ne servait quasiment plus qu'à communiquer les informations au compositeur qui devait dessiner les fenêtres. Kristian Høgsberg a donc eu l'idée de fusionner le serveur X et le compositeur dans Wayland. Les clients envoient les informations de leur fenêtre via un protocole réseau directement vers le compositeur qui va fusionner les informations qu'il reçoit afin de décider ce qui doit être affiché à l'écran (d'abord la fenêtre en premier plan puis les suivantes).

On remarque sur ce schéma de Wayland que la seule différence avec celui vu dans la première partie est la disparition du serveur X.

Image utilisateur

 

Malheureusement, ce fonctionnement a quelques inconvénients :

  • par défaut, la décoration des fenêtres est à la charge du client (de l'application donc) et non du serveur. Le risque est de voir fleurir des styles de fenêtres très différents selon les applications. Cela peut être changé en utilisant un autre compositeur que celui par défaut et de le programmer pour qu'il gère le style des fenêtres.
  • Une application ne peut plus se réserver l'utilisation d'une touche. Wayland permet quand même de gérer les menus déroulants mais à la place de réserver une touche pour le fermer, l'application devra notifier le serveur qu'elle utilise un menu déroulant et celui-ci s'occupera du reste.
  • Wayland nécessite les technologies d'udev et KMS, ce qui est actuellement disponible uniquement pour les systèmes à base du noyau Linux. D'autres systèmes sont actuellement sur le point de porter ce type de fonctions dans leurs noyaux afin de pouvoir supporter Wayland (et certains pilotes pour cartes graphiques actuellement).
  • La nécessité de porter les applications vers Wayland, cependant ce dernier dispose d'un moyen d'utiliser X.org au besoin des applications ce qui permet de l'adopter malgré ce manque, le temps que le portage de la plupart des applications soit terminé.


Chaque personne peut créer son compositeur Wayland : le projet KDE a par exemple annoncé qu'il allait créer son propre compositeur Wayland afin d'adapter les fenêtres à son gestionnaire de bureau.

 

Situation de Wayland aujourd'hui

 

Aujourd'hui, Wayland commence à se populariser. L'implémentation de Wayland va pouvoir commencer dans les différentes distributions Linux, car la version 1.0 est sortie il y a quelques jours et les prochaines versions ne devraient pas casser la compatibilité ascendante (les programmes fonctionnant avec cette version fonctionneront avec les prochaines versions). Le premier système à intégrer Wayland fut le projet MeeGo développé par Intel. C'est d'ailleurs Intel qui emploie Kristian Høgsberg afin qu'il travaille à temps plein sur Wayland.

La célèbre distribution Ubuntu a informé dès la fin 2010 que celle-ci allait passer à Wayland afin de remplacer X.Org qui fait office de serveur X sur la distribution de Canonical ; Fedora et Mandriva devraient suivre. Cette migration se fera sur la longueur pour deux raisons :

  • le fonctionnement de X11 et de Wayland est totalement différent, mais le projet XWayland doit permettre d'émuler le fonctionnement d'un serveur X sur Wayland et permettra une transition en douceur ;
  • les drivers pour les systèmes Linux sont développés pour un serveur X et devront donc être modifiés pour prendre en charge Wayland. Si cela ne devait pas poser trop de problèmes pour les drivers open-source, ce sera plus compliqué pour les drivers propriétaires dont les mises à jour dépendront du bon vouloir du fabricant du matériel.

 Image utilisateur

Malgré tout, la transition vers Wayland pourrait être grandement facilitée, notamment par le fait que la plupart des programmeurs utilisent des bibliothèques comme Qt ou GTK+ pour leur interface graphique. Une fois que ces bibliothèques seront mises à jour pour Wayland, tous les programmes les utilisant devraient fonctionner sans problème avec ce nouveau serveur d'affichage. Cela aurait été beaucoup plus compliqué si les programmeurs avaient utilisé massivement la Xlib pour leurs développements. D'ailleurs la mise à jour de ces bibliothèques a déjà commencé, ainsi Qt5 devrait être compatible avec Wayland tout comme Gtk 3.4.

 

Sources

 

 

L'auteur

Toshy

Passionné par l'informatique depuis mon plus jeune age, j'anime un blog sur le développement web et les différents domaines qui s'y attachent : administration système, bonne pratique de développement, framework web.
Je suis développeur web de profession, diplômé d'un DUT d'informatique, je travaille actuellement au sein du service informatique d'une université.