Wayland

Wayland er et fritt og åpent vindussystem for Unix og Unix-liknende operativsystemer. Det er en direkte etterfølger til vindussystemet X (X11). Det består av en kommunikasjonsprotokoll mellom en vindustjener og dens klienter, og er implementert i programmeringsspråket C.

Linuxkjernen og derivater av Berkeley Software Distribution (BSD) har i årenes løp overtatt mange av oppgavene til X11, deriblant minnehåndtering, prioritering av kommandoer og modus-setting. Andre funksjoner er overtatt av programvarebiblioteker for skrifttyper og 2D-grafikk. Wayland overlater disse oppgavene til operativsystemkjernen og biblioteker, og er derfor både enklere og raskere enn X11. Mange skrivebordsmiljøer som opprinnelig benyttet X11 som en mellomliggende prosess utenfor operativsystemkjernen, har etterhvert gått over til å støtte Wayland.

Wayland er blitt tatt i bruk av FreeBSD, DragonFly BSD og av ledende Linuxdistribusjoner som Slackware, Debian, Gentoo, openSUSE, Fedora, OpenMandriva Lx og Arch Linux. Ubuntu benyttet vindustjeneren Mir fra versjon 13.10, men gikk over til Wayland i versjon 18.04.

Wayland blir utviklet av freedesktop.org under ledelse av danske Kristian Høgsberg. Kildekoden er åpent tilgjengelig under MIT-lisensen. Første versjon ble lansert 9. februar 2012. Siste versjon er 1.23.1 som ble lansert 24. august 2024.

Bakgrunn
Linux er et operativsystem som benytter beskyttelsesringer i moderne mikroprosessorer. Dette er en mekanisme som beskytter data og funksjonalitet mot feil i programmer og uønsket adferd. Utføring av maskinkode for å modifisere registrene for deskriptortabeller er eksempel på noe som kan få hele systemet til å krasje hvis det er feil i programvaren, og som må overlates til dedikert og betrodd programvare.
Linux skiller mellom brukermodus og supervisory mode. Programmer i brukermodus har ikke lov til å utføre disse maskinvarerelaterte kommandoene direkte. De må sende et systemkall til supervisory mode, hvor en betrodd del av Linux utfører funksjonen. Denne betrodde delen av Linux er Linuxkjernen. Vi sier at Linuxkjernen kjører i ring 0, mens de øvrige prosesser kjører i ring 3.

Vindussystemet X er programvare som kjører som en ekstern prosess i ring 3. Moderne skrivebordsmiljøer som KDE, GNOME og Xfce kjører i tillegg som eksterne prosesser som sender kall til en X Server. Man får dermed en situasjon hvor grafikken i Linux sender kall gjennom to abstraksjonslag. Dette er unødvendig komplekst og ressurskrevende.

Mange av funksjonene i X11 har i årenes løp blitt flyttet inn i operativsystemkjernen til Linux. Dette gjelder minnehåndtering, prioritering av kommandoer og modus-setting. Andre funksjoner i X11 er overtatt av programvarebiblioteker for skrifttyper og 2D-grafikk: Cairo, pixman, FreeType, fontconfig, pango, etc. I stedet for at skrivebordsmiljøene foretar kall til X11, som igjen foretar systemkall til kjernen, er filosofien bak Wayland at skrivebordsmiljøene bør få aksess til disse spesialiserte funksjonene gjennom systemkall direkte til kjernen.

X11 har etterhvert utviklet en kompleksitet som omfatter kode-tabeller, glyf-rasterisering og overføring av disse til hurtigminnet, X logical font descriptions (XLFD), tegning av stiplete linjer, polygoner, buer og andre grafiske primitiver som ble introdusert på 1980-tallet. Alt dette må støttes for å hevde at et program er kompatibel med X11, selv om de færreste tar dette i bruk. Videre er X11 blitt forsøkt holdt moderne ved å tilføye utvidelser som XRandR, XRender og COMPOSITE; disse er beholdt i Wayland av kompatibilitetshensyn.

