X Window System

**X Window System** on bittikarttanäytöille kehitetty ikkunointijärjestelmä. Avoimeen lähdekoodiin perustuva X Window System syrjäytti kilpailijansa jo suhteellisen varhain ja muodostui ikkunointijärjestelmien *[[de facto]]*-standardiksi Unixeissa, Unixin kaltaisissa ja OpenVMS-käyttöjärjestelmissä. X on riippumaton käyttöjärjestelmästä ja laitteistoalustasta kuten suorittimesta. Se on saatavilla useisiin käyttöjärjestelmiin.

X on standardi, protokolla sekä referenssitoteutus, jonka uusimmasta pääversiosta käytetään nimeä X11.

X osaa piirtää suorakulmion muotoisia, päällekkäisiä, hierarkkisia ikkunoita, joihin voidaan piirtää tekstiä ja grafiikkaa. Lisäksi se tukee erilaisia syöttölaitteita, kuten hiiriä ja näppäimistöjä. X ei määrää mitään käyttöliittymää, vaan sitä voi vapaasti vaihtaa.

## Historia

X:n edeltäjä oli *W Window System* (W)-niminen ikkunointijärjestelmä, jota käytettiin Stanfordin yliopiston kokeellisen V-käyttöjärjestelmän päällä.

X:n kehittäminen alkoi MIT:ssä vuonna 1984 Jim Gettysin ja Bob Scheiflerin yhteistyöllä. Gettys oli mukana IBM:n, MIT:n ja DEC:n yhteisprojektissa. *Project Athenan* tavoitteena oli tarjota yhtenäinen tapa käyttää eri valmistajien epäyhteensopivia järjestelmiä. Project Athenassa visiona oli että opiskelijat ja opetushenkilökunta voisivat käyttää mitä hyvänsä tietokonetta, joka olisi kätevin tai sopivin heidän työhönsä.

X1 otettiin käyttöön kesäkuussa 1984. Seuraavat julkaisut seuraavana vuonna olivat X6, X9 ja X10. Useiden tahojen pyynnöstä X10R3 (Version 10 Release 3) julkaistiin tammikuussa 1986 MIT:n ulkopuolelle ja oli ensimmäinen laajamittaiseen käyttöön levinnyt versio. Nykyistä protokollaa käyttävä X11 julkaistiin syyskuussa 1987.

DEC tuki X Window Systemiä rahallisesti ja tarjoamalla työntekijöitä toivoen sen muodostuvan standardiksi, koska DEC pyrki siirtämään kilpailua pois graafisen käyttöympäristön alalta kohti tietokonelaitteistoa, jossa se katsoi olevansa vahvempi. Tuki X Window Systemille oli suunnattu etenkin Sun Microsystemsin NeWS -tuotetta vastaan, joka oli samantyyppinen, mutta perustui suljettuun lähdekoodiin. X oli valmistajariippumaton ja myöhemmin myös Sun tuki sitä.

Vuonna 1988 MIT X Consortium perustettiin yleishyödyllisenä yhteisönä. X Consortiumin perustajiin kuuluivat DEC, DG, IBM ja 13 muuta jäsentä. Organisaatio kehitti X:ää eteenpäin ja teki julkaisut X11R2:sta (1988) julkaisuun X11R6 (1996) asti. X Window Systemin kehitys lamaantui, koska eri tahot tekivät siitä oman suljetun forkkinsa eivätkä jakaneet koodia takaisin yhteiseen X Consortiumin ylläpitämään versioon.

Vuonna 1992 MIT ja MIT X Consortiumin jäsenet päättivät siirtää hallinnan erilliseen riippumattoman organisaatioon. Uusi organisaatio X Consortiumin Inc perustettiin vuonna 1993 ja kaikki oikeudet siirrettiin uuteen organisaatioon 1. tammikuuta 1994. Uusi organisaatio julkaisi X11R6-version saman vuoden toukokuussa. 

Vuonna 1992 Yggdrasil Linux/GNU/X -jakelu yhdisti Linux-ytimen, GNU-ohjelmiston ja X-ikkunointijärjestelmän yhdeksi jakeluksi.

