# X Window System

X Window System (noto in gergo come X Window, X11 o semplicemente come X), in informatica, è un gestore grafico molto diffuso, standard de facto per molti sistemi Unix-like (Linux e FreeBSD compresi), pubblicato sotto una licenza di software libero, dal 2004 lo sviluppo è curato dalla X.Org Foundation.
Deriva da un'interfaccia grafica chiamata W (W Window System) sviluppata da Brian Red e Paul Ascente presso l'Università di Stanford negli anni 1980; è stato creato dal MIT nel 1984. L'ultima versione del protocollo, X11, è stata ultimata nel settembre del 1987. La X.Org Foundation implementa il protocollo X versione 11 in XOrg. Dal giugno 2012 è disponibile la versione 7.7.

## Storia
### La creazione

Nel 1984 Bob Scheifler con la collaborazione di Jim Gettys modificò il protocollo sincrono W in uno asincrono chiamato X (versione 1). Scheifler e gli altri (pochi) programmatori, lavorarono molto velocemente e con impegno al progetto, infatti la versione 6 fu pubblicata già nel 1985. X fu portato su varie piattaforme, iniziava a diventare interessante e molte persone esterne lo richiedevano. X11 risale al 1987 quando grandi aziende tra le quali Sun Microsystems, IBM e HP avevano bisogno di uno standard per le interfacce grafiche, e una volta riuniti nel consorzio X.org, decisero le specifiche di X11.

### L'evoluzione di XFree86

Nonostante il tempo passato da allora, il cuore di X11 è praticamente rimasto immutato, l'ultima release con modifica al codice base di X è stata la X11R4, ma il suo unico scopo era solo quello di aumentare la portabilità sulle macchine Sun. Questa mancanza di cambiamenti significativi coincideva con un indebolimento del consorzio X.org, che non era più in grado di gestire il progetto adeguatamente, così giunti a X11R6.6 ci fu l'avvento di XFree86 (il cui nome è un gioco di parole: X free eight six -> X three eight six, X386).
XFree86 prometteva di migliorare radicalmente X e divenne in breve tempo un progetto con un gran seguito. I risultati sperati non arrivarono neanche con XFree e, mancato l'interesse e il finanziamento da parte delle vecchie aziende, X all'improvviso dovette contare solo su volontari.
Cosa ancor più grave, le librerie di X (xlibs) erano totalmente inadeguate per usi grafici avanzati, come poteva essere un desktop environment ed erano un incubo per i programmatori che tentavano di metterci mano; da questa necessità nacquero i "toolkit", ossia delle librerie che, appoggiandosi alle xlib, non solo implementavano funzioni mancanti fornendo strumenti aggiuntivi, ma semplificano la programmazione di applicazioni grafiche per X. Il toolkit più famoso di sempre è probabilmente Motif. Famose sono anche le librerie Qt alle quali si appoggia KDE o le GTK (nate da Gimp) ampliate poi in GTK+.
Anche se questi toolkit favorivano lo sviluppo di applicazioni grafiche, con la nascita di KDE e di GNOME si vide quanto X fosse limitato: era lento e pesante. I membri del core team di XFree86 progettarono a tavolino la versione 4.0, più modulare, più snella, con delle nuove estensioni, e così nel marzo 2000, XFree 4.0 presentava alcune funzioni che gli utenti desktop avevano tanto richiesto, come il supporto dei font con antialiasing e il supporto alla grafica 3D.
Ma non era ancora abbastanza: le novità furono poche e gli sviluppatori stessi erano insoddisfatti dal metodo di sviluppo in quanto bug gravi restavano aperti per mesi e con la release 4.3, uno degli sviluppatori più innovativi appartenenti al core team (Keith Packard) lasciò XFree.

### L'utilizzo nelle distribuzioni GNU/Linux