Wayland er ment å erstatte X11 og å tilby et raskere og enklere vindussystem. En rekke grafiske utviklingsbiblioteker støtter Wayland: GTK+ (fra versjon 3.10), Qt (fra versjon 5.0), Clutter, Enlightenment Foundation Libraries, Simple DirectMedia Layer (fra versjon 2.0.2), GLFW (fra versjon 3.1) og Freeglut. Det samme gjør en rekke skrivebordsmiljøer og grafiske skall. GNOME hadde eksperimentell støtte for Wayland i versjon 3.10, og fikk full støtte i versjon 3.12. KDE Software Compilation fikk full støtte fra versjon 5.7. MATE fikk støtte i versjon 1.12. Enlightenment støtter Wayland fra versjon E19 (0.19). Skrivebordsmiljøet Hawaii har eksklusiv støtte for Wayland. Glx-dock støtter Wayland fra versjon 3.4.

Arkitektur
Protokollens arkitektur
Protokollen til Wayland kalles Weston. Den følger en klient-tjener modell hvor klienter er grafiske applikasjoner som ber om piksel-buffer på skjermen, og tjeneren (compositor) er den som kontrollerer dette bufferet.

Waylands referanseimplementasjon har blitt designet som en to-lags protokoll:

 Et lavnivå lag som håndterer interprosesskommunikasjon (IPK) mellom de to involverte prosesser – klienten og tjeneren – og marshalling av de data de utveksler. Dette laget er meldingbasert og vanligvis implementert ved å bruke operativsystemkjernens IPK tjenester, spesielt Unix domain sockets i tilfellet med Linux og Unix-liknende operativsystemer.
 Et høynivå lag bygd over det, som håndterer informasjonen som klienten og tjeneren behøver for å implementere de grunnleggende egenskapene ved et vindussystem. Dette laget er implementert som en asynkron objektorientert protokoll.

Mens lavnivå laget ble skrevet manuelt i C, er høynivålaget automatisk generert fra en beskrivelse av elementer av protokollen som er lagret i XML. Hver gang protokollbeskrivelsen i denne XML-filen forandrer seg, kan C-koden som implementerer en slik protokoll bli regenerert for å inkludere de nye forandringene. Referanseimplementasjonen av protokollen til Wayland er delt i to biblioteker. Biblioteket som håndterer klienter kalles libwayland-client og biblioteket som håndterer tjenere kalles libwayland-server.

Oversikt over protokollen
Waylandprotokollen er blitt beskrevet som asynkron og objektorientert. Objektorientert betyr at tjenestene som tilbys av tjeneren er presentert som en serie objekter som lever på samme tjener. Hvert objekt implementerer et grensesnitt som har et navn, et antall metoder (kalt forespørsler) såvel som flere assosierte events. Hver forespørsel og event har null eller flere argumenter, hver enkelt har et navn og en datatype. Protokollen er asynkron fordi forespørsler ikke må vente på synkroniserte svar eller bekreftelser for å unngå round-trip delays og oppnå forbedret ytelse.

Klienter kan foreta en forespørsel (en metode invokasjon) på samme objekt hvis objektets grensesnitt er støttet av forespørselen. Klienten må også legge ved de påkrevde data for argumentene til slike forespørsler. Dette er måten klientene ber om tjenester fra tjeneren. Tjeneren i sin tur sender informasjon tilbake til klienten ved å forårsake objektet å sende events. Disse events kan utgå fra tjeneren som respons på en forespørsel, eller de kan sendes asynkront, på grunn av hendelser internt (utløst av en innmatningskilde, f.eks. en datamus eller et tastatur) eller tilstandsforandring. Feilbetingelsene blir også signalisert som en event av tjeneren.

For at en klient skal bli istand til å foreta en forespørsel til et objekt, trenger den først å meddele tjeneren ID-nummeret den vil bruke for å identifisere objektet. Det er to typer objekter i tjeneren: Globale objekter og ikke-globale objekter. Globale objekter blir kunngjort av tjeneren til klientene når de skapes (og også når de ødelegges), mens ikke-globale objekter vanligvis skapes av andre objekter som allerede eksisterer som en del av deres funksjonalitet.