Vuonna 1996 X Consortium ilmoitti siirtävänsä vastuun X:stä The Open Groupille vuoden 1997 alusta lähtien. Open Group oli muodostettu Open Software Foundationin (OSF) ja X/Openin yhdistyessä. 
Vuonna 1998 Open Group julkaisi X11R6.4, jonka lisenssiehtojen muutos ei kelvannut useille kehittäjille. Myöhemmin samana vuonna Open Group julkaisi saman version uudelleen eri lisenssillä.
Toukokuussa 1999 Open Group perusti X.Orgin, joka teki julkaisut X11R6.5.1:stä eteenpäin.  

Varhaisesta 1990-luvusta lähtien varhaiselle 2000-luvulle kehitystä oli tapahtunut XFree86-toteutuksen parissa. Projekti oli nimetty sanaleikkinä X386-toteutuksen mukaan (*Free* kuulostaa samalta kuin englanninkielen kolmea tarkoittava sana *three*), jonka uudemmat versiot myytiin kaupallisesti. 
XFree86 oli yleinen Linux- ja BSD-alustoilla käytetty toteutus. Kehittäjien välisen konfliktin ja kiistaa aiheuttaneen lisenssimuutoksen johdosta XFree86-versio poistettiin useista jakeluista. Kehitys on jatkunut Xserver- ja X.Org-toteutuksien parissa.

Tammikuussa 2005 perustettiin X.Org Foundation, joka on perustettu yleishyödyllisenä järjestönä. Järjestö julkaisi X11R6.9- ja X11R7.0-versiot joulukuussa 2005, joista jälkimmäisessä on käytössä GNU-projektin käännöstyökalut.

## Arkkitehtuuri

X perustuu asiakas-palvelin-arkkitehtuuriin. Laite tai ohjelma, joka piirtää ikkunoita ja grafiikkaa ruudulle, on X-palvelin (*X Window System display server*). Ohjelmat, jotka haluavat piirtää ikkunansa ruudulle tai ottavat muuten yhteyden palvelimeen, ovat asiakkaita. X:n verkkoläpinäkyvyys merkitsee sitä, että palvelin ja asiakas voivat olla eri tietokoneilla ja toimia tietokoneen käyttäjälle läpinäkyvästi. Asiakas ja palvelin voivat käyttää Unix domain socket -kommunikaatiota tai TCP/IP-yhteyttä.
Verkkoprotokollan sijaan asiakas ja palvelin voivat käyttää jaettua muistia (MIT-SHM laajennuksella) nopeampaan kommunikointiin. X11-protokolla ei ole tehokas muissa kuin lähiverkoissa johtuen useista suunnittelupäätöksistä, joista tärkeimpiä ovat, että protokolla vaatii paljon tiedonvälitystä verkon yli, ja että monet toiminnot vaativat kättelyä johtaen pitkään viiveeseen suuren latenssin verkoissa. Tyypillisesti kannettavan tai pöytätietokoneen käyttäjällä sekä asiakas- että palvelinohjelmat ajetaan samalla koneella.

X-palvelinta voidaan suorittaa Unix- tai Linux-työasemalla tai se voi olla yksi ohjelma tai ikkuna Windows-käyttöjärjestelmän työpöydällä. Pelkkään X:n käyttöön tarkoitettuja X-päätelaitteita oli ennen myynnissä, mutta nykyisin halvat henkilökohtaiset tietokoneet Linux-käyttöjärjestelmällä ovat korvanneet ne.

### Ikkunointi
X Window System tukee yhtä tai useampaa näyttöä, joilla voi olla päällekkäisiä ikkunoita tai ali-ikkunoita. X Window Systemissä näyttö () on fyysinen tietokonenäyttö (), joka voi olla värillinen, harmaasävyinen tai mustavalkoinen. Työasemassa voi olla useita näyttöjä: joukko näyttöjä, jota yksi käyttäjä ohjaa on työpöytä tai näyttö (, huom. suomeksi päällekkäisiä termejä).

Ikkunat järjestetään hierarkioihin, jossa ylimmäisenä on juuri-ikkuna, joka kattaa jokaisen näytön. Juuri-ikkuna on osittain tai täysin lapsi-ikkunoiden peittämä. Kaikilla ikkunoilla paitsi juuri-ikkunalla on vanhempi. Lapsi-ikkunoilla voi olla omia lapsi-ikkunoita.

### ICCCM