Le aziende rividero tuttavia in XFree il modo per portare Linux sui desktop e un nuovo consorzio ridiede vita alla X.Org Foundation. Nuovi sviluppatori parteciparono al progetto, sia sul ramo ufficiale sia su parti sperimentali della nuova fondazione.
Ma con la release 4.4rc3 la licenza di XFree cambiò rendendosi incompatibile con la GPL, non poteva più essere incluso nelle distribuzioni Linux e fu necessario avviare un nuovo progetto. La maggior parte degli sviluppatori, abbandonando XFree in favore di X.org, presentarono la versione X11 6.7 (Xorg 6.7) il 6 aprile del 2004. Basato su XFree4.4rc2, presentava correzioni di bug e nuove caratteristiche, come nuova gestione di IPv6, la revisione dei moduli per la gestione dei font, una nuova versione di Xrender e di Xcursor.
Nel settembre 2004 è stato pubblicato Xorg 6.8, che ha portato nuove caratteristiche interessanti come le finestre traslucide, animazioni, decorazioni delle finestre (per esempio, le ombre) e il supporto per le applicazioni accessibili. Pochi giorni dopo è stata resa pubblica la versione 6.8.1 che correggeva una falla di sicurezza.
Il 21 dicembre 2005, in pieno rispetto della roadmap annunciata ufficialmente, è stato pubblicato Xorg X11R7.0, la prima grande pubblicazione del sistema X Window System dopo 10 anni di stagnazione e sviluppo discontinuo. Parallelamente, è stato pubblicato X11R6.9, contenente lo stesso codice della 7.0, ma in un unico blocco di circa 16 milioni di righe di codice. Proprio questa è una delle maggiori innovazioni rispetto al passato: Xorg 7.0 ha portato la modularizzazione del codice del server grafico, ponendo le basi per una maggior rapidità di sviluppo. Fra le numerose note innovative, oltre ad aggiornati driver per hardware video, troviamo EXA, la nuova architettura di accelerazione.

## Caratteristiche generali

Fornisce l'ambiente e i componenti di base per le interfacce grafiche ovvero il disegno, lo spostamento delle finestre sullo schermo e l'interazione con le periferiche di input quali mouse e tastiera. X non gestisce invece l'interfaccia grafica utente cioè lo stile grafico delle applicazioni che vengono gestite invece dall'ambiente desktop scelto dall'utente e in uso sul computer.
Un'altra caratteristica molto importante è la trasparenza di rete: la macchina dove girano i programmi (client) non deve essere necessariamente la macchina locale (display server). I termini server e client vengono spesso confusi: per X il server è il display locale dell'utente, non una macchina remota. Questo permette anche di visualizzare sullo stesso display applicazioni che vengono eseguite su diversi host, oppure che su un host vengano eseguite applicazioni la cui interfaccia grafica finisce su diversi display.
X è ormai usato secondariamente anche da sistemi operativi che non lo supportano nativamente (es. macOS, che usa nativamente Quartz), per permettere il funzionamento del software progettato per questo sistema grafico, come la suite da ufficio OpenOffice.org e GIMP.

### Il modello client/server