Grensesnittet og deres forespørsler og events er kjerne-elementer som definerer Wayland-protokollen. Hver versjon av protokollen inkluderer et sett med grensesnitt, sammen med deres forespørsler og events, som er forventet å være i enhver Wayland compositor. Denne kan valgfritt implementere og definere deres egne grensesnitt med sine egne forespørspler og events, for å utvide funksjonaiteten ut over kjerneprotokollen. For å speile endringer mellom ulike versjoner av protokollen, inneholder grensesnitt et versjonsnr-attributt i tillegg til dets navn; dette attributtet tillater et grensesnitt å bli behandlet forskjellig fra tidligere versjoner av seg selv, med flere eller færre forespørsler og events. Hver tjener fremviser ikke bare grensesnittet, men også versjonen; og objektene implementerer en spesiell versjon av et grensesnittet.

Kjernegrensesnitt
Filprotokollen /wayland.xml er en XML-fil som lister grensesnitt sammen med deres forespørsler, events og andre attributter. Dette sett av grensesnitt er minimum som er påkrevd for å implementere en Wayland compositor.

Noen av de mest grunnleggende grensesnitt er:
 wl_display – det sentrale globale objekt, et spesielt objekt som innkapsler Wayland-protokollen selv
 wl_registry – det globale registerobjekt, hvor tjenerens registrerer alle globale objekter som den ønsker skal være tilgjengelig for alle klienter
 wl_compositor – et objekt som representerer tjeneren, og som kombinerer forskjellige grensesnitt til et enkelt output
 wl_surface – et objekt som representerer et rektangulært område på skjermen, definert av en lokasjon, størrelse og pikselinnhold
 wl_buffer – et objekt som, når det er tilknyttet et wl_surface objekt, gir et visbart innhold
 wl_output – et objekt som representerer det visbare området på skjermen
 wl_pointer, wl_keyboard, wl_touch – objekter som representerer ulike utstyr for innmatning, som pekere og tastatur
 wl_seat – et objekt som representerer et sete (et sett med utstyr for innmatning/utmatning) i multisetekonfigurasjoner

En typisk Wayland klient sesjon starter ved å åpne en forbindelse med tjeneren ved å bruke objektet wl_display. Dette er et spesielt lokalt objekt som representerer forbindelsen og ikke lever sammen med tjeneren. Ved å bruke dets grensenitt kan klienten sende forespørsler til det globale objektet wl_registry i tjeneren, hvor alle de globale objektnavnene lever, og binde de som klienten er interessert i. Vanligvis binder klienten minst et wl_compositor objekt, hvorfra det vil be om et eller flere wl_surface objekter for å vise output på skjermen.

Tilleggsgrensesnitt
En Wayland compositor kan definere og eksportere sine egne tilleggsgrensesnitt. Denne egenskap blir brukt til å utvide protokollen hinsides den grunnleggende funksjonalitet som er sørget for av kjernegrensesnittene, og har blitt standardmåten å implementere protokollens utvidelser på. Visse tjenere kan velge å tilføye grensesnitt som gir spesialiserte eller unike funksjoner. Wayland kan implementere dem som eksperimentelle grensesnitt for nye konsepter og ideer, hvorav noen senere kan bli en del av kjerneprotokollen (slik som wl_subsurface grensenittet som ble tilføyd i Wayland 1.4).

Utvidelser til kjerneprotokollen

