# X Window System

X Window System, souvent abrégé X ou X11, est un système de fenêtrage (window system en anglais) qui gère l'écran, la souris et le clavier. X repose sur un protocole de communication client-serveur d'utiliser un réseau de manière transparente entre l'application et le terminal. Le protocole en est à la onzième version depuis 1987, d'où l'abréviation X11.
C'est un standard ouvert largement utilisé sur les systèmes d’exploitation de type Unix (Linux, BSD, etc.). Le système de fenêtrage X (dit « serveur X ») est optionnel sur macOS (qui utilise nativement Quartz). Il est possible d'installer un serveur X sur la plupart des systèmes d'exploitation, dont Windows. On dit communément d'une application qu'elle fonctionne « sous X » lorsqu'elle est conçue pour l'environnement X.
Les spécifications X11 sont actuellement dirigées par la Fondation X.Org qui développe également X.org, sa principale implémentation.

## Utilisation & fonctionnement

Dans son principe, le système de fenêtrage X peut être utilisé sur un réseau local composé d'un ordinateur central, chargé du fonctionnement des applications comme des calculs, et de terminaux X de saisie et d'affichage, ce qui peut permettre à une université d'avoir plus de terminaux que d'ordinateurs. Il peut aussi fonctionner au travers d'une liaison internet (TCP/IP). Cette capacité lui permet aussi de fonctionner sur un seul ordinateur qui prend en même temps le rôle de serveur et la capacité d'affichage.

### Utilisation locale

Lorsque le système de fenêtrage X est utilisé sur un ordinateur autonome, il n'est pas spécifiquement visible à l'écran. Toutefois, les applications font appel au système de fenêtrage X pour afficher et rafraîchir les écrans et pour être notifiées des entrées souris et clavier.
Pour l'utilisateur le fonctionnement est assez similaire à celui qui serait celui d'un autre ordinateur.
Toutefois, l'utilisation d'un système comme Linux ou la présence d'un gestionnaire de fenêtre unix sur un écran suggèrent l'utilisation du système de fenêtrage X.
* Affichage de consoles texte X11R1 en l'absence de gestionnaire de fenêtre, sur une machine Sun
* twm, le gestionnaire de fenêtre minimaliste par défaut
* L'interface utilisateur graphique GNOME
* L'interface utilisateur graphique Xfce

### Fonctionnement réseau

X fonctionne suivant le modèle client–serveur :
* le serveur X fonctionne sur un terminal intelligent (client léger) doté d'un écran, d'un clavier et d'une souris ; à travers le réseau :
** il reçoit des requêtes d'affichage ;
** il renvoie la position de la souris, la liste des fontes ;
** il envoie des notifications en cas d'événements comme une touche de clavier actionnée, un déplacement de fenêtre, un message inter-application ;
* un ou plusieurs logiciels client X, soit sur le même ordinateur que le serveur, soit des ordinateurs distants, se connectent au serveur X et lui envoient leurs requêtes d'affichage en utilisant le protocole X au travers de la bibliothèque X (Xlib). Le client est simplement l'application logicielle (jeu, traitement de texte, calculatrice…) qui utilise alors le protocole X pour déléguer au serveur X les tâches d'interactions homme-machine (ou IHM).
Cette terminologie client–serveur avec le serveur côté utilisateur et le client côté application peut sembler étrange pour les nouveaux utilisateurs de X, les termes semblant inversés : on a davantage l'habitude de voir un serveur sur l'ordinateur principal que sur un terminal. Cependant X se place du point de vue de l'application plutôt que de l'utilisateur : X fournit des services d'entrée-sortie aux applications, c'est donc un serveur ; les applications consomment ces services, ce sont donc des clients.
Avant l'arrivée du modèle client-serveur, les applications s'exécutaient sur une machine centralisée s'occupant à la fois du traitement des données et de la mise en forme de l'affichage. Le poste de l'utilisateur possédait essentiellement un clavier et un écran, parfois une souris.
Le poste d'affichage ne possédait pas de réelle intelligence locale, les programmes s'exécutant sur la machine centralisée. On lui adjoignait cependant un boîtier contrôleur d'écran et de clavier qui exécutait un serveur X. L'ensemble se nommait un terminal X. Les programmes s'exécutaient sur la machine centralisée (serveur d'applications commun à plusieurs terminaux X) et les interactions homme-machine de ces programmes étaient gérés par le terminal X (client applicatif). Le terminal X est un exemple de ce que l'on appelle un client léger.
X fonctionne en IPv4 depuis des années, mais il peut également fonctionner en IPv6.
Ce modèle de communication permet notamment l'affichage de fenêtres et autres éléments d'interfaces graphiques, en local (logiciel client et serveur sur la même machine) ou déporté sur un autre ordinateur à travers le réseau (un logiciel graphique tourne sur une machine distante et est affiché sur une station de bureau ou portable).
L'affichage graphique se fait par bitmap (image matricielle), par opposition à l'affichage par image vectorielle.
Parmi les clients X, on en distingue généralement un en particulier : le gestionnaire de fenêtres dont le rôle est de gérer l'affichage, la sélection, le déplacement, le redimensionnement et les décorations des fenêtres (une fenêtre particulière étant la root-window c'est-à-dire la fenêtre-racine). Ce gestionnaire de fenêtre peut s'exécuter sur une machine distincte de celle qui héberge l'application graphique.
Tout client préalablement autorisé à accéder à un poste X peut y ouvrir une fenêtre à tout moment, comme on ferait sonner un téléphone. Un soin particulier doit être apporté à la sécurité du poste afin par exemple qu'un ordinateur autorisé à afficher des informations administratives ne soit pas en mesure d'effectuer à distance des copies d'écran indiscrètes de tout l'écran du poste !
La programmation X permet de séparer la création des widgets (en mémoire) de leur réalisation (affichage) pour une bonne ergonomie : l'utilisateur apprécierait peu que, dans une fenêtre comportant quarante éléments graphiques distincts, chacun soit affiché au fur et à mesure que l'application le crée. Tout peut donc être créé d'abord, et ensuite seulement l'ensemble affiché en une seule fois, pour éviter des clignotements fatiguant l’œil.

