Wayland

**Wayland** on näytönhallintajärjestelmä, joka on suunniteltu korvaamaan X Window System (*X-Windows*).

Waylandiin kuuluu protokollamäärittely sekä referenssitoteutus protokollasta.

Ikkunointisovelluksen referenssitoteutuksen nimi on **Weston**.

**XWayland** välisovellus on X-palvelinsovelluksen versio, joka renderöi Wayland-rajapinnalle sallien taaksepäin yhteensopivuuden olemassa olevien sovelluksien kanssa.

Projektin lähdekoodit on julkaistu avoimen MIT-lisenssin alaisuudessa.

## Historia

X-ikkunointia on yritetty yksinkertaistaa ja tehostaa useita kertoja. X-ikkunointiin on sen historian aikana lisätty paljon toimintoja joille nykyään ei ole tarvetta. Wayland käyttää tekniikoita, joita on jo aiemmin kehitetty kuten Direct Rendering Infrastructure (DRI) ajureita ja Direct Rendering Managerin ominaisuuksia. Kompositoivan ikkunanhallinnan kanssa sovellukset piirsivät jo ikkunansa piilossa olevaan puskuriin eikä suoraan näytölle, jolloin X-ikkunointi oli vain välikerros käyttäjän syötteille. Laitteiden näyttötilan hallinta siirtyi käyttöjärjestelmän ytimeen ja näyttömuistin hallinta ytimessä mahdollisti myös muuta kehitystä.

X-ikkunoinnin 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.

Waylandin kehityksen aloitti Kristian Høgsberg vuonna 2008 vapaa-ajallaan työskennellessään Red Hatille. Høgsberg oli työskennellyt X-ikkunoinnin parissa vuodesta 2004 lähtien.

### Käyttökohteet
Graafisten sovellusten käyttö on laajentunut alkuperäisestä työpöytäkäytöstä johon X-ikkunointi kehitettiin: nykyisin on mobiililaitteita sekä mediakohtaisia laitteita, joilla on omat vaatimuksensa. Graafisia sovelluksia käytetään kulkuneuvoissa ja useissa muissa sulautetuissa järjestelmissä. Useat näistä käyttökohteista eivät tarvitse X-ikkunoinnin ominaisuuksia.

Sailfish OS on ottanut Waylandin käyttöön varhain ensimmäiseen versioon.

Fedora Linux on ottanut Waylandin käyttöön versiossa 25.

Raspberry Pi alustan Raspbian on korvannut X-ikkunoinnin Waylandilla.

Debian versio 10 *Buster* käyttää oletuksena Waylandia, mutta X.org on yhä asennettuna.

Laajalti käytetyt Gnome- ja KDE-työpöytäympäristöt ovat lisänneet tuen Waylandille. Gnome käyttää PipeWire-ohjelmistoa näytön jakamiseen.

## Arkkitehtuuri

Wayland-arkkitehtuuri yksinkertaistaa ikkunointijärjestelmää X-ikkunointiin verrattuna. Sen sijaan että asiakassovellukset antaisivat useita piirtokomentoja näyttöä hallitsevalle sovellukselle (*X Server*) asiakassovellukset renderöivät ikkunansa valmiiksi ja välittävät tämän näyttöä hallitsevalle sovellukselle (*compositor*).

Tarvittavat piirtotoiminnot sijaitsevat ohjelmakirjastossa jota asiakasovellukset käyttävät sen sijaan että ne olisivat yhden sovelluksen sisäisiä toimintoja.

Menetelmä vähentää tarvetta prosessien väliselle kommunikaatiolle (), yksinkertaistaa näyttöä hallitsevaa komponenttia ja sallii sovelluksille laajemman kontrollin ikkunan piirtotoiminnoista.

Wayland käyttää hyväkseen Linux-ytimen rajapintoja kuten Kernel Mode-Setting (KMS) ja Direct Rendering Manager (DRM) näyttölaitteiden kanssa, eikä siksi ole suoraan käytettävissä muilla alustoilla jotka eivät näitä rajapintoja toteuta. Wayland käyttää EGL-rajapintaa.

Wayland ei toteuta verkkoläpinäkyvyyttä X-ikkunoinnin tapaan vaan jättää tämän toiminnon erilliselle protokollalle kuten VNC tai RDP.