Versjonshistorikk 
 Versjon(Wayland) Versjon(Weston) Dato Wayland Weston30. september 2008Første commit0.800.8027. august 2011 Første versjon0.850.85 9. februar 2012 0.950.95 24. juli 2012 Begynte stabilisering av klient-API/ABI definert i wayland-client.h,og protocol/wayland.xml. Protokoll-grensesnitt (wl_drm) og biblioteker (gbm) som er en del avMESA, oppgraderes til MESA 8.0.40.990.99 15. oktober 2012Bedre feilhåndtering, en veldefinert atomisk oppdateringsmekanismeog en stabil event dispatching for tråder (EDT) som prosesserer hendelser fra hendelseskøen1.01.0 22. oktober 2012 Stabil wayland-klient API1.0.11.0.1 19. november 20121.0.21.0.2 30. november 20121.0.31.0.3 14. desember 20121.0.41.0.4 24. januar 20131.0.51.0.5 14. februar 20131.0.61.0.6 22. mars 20131.11.1 15. april 2013 Rendering, FBDEV, RDP1.1.1 7. juni 20131.21.2 12. juli 2013 Stabil wayland-tjener API Fargehåndtering. Under-overflater. Raspberry Pi1.2.11.2.1 22. august 20131.2.2 29. august 20131.31.3 11. oktober 2013 Flere piksel formater. Støtte for språkbindinger Driver for Android støtte via libhybris1.3.1 31. oktober 20131.41.4 23. januar 2014 Nye wl_subcompositor og wl_subsurface grensesnitt Multiple rammebuffer formater. logind støtte for rotløse Weston1.51.5 20. mai 2014 libinput. Fullskjerm skall.1.61.6 19. september 2014 libinput som standard1.6.11.6.1 23. januar 20151.71.7 14. februar 2015 Støtte for Wayland presentasjonsutvidelser og for dreining av overflater. IVI skall protokoll.1.81.8 2. juni 2015 Adskilte headere for kjerne og generert protokoll Repaint skedulering. Navngitte outputs. Output transformasjoner. Overflate API.1.8.1 12. juni 20151.91.9 21. september 2015Bryce Harrington: [ANNOUNCE wayland 1.9.0], osg.samsung.com, 21. september 20161.101.10 17. februar 2016Bryce Harrington: [ANNOUNCE wayland 1.10.0], bryce at osg.samsung.com, 17. februar 20161.111. juni 2016Bryce Harrington: [ANNOUNCE wayland 1.11.0], osg.samsung.com, 1. juni 20161.11.120. september 2016Bryce Harrington: [ANNOUNCE wayland 1.11.1], osg.samsung.com, 20. september 20161.1221. september 2016Bryce Harrington: [ANNOUNCE wayland 1.12.0], osg.samsung.com, 21. september 20161.1321. februar 2017Bryce Harrington: [ANNOUNCE wayland 1.13.0], osg.samsung.com, 21. februar 20172.0.024. februar 2017[ANNOUNCE weston 2.0.0], freedesktop.org, 25. februar 20171.143.08. august 2017[ANNOUNCE wayland 1.14.0], freedesktop.org, 8. august 2017.1.154.09. april 2018[ANNOUNCE wayland 1.15.0], freedesktop.org, 9. april 20181.165.024. august 2018Derek Foreman: [ANNOUNCE wayland 1.16.0], lists.freedesktop.org, 24. august 20181.1720. mars 2019Derek Foreman: [ANNOUNCE wayland 1.17.0, lists.freedesktop.org, 21. mars 2019Tilføyde en protokoll for uttrykke en intern feilmelding for tjenere, og en ny versjon av wl_seat hvor ingen endringer annet enn tastatur-mappinger må være private.6.027. mars 2019Derek Foreman: (ANNOUNCE) weston 6.0.0, lists.freedesktop.org, 28. mars 2019Bygging av weston-simple-dmabuf-egl i Meson. DRM: gbm_surface pointer nullstilles etter å ha destruert GBM-overflaten.6.0.124. juni 2019Derek Foreman: (ANNOUNCE weston 6.0.1], lists.freedesktop.org, 24. juni 20197.023. august 2019Simon Ser: (ANNOUNCE) weston 7.0.0, lists.freedesktop.org, 23. august 2019Returverdien til to funksjoner har blitt endret fra void til int: weston_log_scope_printf og
weston_log_scope_vprintf. I tillegg er weston_binding_destroy public igjen. Weston-terminalen ignorerer SIGPIPE.8.024. januar 2020Simon Scr: (ANNOUNCE) weston 8.0.0, lists.freedesktop.org, 24. januar 2020Mer effektiv bruk av DRM for maskinvare. DRM støtter HDCP, og openGL støttes uten krav om «headere». DRM kan bygges uten GBM. EGL_KHR delvis oppdatering reduserer båndbredden på noen GPU'er.1.1811. februar 2020(ANNOUNCE) wayland 1.18.0, lists.freedesktop.org, 11. februar 2020Støtte for byggesystemet Meson. API tillater at applikasjoner og verktøy deler samme Wayland-forbindelse. Sporing av timere for Wayland tjenere i bruker-rommet for å unngå skapelsen av for mange FDer. Funksjonen wl_global_remove reduserer kappløpstilstander med globale variabler.9.04. september 2020Simon Ser: (ANNOUNCE) weston 9.0.0, lists.freedesktop.org, 4. september 2020 Et nytt kioskskall lar deg alltid vise regulære skrivebordsapplikasjoner i full skjerm. Forbedret infrastruktur for testing: DRM tester støttes, DRM og OpenGL tester er aktivert i vårt CI. Støtte for DRM panel-orientering.1.1927. januar 2021Simon Ser: (ANNOUNCE) wayland 1.19.0, lists.freedesktop.org, 27. januar 2021Mindre protokolloppdateringer.1.209. desember 2021(ANNOUNCE) wayland 1.20.0, lists.freedesktop.org, 9. desember 2021Støtten for FreeBSD ble oppstrøms oppdatert. Byggesystemet autotools ble erstattet av Meson. wl_surface.offset tillater klienter å oppdatere en overflates buffer-offset uavhengig av bufferet, wl_output.name. Klienter kan identifisere output uten å være avhengige av xdg-output-unstable-v1. Hendelser har en ny type attributt og kan bli markert som destruktorer.10.01. februar 2022(ANNOUNCE) weston 10.0.0, lists.freedesktop.org, 1. februar 2022Støtte for farge-transformasjoner, gamma-miksing av farger og fargeprofiler.
- Tilbakemelding til linux-dmabuf-unstable-v1
- støtte for appvelgeren libseat.
- Eksempelklienter er konvertert til xdg-shell.
- Grensesnittet wl_shell, fbdev og weston-launch er fjernet.10.0.123. juni 2022(ANNOUNCE) weston 10.0.1, lists.freedesktop.org, 23. juni 20221.2130. juni 2022 (ANNOUNCE) wayland 1.21.0, lists.freedesktop.org, 30. juni 2022Tilføyde pekeren wl_pointer, høyoppløsning scrolling og noen funksjoner for bekvemmelighet10.0.226. juli 2022(ANNOUNCE) weston 10.0.2, lists.freedesktop.org, 26. juli 2022Bugfikser10.0.314. desember 2022(ANNOUNCE) weston 10.0.3, lists.freedesktop.org, 14. desember 202310.0.417. mai 2023(ANNOUNCE) weston 10.0.4, lists.freedesktop.org, 17. mai 202310.0.52. august 2023(ANNOUNCE) weston 10.0.5, lists.freedesktop.org, 2. august 202311.022. september 2022(ANNOUNCE) weston 11.0.0, lists.freedesktop.org, 22. september 2022- Mer fargehåndtering:I WIP-farge opsjonen, kan du sette opp en monitor for ICC-profil, og fargene vil mappes fra sRGB til denne profilen. Du kan også sette opp en monitor for HDR-modus.
- Forbedringer av RDP.
- Ytelsesforbedringer i DRM.
- Støtte for protokollen wp_single_pixel_buffer_v1.
- weston_buffer refactoring.
- Mulighet for å kjøre KMS + RDP samtidig og støtte for flere GPUer.
- cms-static og cms-colord er fjernet.
- wl_shell er erstattet av xdg-shell.
- fbdev er erstattet med KMS.
- weston-launch og launcher-direct er erstattet av libseat.
- weston-info er erstattet av wayland-info, og weston-klientene er fjernet.
- KMS max-bpc property ble standard.11.0.114. desember 2022(ANNOUNCE) weston 11.0.1, lists.freedesktop.org, 14. desember 202211.0.217. mai 2023(ANNOUNCE) weston 11.0.2, lists.freedesktop.org, 17. mai 202311.0.32. august 2023(ANNOUNCE) weston 11.0.3, lists.freedesktop.org, 2. august 20231.224. april 2023 (ANNOUNCE) wayland 1.22, lists.freedesktop.org, 4. april 2023Tilføyde eksplisitte hendelser for den foretrukne bufferskalaen og transform. En hendelse indikerer musepekerens fysiske rulleretning. Tilføyde noen bekvemmelighetsfunksjoner, og diverse spesifikasjonsavklaringer.12.0.017. mai 2023(ANNOUNCE) weston 12.0.0, lists.freedesktop.org, 17. mai 202312.0.125. mai 2023(ANNOUNCE) weston 12.0.1, lists.freedesktop.org, 25. mai 202312.0.22. august 2023(ANNOUNCE) weston 12.0.2, lists.freedesktop.org, 2. august 202312.0.328. november 2023(ANNOUNCE) weston 12.0.3, lists.freedesktop.org, 28. november 202312.0.423. april 2024(ANNOUNCE) weston 11.0.4, lists.freedesktop.org, 23. april 202412.0.529. april 2025(ANNOUNCE) weston 11.0.5, lists.freedesktop.org, 29. april 202413.0.028. november 2023(ANNOUNCE) weston 13.0.0, lists.freedesktop.org, 28. november 202313.0.123. april 2024(ANNOUNCE) weston 13.0.0, lists.freedesktop.org, 23. april 202413.0.25. juni 2024(ANNOUNCE) weston 13.0.2, lists.freedesktop.org, 5. juni 202413.0.35. juni 2024  (ANNOUNCE) weston 13.0.3, lists.freedesktop.org, 5. juni 202413.0.425. april 2025 (ANNOUNCE) weston 13.0.4, lists.freedesktop.org, 25. april 202514.0.04. september 2024(ANNOUNCE) weston 14.0.0, lists.freedesktop.org, 4. september 202414.0.121. oktober 2024(ANNOUNCE) weston 14.0.1, lists.freedesktop.org, 4. oktober 20241.2330. mai 2024 Simon Ser: (ANNOUNCE) wayland 1.23.0, lists.freedesktop.org, 30. mai 2024 kl 19:03:161.23.124. august 2024Simon Ser: (ANNOUNCE) wayland 1.23.1, lists.freedesktop.org, 24. august 2024 kl 15:50:371.247 juli 2025Simon Ser: (ANNOUNCE) wayland 1.24.0, freedesktop.org, 7. juli 20251.252026 ?28. januar 2022: Protokollene lansert1.262026 ?7. juli 2022: Protokollene lansert1.272026 ?10. oktober 2022: Protokollene lansert1.282026 ?4. november 2022: Protokollene lansert1.292026 ?14. november 2022: Protokollene lansert1.302026 ?21. november 2022: Protokollene lansert1.312026 ?21. november 2022: Protokollene lansert1.322026 ?3. juli 2023: Protokollene lansert1.332026 ?19. januar 2024: Protokollene lansert1.342026 ?20. mars 2024: Protokollene lansert1.352026 ?17. april 2024: Protokollene lansert1.362026 ?26. april 2024: Protokollene lansert1.372026 ?31. august 2024: Protokollene lansert1.382026 ?12. oktober 2024: Protokollene lansert1.392026 ?20. desember 2024: Protokollene lansert1.402026 ?30. januar 2025: Protokollene lansert1.412026 ?17. februar 2025: Protokollene lansert1.422026 ?24. mars 2025: Protokollene lansert1.432026 ?8. april 2025: Protokollene lansert1.442026 ?27. april 2025: Protokollene lansert1.452026 ?13. juni 2025: Protokollene lansert1.462026 ?23. november 2025: Protokollene lansert1.472026 ?15. desember 2025: Protokollene lansert

Se også
 Vindussystemet X
 Mir

Referanser

 Eksterne lenker 



Kategori:Vindussystemer
Kategori:Programvare kun for Linux
Kategori:Fri programvare
Kategori:Programvare fra 2012