### Connexion avec Windows

La technologie a été portée de manière à pouvoir afficher sous Windows des fenêtres d'applications qui fonctionnent sur un système Unix. Ceci se fait au travers de logiciels comme Cygwin/X ou comme Xming ou x11vnc.
A l'inverse, le déport de l'affichage de Windows vers un environnement Unix n'utilise pas le système de fenêtres X. Des technologies comme VNC ou RDP peuvent être utilisés. Contrairement au système de fenêtres X, les choix techniques n'ayant pas été les mêmes, elles ne permettent pas le déport d'une seule fenêtre: l'ensemble du terminal est déporté: écran, clavier et souris.

## Programmation X

La programmation pour X peut se faire à différents niveaux. Le plus bas est celui du protocole X, ou comment le client et le serveur échangent des données. On ne programme pour ainsi dire jamais directement au niveau du protocole, mais il peut être utile de le connaître, de façon par exemple à décoder les informations qui circulent.
Le niveau au-dessus est celui de la bibliothèque X ou Xlib. La Xlib propose une traduction assez directe des requêtes du protocole X en appels de fonctions. Elle permet notamment de créer et de manipuler des fenêtres, de dessiner à l'intérieur par l'intermédiaire d'un contexte graphique et de recevoir des événements (clavier, souris, exposition des fenêtres, messages inter-clients, etc.) Pour la Xlib, une fenêtre est un rectangle dans lequel on peut dessiner, et qu'on peut soulever ou baisser par rapport aux autres (on peut aussi imbriquer des fenêtres) ; la décoration des fenêtres de plus haut niveau est apportée par le gestionnaire de fenêtres. La programmation directe en Xlib n'est guère adaptée que pour des environnements graphiques très limités ou pour le développement de boîtes à outils.
Le niveau suivant est celui de la boîte à outils X ou X Toolkit, Xt en abrégé, un système orienté objets (mais entièrement en C) qui permet de manipuler des widgets, qui sont des fenêtres munies de ressources et de méthodes, leur permettant de réagir « toutes seules » à certains événements. Ce niveau est composé de deux parties : les intrinsics et un jeu de widgets. Les intrinsics sont le cadre dans lequel on peut communiquer avec les widgets, et proposent quelques widgets tout à fait rudimentaires (dont le widget Core, une fenêtre qui ne réagit à rien). Il y a plusieurs jeux de widgets disponibles pour Xt. Le jeu Athena (Xaw en abrégé), développé au MIT, est petit et peu complet, mais il a l'avantage d'être léger, standard et gratuit. Deux autres exemples importants sont le jeu Motif de l'OSF, très commun pour les applications commerciales jusque vers 2000, et OpenLook, qui imite l'apparence de SunView, dont il est le remplaçant.
Ces différentes bibliothèques sont de moins en moins utilisées, au profit d'autres surcouches de la Xlib, qui remplissent les mêmes fonctions qu'Xt. Les deux principales sont GTK+ et Qt.