X11-ikkunointi on tietoisesti suunniteltu nimenomaan mekanismille () eikä käytännölle (). Mekanismit toteuttavat käytännöt, jolloin mekanismit suunnitellaan tukemaan mahdollisimman laajaa joukkoa eri käytäntöjä. X-asiakasohjelma kommunikoi palvelimen kanssa *X Window System Protocol, Version 11* -protokollan avulla ja voi toimia oikein yksistään, mutta ei toimi oikein muiden samaa palvelinta käyttävien ohjelmien kanssa.
Tästä johtuen asiakasohjelmien väliseen kommunikaatioon on kehitetty ICCCM-määrittely (). ICCCM kuvailee miten valinnat, ikkunoiden ominaisuudet ja resurssit välitetään. 

ICCCM liittyy muun muassa leikkaa-ja-liimaa -toiminnon toteuttamiseen asiakasohjelmien välillä.
Freedesktop.orgin mukaan X-asiakasohjelmat eivät ole toteuttaneet leikepöytää johdonmukaisella tavalla ja määrittelee lisäohjeita.

ICCCM:ää on kritisoitu vaikeaksi toteuttaa huolimatta siitä, että määrittely on lyhyt.
ICCCM:n ohjeita myös rikotaan tarkoituksella: ikoneille sallitaan vain yksi bitti väreille (musta tai valkoinen) ja muutoin olisi käytettävä toista tapaa, jossa on oma rajoitteensa; käytännössä ohjelmat sallivat useampia värejä kuin mitä ICCCM:n mukaan voi käyttää.