Utilizza un modello client/server: in altre parole, il server X comunica con gli altri programmi (client). Il server accetta richieste per output grafici (finestre) e input dall'utente (tramite tastiera, mouse o dal touch screen). Il server X può essere:
* un programma di sistema che controlla l'output video di un computer;
* un componente hardware dedicato (i cosiddetti X terminal: calcolatori dotati solo dell'hardware necessario ad eseguire il server X, pensati per visualizzare applicazioni eseguite su appositi server applicativi);
* un'applicazione che mostra dati su una finestra di un altro sistema grafico.
La denominazione client/server spesso confonde i nuovi utilizzatori di X perché i termini sembrano invertiti: sul terminale dell'utente è in esecuzione il "server" che viene utilizzato dai programmi applicativi (client). X fornisce un servizio di visualizzazione ai programmi, in quest'ottica agisce da server, mentre il programma applicativo (che può anche essere remoto tramite connessione remota) usa i servizi, così agisce come un client.
Il protocollo di comunicazione tra server e client opera in modo trasparente rispetto alla rete: entrambi possono risiedere sulla stessa macchina o su altre, anche con architetture e sistemi operativi differenti; il server ed il client possono anche comunicare in modo sicuro attraverso la rete sfruttando un tunnel cifrato (spesso viene utilizzato SSH).

### L'interfaccia utente

Il sistema di X è stato progettato appositamente per non fornire alcun supporto predeterminato per gli elementi dell'interfaccia utente (quali pulsanti, menù, barre del titolo). Tale infrastruttura viene quindi creata e fornita dagli ambienti desktop. Per tale motivo le interfacce di X sono variate considerevolmente nel tempo e sono differenti passando da un desktop manager all'altro.
Il controllo della visualizzazione ed il posizionamento delle finestre è compito di un particolare applicativo software, detto window manager, indipendente da X. Esempi di tale software sono KWin per KDE o Metacity per GNOME. Tale impostazione ha consentito ad esempio di utilizzare un window manager con effetti 3D avanzati apportando soltanto modifiche marginali al server X.
È responsabile di fornire l'interfaccia verso la tastiera, il mouse e altri dispositivi di input. Per tale motivo alcune scorciatoie da tastiera sono nativamente associate al server X. Control-Alt-Backspace termina il server X attualmente in esecuzione mentre Control-Alt insieme ad un tasto funzione cambia la console virtuale utilizzata.

## Cronologia delle versioni

| Versione | Data di pubblicazione | Commenti sulla versione |
| X1 | giugno 1984 | Prima release dove si usa il nome X; cambiamenti profondi che lo distinguono da W. |
| X6 | gennaio 1985 | Prima versione data sotto licenza ad una manciata di aziende. |
| X9 | settembre 1985 | Supporto per i colori e prima versione sotto licenza MIT. |
| X10 | novembre 1985 | Supporto per IBM RT/PC, AT (sotto DOS) e altri |
| X10R2 | gennaio 1986 | |
| X10R3 | febbraio 1986 | Prima release al di fuori del MIT. Supporto per i primi standard per le finestre grafiche. |
| X10R4 | dicembre 1986 | Ultima versione di X10. |
| X11 | 15 settembre 1987 | Prima release della versione che implementa l'ultimo protocollo. |
| X11R2 | febbraio 1988 | Prima versione di X Consortium. |
| X11R3 | ottobre 1988 | XDM |
| X11R4 | 22 dicembre 1989 | XDMCP e twm sono stati inseriti come gestori standard delle finestre; miglioramenti alle applicazioni; nuovi font. |
| X11R5 | 5 settembre 1991 | PEX, Xcms (gestione dei colori), server font, supporto a X386 |
| X11R6 | 16 maggio 1994 | ICCCM v2.0; Inter-Client Exchange; gestione della sessione X; estensione X Synchronization; estensione X Image; estensione XTEST; X Input; X Big Requests; XC-MISC; cambiamenti di XFree86. |
| X11R6.1 | 14 marzo 1996 | Estensione per il doppio buffer; estensione per il supporto della tastiera; estensione X Record. |
| X11R6.2 X11R6.3 (Broadway) | 23 dicembre 1996 | Funzionalità web. Ultima versione dell'X Consortium. |
| X11R6.4 | 31 marzo 1998 | Supporto per Xinerama. |
| X11R6.5 | | Versione X.org interna, nessuna pubblicazione agli utenti finali. |
| X11R6.5.1 | 20 agosto 2000 | |
| X11R6.6 | 4 aprile 2001 | Correzioni di alcuni bug, modifiche a XFree86. |
| X11R6.7.0 | 6 aprile 2004 | Prima versione della X.Org Foundation, basato su XFree86 4.4rc2. Rimosso XIE, PEX e libXML2. |
| X11R6.8.0 | 8 settembre 2004 | Traslucenza delle finestre; XDamage; Distributed Multihead X; XFixes; Composite; XEvIE. |
| X11R6.8.1 | 17 settembre 2004 | Correzione nella falla di sicurezza nella libreria XPM. |
| X11R6.8.2 | 10 febbraio 2005 | Corretti bug, driver aggiornati. |
| X11R6.9 X11R7.0 | 21 dicembre 2005 | Supporto per l'accelerazione EXA; la maggior parte del codice sorgente è stato spezzettato per la versione modulare 7.0. |
| X11R7.1 | 22 maggio 2006 | AIGLX, modifiche invasive non incluse in 6.9/7.0. |
| X11R7.2 | 15 febbraio 2007 | Eliminazione di Low Bandwidth X (LBX) e del vecchio driver della tastiera, X-ACE, XCB, miglioramenti all'autoconfigurazione, pulizia del codice. |
| X11R7.3 | 6 settembre 2007 | XServer 1.4, Supporto per l'hotplug dei dispositivi di input, RandR 1.2, supporto per UnixWare. |
| X11R7.4 | 23 settembre 2008 | XServer 1.5.1, Startup e shutdown più veloci. |
| X11R7.5 | 26 ottobre 2009 | XServer 1.7.1, X Input 2.0 e Multi-Pointer X, pulizia del codice XKB (X keyboard extension, Gestione avanzata del layout della tastiera), VGA Arbitration, miglioramenti all'accelerazione EXA, XDMX (Distributed Multihead X, un proxy di X server per più X server di back-end). |
| X11R7.6 | 20 dicembre 2010 | X Server 1.9, richiesto XCB |
| X11R7.7 | 6 giugno 2012 | Xorg server 1.12; Sync extension 3.1: aggiunge il supporto oggetto Fence; Xi 2.2 supporta il multitocco; XFixes 5.0: migliora la selezione (Legge di Fitts) |
| X11R7.8 | TBD | RandR extension 1.4, X Resource extension 1.2, XInput extension 2.3 |