## Historique
### Prédécesseurs

Différents systèmes d'affichage graphique par point ont précédé X. Notamment Alto (1973) et Star (1981) de Xerox, Display Manager (1981) d'Apollo Computer, Lisa (1983) et Macintosh (1984) d'Apple. Dans l'univers Unix l'Andrew Project (1982) et le terminal Blit (1982) de Rob Pike.
L'université Carnegie-Mellon a produit une application d'accès à distance appelée Alto Terminal, permettant l'affichage dans des fenêtres d'un Xerox Alto d'applications tournant sur des systèmes distants (généralement des systèmes Unix DEC VAX).
Initié à l'été 1984, X Window System se place en successeur du W Window System, fonctionnant sur le système V. Le choix des lettres X et W provient de l'ordre alphabétique : la lettre X suit la lettre W, qui suit elle-même la lettre V. Quant au V de Système V, il provient de la numération romaine dans laquelle le 5 s'écrit V. Le W Window System utilisait un protocole réseau, supportait des terminaux et des fenêtres graphiques, en gérant la superposition des fenêtres la maintenance d'une liste de commandes graphiques.

### Origine et premiers développements

L'idée originale de X a émergé au MIT en 1984 fruit d'une collaboration entre Jim Gettys (projet Athena) et Bob Scheifler (MIT). Scheifler avait besoin d'un environnement d'affichage utilisable pour déboguer le système Argus. Le projet Athena (projet conjoint entre DEC, MIT et IBM devant fournir un accès facilité aux ressources informatiques pour tous les étudiants) avait besoin d'un système graphique indépendant de la plate-forme fonctionnant sur des systèmes hétérogènes provenant de différents fournisseurs. Le système de fenêtres alors en cours de développement dans le projet Andrew de l'université Carnegie-Mellon ne rendait pas les licences disponibles et aucune alternative n'existait.
Ce problème a été résolu en créant un protocole pouvant à la fois exécuter des applications locales et distantes. Au milieu de 1983, un premier portage de W vers Unix fonctionnait mais à un cinquième seulement de sa vitesse sous V. En mai 1984, face à ce problème, Scheifler a remplacé le protocole synchrone de W par un protocole asynchrone et les listes de commandes par des buffers graphiques associés à chaque fenêtre donnant naissance à la première version de X. X devient le premier environnement graphique indépendant du matériel comme du fabricant.
Scheifler, Gettys et Ron Newman se sont mis au travail et X a progressé rapidement. La version 6 est réalisée en janvier 1985. X est alors choisi par DEC pour sa première station de travail, Ultrix, étant considéré comme le seul système de fenêtrage susceptible d'être disponible à temps. Les ingénieurs de DEC ont porté X6 sur l'écran QVSS de DEC sur MicroVAX.
Au deuxième trimestre de 1985 la version 9 de X ajoute le support des couleurs, permettant son utilisation sur le VAXstation-II/GPX de DEC (Digital Equipment Corporation).
Un groupe de l'Université Brown a porté la version 9 sur l'IBM RT-PC (en). Des problèmes d'alignement de données ont nécessité une adaptation incompatible du protocole, aboutissant à la fin de 1985 à la version 10. En 1986, d'autres organismes commencent à s’intéresser à X. X10R2 sort en janvier 1986, puis X10R3 en février 1986. Bien que le MIT ait accordé une licence X6 payante à certains organismes, c'est à ce moment qu'il est décidé de distribuer X10R3, ainsi que les versions suivantes sous ce qui deviendra la licence MIT, dans l'intention de promouvoir X, et espérant en retour la création de nombreuses applications sous X. La version X10R3 est la première à être déployée à grande échelle, utilisée par DEC et Hewlett-Packard pour leurs produits. D'autres groupes ont porté X10 sur Apollo, sur les stations de travail Sun et même sur IBM PC/AT. La première démonstration d'application commerciale pour X (un système de conception mécanique assistée par ordinateur de Cognition Inc, fonctionnant sur VAX, et dont l'affichage s'effectuait sur des PC distants munis de serveur X, présenté par Jim Fulton et Jan Hardenbergh) a eu lieu au salon Autofact à ce moment-là. La dernière version de X10 est X10R4, en décembre 1986. Des tentatives ont été faites pour permettre à des serveurs X de collaborer en temps réel. Un de ces premiers efforts était l'outil SharedX de Philip J. Gust. Plus tard Virtual Network Computing (VNC) permettra le partage d'un bureau.
Bien que X10 offre des fonctionnalités intéressantes et puissantes, une refonte du protocole devenait nécessaire avant une large diffusion, afin d'obtenir une architecture plus indépendante du matériel. Le MIT seul n'avait pas les ressources suffisantes pour un travail de cette ampleur. Le Western Software Laboratory de DEC disposait alors d'une équipe expérimentée entre deux projets. Smokey Wallace de DEC WSL et Jim Gettys ont proposé que DEC WSL développe X11 et le publie gratuitement sous les mêmes termes que X9 et X10. Les développements ont commencé en mai 1986 et le protocole a été finalisé en août. La version alpha est entrée en phase de tests en février 1987 suivie par la version bêta en mai. X11 sort finalement le 15 septembre 1987.
La conception du protocole X11, dirigée par Scheifler, a fait l'objet de discussions approfondies sur des listes de diffusion publiques au début d'internet, reliées aux groupes de discussion Usenet. Gettys a déménagé en Californie pour aider à diriger le développement X11 chez WSL au centre de recherche sur les systèmes de DEC. Phil Karlton et Susan Angebrandt ont dirigé la conception et la mise en œuvre de maquettes du serveur X11. X représente donc l'un des premiers projets de logiciels libres et open source distribué à très grande échelle.