### GLX
GLX on laajennus X Window Systemiin OpenGL:n käyttöä varten. X-ikkunoinnin verkon yli käyttöä varten OpenGL-renderöintikomennot voidaan kapseloida X-protokollaan. Koska 3D-grafiikan renderöinnissä suorituskyky on tärkeää voidaan useat vaiheet ohittaa kun käytetään *suoraa renderöintiä* (kun prosessilla on suora pääsy grafiikkaliukuhihnaan. DRI on tekniikka, joka ohittaa X-palvelimen kokonaan.

EGL on Khronos Groupin rajapinta ikkunointijärjestelmän kanssa toimintaan, jota voidaan käyttää eri alustoilla ja eri ikkunointijärjestelmillä.

### XLFD, Xft
XLFD (X Logical Font Description) on X-ikkunoinnin tapa kirjaintyyppien kuvaamiseen, joka on tarkoitettu toimimaan eri X-palvelimien, tiedostojärjestelmien ja kirjainkokoelmien kanssa. Xft on kirjasto, joka on suunniteltu toimimaan FreeType-kirjaston kanssa. Xft ei sisällä konfigurointia vaan on tarkoitettu toimimaan fontconfigin kanssa. 2000-luvun alussa X Rendering Extension -laajennos poisti tarpeen käsitellä kirjaintyyppejä X-palvelimessa, jolloin ne voitiin käsitellä asiakasohjelmassa. Laajennos toi useita muutoksia ikkunoinnissa käytettyyn renderöintimalliin.

X-ikkunoinnille on myös xfs (X Font Server) -palvelinohjelma, joka jakaa kirjaintyyppejä X-palvelimille.

### XDMCP
XDMCP (X Display Manager Control Protocol) on X-ikkunoinnin käyttämä palvelu sisäänkirjautumiseen. Itsenäinen näyttö kuten X-pääte käyttää XDMCP-protokollaa.

## Käyttöliittymä
### Ikkunanhallintaohjelmat
Koska X-palvelin toteuttaa vain mekanismin eikä käytäntöä on olemassa ikkunanhallintaohjelmia, jotka hallitsevat näytöllä näkyvää tilaa. Ikkunanhallintaohjelmat ovat X:n asiakasohjelmia, jotka päättävät minne ikkunat asetetaan, tarjoaa mekanismit ikkunoiden hallintaan kuten koon ja sijainnin päättämiseen ja ikkunoiden "koristeluun". Yksi merkittävä ominaisuus ikkunanhallintaohjelmissa on keino käynnistää muita ohjelmia, joko syöttämällä ohjelman nimi tai käynnistysvalikon avulla.

### Työpöytäympäristöt
X11:lle on kehitetty monia yhtenäisen käyttöliittymän antavia työpöytäympäristöjä (*desktop environment*). Aikaisimpia olivat Sunin kehittämä ja käyttämä OpenWindows ja DECin VMS:stä kotoisin oleva DECwindows. Lähes kaikki kaupalliset Unix-valmistajat siirtyivät kuitenkin The Open Groupin kehittämään Common Desktop Environmentiin (CDE). Muita työpöytäympäristöjä oli muun muassa HP:n VUE-ympäristö (*Visual User Environment*).

Yhtenäisen käyttöliittymän tarjoamiseen Matthias Ettrich kertoi lokakuussa 1996 KDE-projektistaan. KDE 1.0 julkaistiin 12. heinäkuuta 1998. KDE käytti Qt-käyttöliittymäkirjastoa, jonka lisenssi ei ollut avoin. Toinen ryhmä Miguel de Icazan johdolla aloitti siksi elokuussa 1997 GNOME-projektin (*GNU Network Object Model Environment*), joka on nykyisin GNU-projektin virallinen työpöytäympäristö.

### Käyttöliittymäkirjastot

X11-ohjelmointia tehdään sen alimmalla tasolla Xlib-kirjaston avulla. Historiallisesti on kehitetty useita kirjastoja helpottamaan ohjelmointityötä.
Yksi varhaisimmista on X Athena Widgets (Xaw). Tämä kirjasto on useiden X:n mukana toimitettavien pikkuohjelmien pohjana.
1990-luvun alussa Unixissa kilpailivat kaksi kirjastoa, Sunin ja AT&T:n OPEN LOOK (Xview) ja Motif (Xm), jota tukivat IBM, DEC, HP ja SCO. Motifista tuli 1993 kaupallisten Unixien standardi ja CDE-ympäristön pohja. Motif-kirjastolle on kehitetty avointa kloonia nimellä Lesstif, jonka kehitys lopetettiin kun Motif julkaistiin LGPL-lisenssillä.

GIMP-kuvankäsittelyohjelman yhteydessä kehitetty GTK-kirjasto ja norjalaisen TrollTechin Qt-kirjasto ovat suosittuja vaihtoehtoja käyttöliittymäkirjastoille. Muita kirjastoja ovat muun muassa FLTK, wxWidgets ja 
Tk, jota on käytetty komentosarjakielten kanssa.

## Toteutukset
Virallisen referenssitoteutuksen lisäksi on muita toteutuksia, joista osa on kaupallisia (maksullisia):
* OpenText (ennen Hummingbird) Exceed
* X-Win32
* WinaXe
* Xmanager

Cygwin/X on Cygwin-ympäristölle siirretty versio X Window Systemistä, joka tarkoitettu käytettäväksi Microsoft Windowsissa.

## Tulevaisuus
X-ikkunointia on yritetty yksinkertaistaa ja tehostaa useita kertoja.
Linux-käyttöjärjestelmille on kehitetty Wayland-ohjelmistoa korvaamaan X11-ikkunointijärjestelmä: Wayland hyödyntää useita kehitettyjä tekniikoita ja X-palvelimen ominaisuudet ovat suurelta osin jo siirtyneet käyttöjärjestelmän ytimeen tai jaettuihin kirjastoihin.
X-ikkunoinnin kehitysaikana jaettujen kirjastojen käyttö ei ollut mahdollista ja muistirajoituksien vuoksi tehtiin X-palvelin: myöhemmin jaettujen kirjastojen tuki on kehittynyt ja koodin käyttömahdollisuudet ovat parantuneet. Myöhemmin kehitetyt tekniikat kuten VNC voivat toimia tehokkaammin verkon yli kuin X:n oma protokolla, jolloin ikkunointijärjestelmän ei tarvitse suoraan tukea verkkoläpinäkyvyyttä. Videokuvan näyttämistä ja laitteistokiihdytystä varten on kehitetty VDPAU- ja VAAPI-rajapinnat.

X11-protokollan seuraajalle X12 on olemassa suunnitelmia mutta ei toteutusta. X12 ei ollut vakavasti otettava X11:n seuraaja, mutta se auttoi tunnistamaan X11:sta ongelmakohdat.

## Katso myös
* Luettelo X Window Systemin työpöytä- ja ikkunointiympäristöistä
* Työpöytäympäristö
* Wayland

## Huomioita

## Lähteet
* 

### Viitteet

## Aiheesta muualla

* X.org 
* freedesktop.org 
* XFree86 
* The X Window System - The Open Group 
* The XFree / X.Org fork and open source governance 
* Documentation for the X Window System 
* X Toolkit Intrinsics – C Language Interface