File:Wayland-architecture.png|Wayland-arkkitehtuuri
File:X-architecture.png|X-ikkunoinnin arkkitehtuuri


## Erot X-ikkunointiin
Wayland ei tee renderöintiä asiakasohjelmien puolesta, vaan asiakasohjelmat käyttävät valitsemaansa menetelmää jaettuun puskuriin ja ilmoittavat palvelimelle kun se on valmis. X11-palvelinta voi käyttää Wayland-asiakasohjelmana.
Ratkaisussa X-ikkunointi siirtyy pois "kuumalta polulta" asiakasohjelman ja laitteiston välissä. Suuri osa toiminnoista on jo aiemmin siirtynyt joko käyttöjärjestelmän ytimeen (näyttömuistin hallinta, komentojen vuoronnus, moodiasetus) tai ohjelmakirjastoihin (FreeType, fontconfig, Cairo ja niin edelleen).
X-ikkunointiin on ajan myötä kehitetty osia, jotka ovat käyttäneet välissään monimutkaisia protokollia, joita ei enää tarvita. X-ikkunoinnin kehitysaikana jaettujen kirjastojen käyttö ei ollut mahdollista ja muistirajoituksien vuoksi tehtiin X-palvelin: myöhemmin jaettujen kirjastojen tuki on kehittynyt.

Waylandia on sanottu "kuvailevaksi" () "ohjaavan" () sijaan. Tämä on merkittävä ero X-ikkunointiin, jossa ikkunat ja näytönsäästäjät vaativat tiettyä asettelua ja kaappaavat syöttölaitteet. Waylandin kanssa sovellus kertoo minkä tyyppisen kuvan se haluaa näyttää ja antaa kompositoijan asetella sen. Wayland käyttää tapahtumapohjaista mallia, joka yksinkertaistaa muun muassa syöttölaitteiden käsittelyä.

## Protokolla
Wayland-protokolla on asynkroninen oliopohjainen protokolla, joka perustuu viesteihin. Viestiä palvelin- ja asiakasohjelman välillä kutsutaan tapahtumaksi (). Rajapinta käyttää versiointia ja oliot toteuttavat jonkin tietyn version rajapinnastaan.

## Tekniikkaa
Wayland-järjestelmässä *pinta* () on perusprimitiivi, jolla muodostetaan käyttäjälle näkyvä "ikkuna". Asiakasohjelmat liittävät puskurit pintoihin, jolloin puskurin sisältö näkyy pinnassa. Kun kompositoija aloittaa näytön päivityksen se ottaa viimeisimmän puskurin sisällön jokaiselle näkyvälle pinnalle. Tätä kutsutaan "postilaatikko-semantiikaksi", jossa puskurit ovat kuvaannollisesti "kirjeitä" postilaatikossa ja uusin näkyvä on päällimäisenä.

## Esimerkki
Esimerkki asiakassovelluksesta, joka ottaa yhteyden Wayland-palvelimeen:

```c
#include <stdio.h>
#include <wayland-client.h>

int main(int argc, char *argv[])
{
    struct wl_display *display = wl_display_connect(NULL);
    if (!display) {
        fprintf(stderr, "Failed to connect to Wayland display.\n");
        return 1;
    }
    fprintf(stderr, "Connection established!\n");

    wl_display_disconnect(display);
    return 0;
}
```


## Ohjelmistoja
libwayland-client ja libwayland-server ovat kirjastoja, jotka sisältävät toteutuksen Wayland-protokollalle yhteyden molempiin päihin.

Wayland-kompositoijan toteuttamiseen on useita ohjelmistokehyksiä, joita ovat wlroots, wlc, Smithay ja libweston. Syötteiden käsittelyyn käytetään esimerkiksi libinput-kirjastoa.

Näyttöpalvelimia eli Wayland-kompositoijia ovat muun muassa Weston (referenssitoteutus), Enlightenment, KWin (KDE), Mutter (Gnome), Sway, Wayfire ja labwc.

## Lähteet

## Aiheesta muualla
* Projektin kotisivut 
* Wayland GNOME-projektin sivuilla 
* The Wayland Protocol