### Du Consortium X du MIT au X Consortium, Inc.

En 1989, Simson Garfinkel qualifia X de "réalisation spécifique la plus importante d'Athena à ce jour". De son côté DEC considérait que le seul développement du système valait la donation faite au MIT. Gettys a rejoint l'équipe de conception du VAXstation 2000 (en) pour en assurer la compatibilité avec X, dénommé DECwindows par DEC. La société affecta 1200 employés au portage de X vers Ultrix et VMS. En 1987, face au succès grandissant de X11, le MIT a souhaité renoncer au pilotage de X, mais lors d'une réunion en juin 1987 rassemblant neuf constructeurs, ceux-ci ont souhaité le maintien d'une organisation neutre pour maintenir l'unité du projet face au marché. En janvier 1988, le Consortium X du MIT est constitué en tant que groupe de vendeurs à but non lucratif, avec Scheifler comme directeur. Sa mission est de piloter les développements futurs de X de manière neutre, en respectant les intérêts commerciaux et éducatifs.
Jim Fulton en janvier 1988, et Keith Packard en mars 1988 rejoignent l'équipe en tant que développeurs seniors. Jim se concentre sur Xlib, les polices, les gestionnaires de fenêtres et les utilitaires, et Keith réimplémente le serveur. L'équipe intègre ensuite Donna Converse, Chris D. Peterson et Stephen Gildea qui se concentrent sur les boîtes à outils et les widgets. Le travail est effectué en étroite collaboration avec Ralph Swick du MIT Project Athena. Le consortium X du MIT a produit plusieurs révisions importantes de X11, à commencer par X11R2 en février 1988. L'équipe est complétée par Jay Hersh en janvier 1991 pour travailler sur les fonctionnalités PEX et X113D, puis par Ralph Mor, également sur PEX et Dave Sternlicht. En 1993, alors que le consortium X du MIT se préparait à quitter le MIT, l'équipe est renforcée par R. Gary Cutbill, Kaleb Keithley et David Wiggins.
En 1993, le X Consortium, Inc. (société à but non lucratif) succède au Consortium X du MIT. Il publie la version X11R6 le 16 mai 1994. En 1995, il reprend le développement de la boîte à outils Motif et du bureau Common Desktop Environment pour les systèmes Unix. Puis il se dissout à la fin de 1996, après une dernière version, X11R6.3. Il laisse en héritage l'exemple d'une participation commerciale dans un développement open source.

## Informations supplémentaires

Le logiciel client X, sans doute le plus connu et celui qui sert à également tester un bon paramétrage, est Xclock (xeyes et Xlogo sont également très utilisés à des fins de démonstration).
Le MIT a publié la première version de X en juin 1984.
À la fin des années 1980, Sun a proposé un protocole et un serveur programmable de plus haut niveau NeWS, programmable dans un langage étendant PostScript pour le graphique distant, qui n'a pas eu le succès escompté.
On trouvait sur X la première version du logiciel Neko.
En langue anglaise, X a popularisé des noms de couleur X11.