Wayland

Fra Wikipedia, den frie encyklopedi
Hopp til: navigasjon, søk
Wayland
Wayland
Wayland
Wayland som kjører demoprogramvare
Skaper Kristian Høgsberg[1][2]
Utvikler freedesktop.org
Utgitt 9. februar 2012; 5 år siden (2012-02-09) (versjon 0.85)[3]
Nyeste versjon 1.14 (8. august 2017; 3 måneder siden (2017-08-08)[4])
Operativsystem Linux, FreeBSD og DragonFly BSD
Skrevet i C
Lisens MIT Expat[5]
Nettsted wayland.freedesktop.org

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

Linuxkjernen og derivater av Berkeley Software Distribution (BSD) har i årenes løp overtatt mange av funksjonene som tidligere ble utført av X11. Dette gjelder minnehåndtering, prioritering av kommandoer og modus-setting. Andre funksjoner er overtatt av programvarebiblioteker for skrifttyper og 2D-grafikk. Wayland mangler disse funksjonene og lar operativsystemkjernen utføre dem direkte. Av denne grunn er Wayland både enklere og raskere enn X11. Mange skrivebordsmiljøer ble opprinnelig laget for å bruke X11 som en mellomliggende prosess utenfor operativsystemkjernen. De fleste av disse benytter i dag Wayland eller er i ferd med å gjøre det.

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 sin egenutviklede, konkurrerende vindustjener Mir fra og med versjon 13.10. Den 5. april 2017 kunngjorde Canonical Ltd at de kom til å erstatte Mir med Wayland i versjon 18.04.

Wayland blir utviklet av freedesktop.org under ledelse av dansken Kristian Høgsberg.[7] Kildekoden er åpent tilgjengelig under MIT-lisensen.[5] Første versjon ble lansert 9. februar 2012. Siste versjon er 1.14 som ble lansert 8. august 2017.

Bakgrunn[rediger | rediger kilde]

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.

evdev modulet i Linuxkjernen mottar en event og sender den til Wayland compositor.
Wayland compositor ser gjennom sin scenegraf for å avgjøre hvilket vindu som skal motta den aktuelle event. Den velger rett vindu og transformerer skjermkoordinatene til vinduets logiske koordinater ved å foreta inverse transformasjoner.
③ Når klienten mottar den aktuelle event, oppdaterer den brukergrensesnittet som respons. Renderingen finner sted av klienten via EGL, og klienten sender en indikasjon tilbake til compositor for å indikere at regionen ble oppdatert.
Wayland compositor samler skademeldinger fra dets klienter og deretter rekomponerer skjermen. Den kan deretter direktle sende systemkallet ioctl for å skedulere en pageflip med KMS.

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.[8] 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.[9] 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.[9] Videre er X11 blitt forsøkt holdt moderne ved å tilføye utvidelser som XRandR, XRender og COMPOSITE;[9] 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[rediger | rediger kilde]

I Wayland kommuniserer en klient og en tjener (compositor) gjennom kommunikasjonsprotokollen (Weston) ved å bruke referansebibliotekene.

Protokollens arkitektur[rediger | rediger kilde]

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:[10]

  • 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.[11]
  • 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.[12]

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.[13] 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[rediger | rediger kilde]

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.[12] 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.[12]

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.[12] 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.[14]

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.[15] 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.[16]

Kjernegrensesnitt[rediger | rediger kilde]

Filprotokollen /wayland.xml[13] 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:[15]

  • 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.[14]

Tilleggsgrensesnitt[rediger | rediger kilde]

En Wayland compositor kan definere og eksportere sine egne tilleggsgrensesnitt.[15] 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[17]).

Utvidelser til kjerneprotokollen[rediger | rediger kilde]

Versjoner av Wayland/Weston[18][rediger | rediger kilde]

Versjon Dato Wayland Weston
0.85 9. februar 2012[3] Første versjon
0.95 24. juli 2012[19] Begynte API stabilisering
0.99 15. oktober 2012[20]
1.0 22. oktober 2012[21][22] Stabil wayland-klient API
1.0.1 19. november 2012[23]
1.0.2 30. november 2012[24]
1.0.3 14. desember 2012[25]
1.0.4 24. januar 2013[26]
1.0.5 14. februar 2013[27]
1.0.6 22. mars 2013[28]
1.1 15. april 2013[29][30] Rendering,[31] FBDEV, RDP
1.1.1 7. juni 2013[32]
1.2 12. juli 2013[33][34] Stabil wayland-tjener API Fargehåndtering. Under-overflater. Raspberry Pi
1.2.1 22. august 2013[35]
1.2.2 29. august 2013[36]
1.3 11. oktober 2013[37] Flere piksel formater. Støtte for språkbindinger Driver for Android støtte via libhybris
1.3.1 31. oktober 2013[38]
1.4 23. januar 2014[17] Nye wl_subcompositor og wl_subsurface grensesnitt Multiple rammebuffer formater. logind støtte for rotløse Weston
1.5 20. mai 2014[39] libinput. Fullskjerm skall.
1.6 19. september 2014[40] libinput som standard
1.6.1 23. januar 2015[41]
1.7 14. februar 2015[42][43] Støtte for Wayland presentasjonsutvidelser og for dreining av overflater. IVI skall protokoll.
1.8 2. juni 2015[44][45] Adskilte headere for kjerne og generert protokoll Repaint skedulering. Navngitte outputs. Output transformasjoner. Overflate API.
1.8.1 12. juni 2015[46]
1.9 21. september 2015[44][47]
1.10 17. februar 2016[48]
1.11 1. juni 2016[49]
1.11.1 20. september 2016[50]
1.12 21. september 2016[51]
1.13 21. februar 2017[52]
1.14 8. august 2017[53]
1.15

Referanser[rediger | rediger kilde]

  1. ^ «Wayland - A New Display Server for Linux». 
  2. ^ «The Linux graphics stack from X to Wayland». 22. mai 2011. 
  3. ^ a b Høgsberg, Kristian (9. februar 2012). «[ANNOUNCE] Wayland and Weston 0.85.0 released». wayland-devel mailing list. 
  4. ^ «[ANNOUNCE] wayland 1.9.0». 
  5. ^ a b «wayland/wayland: root/COPYING». freedesktop.org. Besøkt 14. juni 2015. 
  6. ^ «Wayland». «Wayland is a protocol for a compositor to talk to its clients as well as a C library implementation of that protocol.» 
  7. ^ «Wayland». «Wayland is intended as a simpler replacement for X, easier to develop and maintain.» 
  8. ^ Jonathan Corbet (5. november 2010). «Linux Plumbers Conference: Life after X (reporting a talk by Keith Packard)». LWN.net. 
  9. ^ a b c «Wayland FAQ». Arkivert fra Wayland FAQ originalen Sjekk |url=-verdien (hjelp) 2011-03-07. Besøkt 17. februar 2011. 
  10. ^ «The Hello Wayland Tutorial». Besøkt 25. juli 2014. 
  11. ^ Høgsberg, Kristian. «Wayland Documentation 1.3 - Wire Format». FreeDesktop.org. Arkivert fra originalen 2014-10-17. Besøkt 25. juli 2014. 
  12. ^ a b c d Høgsberg, Kristian. «Wayland Documentation 1.3 - Basic Principles». Freedesktop.org. Arkivert fra originalen 2014-08-08. Besøkt 25. juli 2014. 
  13. ^ a b Høgsberg, Kristian. «protocol/wayland.xml». Freedesktop.org. Besøkt 25. juli 2014. 
  14. ^ a b Paalanen, Pekka. «Wayland protocol design: object lifespan». Besøkt 4. september 2014. 
  15. ^ a b c Høgsberg, Kristian. «Wayland Documentation 1.3 - Interfaces». Freedesktop.org. Arkivert fra originalen 2014-08-08. Besøkt 31. juli 2014. 
  16. ^ Høgsberg, Kristian. «Wayland Documentation 1.3 - Versioning». FreeDesktop.org. Arkivert fra originalen 2014-08-08. Besøkt 31. juli 2014. 
  17. ^ a b Høgsberg, Kristian (24. januar 2014). «Wayland and Weston 1.4 is out». wayland-devel mailing list. 
  18. ^ «Wayland». Wayland.freedesktop.org. Besøkt 15. juli 2013. 
  19. ^ Høgsberg, Kristian (24. juli 2012). «Wayland and Weston 0.95.0 released». wayland-devel mailing list. 
  20. ^ Høgsberg, Kristian (15. oktober 2012). «Wayland and Weston 0.99.0 snapshots released». 
  21. ^ Høgsberg, Kristian (22. oktober 2012). «Wayland and Weston 1.0». wayland-devel mailing list. 
  22. ^ Scherschel, Fabian (23. oktober 2012). «Wayland's 1.0 milestone fixes graphics protocol». The H - Open. Heinz Heise. Besøkt 14. juli 2013. 
  23. ^ Høgsberg, Kristian (19. november 2012). «1.0.1 Releases are out». wayland-devel mailing list. 
  24. ^ Høgsberg, Kristian (30. november 2012). «New Wayland and Weston 1.0.2 releases». wayland-devel mailing list. 
  25. ^ Høgsberg, Kristian (14. desember 2012). «Wayland and Weston 1.0.3 releases out». wayland-devel mailing list. 
  26. ^ Høgsberg, Kristian (24. januar 2013). «Wayland and Weston 1.0.4 releases are out». wayland-devel mailing list. 
  27. ^ Høgsberg, Kristian (14. februar 2013). «Wayland and weston 1.0.5 releases out». wayland-devel mailing list. 
  28. ^ Høgsberg, Kristian (22. mars 2013). «Wayland and weston 1.0.6 releases are out». wayland-devel mailing list. 
  29. ^ Michael Larabel (16. april 2013). «Wayland 1.1 Officially Released With Weston 1.1». Phoronix. Besøkt 14. juli 2013. 
  30. ^ Høgsberg, Kristian (15. april 2013). «1.1 Released». wayland-devel mailing list. 
  31. ^ Michael Larabel (6. januar 2013). «A Software-Based Pixman Renderer For Wayland's Weston». Phoronix. Besøkt 14. juli 2013. 
  32. ^ Høgsberg, Kristian (7. juni 2013). «Weston release 1.1.1». wayland-devel mailing list. 
  33. ^ Larabel, Michael (13. juli 2013). «Wayland 1.2.0 Released, Joined By Weston Compositor». Phoronix. Besøkt 14. juli 2013. 
  34. ^ Høgsberg, Kristian (12. juli 2013). «Wayland and Weston 1.2.0 released». wayland-devel mailing list. 
  35. ^ Høgsberg, Kristian (22. august 2013). «Wayland and Weston 1.2.1 releases are out». wayland-devel mailing list. 
  36. ^ Høgsberg, Kristian (29. august 2013). «Weston 1.2.2 release». wayland-devel mailing list. 
  37. ^ Høgsberg, Kristian (11. oktober 2013). «Wayland and Weston 1.3 releases are out». wayland-devel mailing list. 
  38. ^ Høgsberg, Kristian (29. august 2013). «Weston 1.3.1 released». wayland-devel mailing list. 
  39. ^ Høgsberg, Kristian (20. mai 2014). «Wayland and Weston 1.5.0 is released». wayland-devel mailing list. 
  40. ^ Paalanen, Pekka (19. september 2014). «Wayland and Weston 1.6.0 released». wayland-devel mailing list. 
  41. ^ Harrington, Bryce (23. januar 2015). «[ANNOUNCE] wayland 1.6.1». wayland-devel mailing list. 
  42. ^ Harrington, Bryce (14. februar 2015). «[ANNOUNCE] wayland 1.7.0». wayland-devel mailing list. 
  43. ^ Harrington, Bryce (14. februar 2015). «[ANNOUNCE] weston 1.7.0». wayland-devel mailing list. 
  44. ^ a b Harrington, Bryce (2. juni 2015). «[ANNOUNCE] wayland 1.8.0». wayland-devel mailing list. 
  45. ^ Harrington, Bryce (2. juni 2015). «[ANNOUNCE] weston 1.8.0». wayland-devel mailing list. 
  46. ^ Harrington, Bryce (12. juni 2015). «[ANNOUNCE] wayland 1.8.1». wayland-devel mailing list. 
  47. ^ Bryce Harrington: [ANNOUNCE wayland 1.9.0], osg.samsung.com, 21. september 2016
  48. ^ Bryce Harrington: [ANNOUNCE wayland 1.10.0], bryce at osg.samsung.com, 17. februar 2016
  49. ^ Bryce Harrington: [ANNOUNCE wayland 1.11.0], osg.samsung.com, 1. juni 2016
  50. ^ Bryce Harrington: [ANNOUNCE wayland 1.11.1], osg.samsung.com, 20. september 2016
  51. ^ Bryce Harrington: [ANNOUNCE wayland 1.12.0], osg.samsung.com, 21. september 2016
  52. ^ Bryce Harrington: [ANNOUNCE wayland 1.13.0], osg.samsung.com, 21. februar 2017
  53. ^ [ANNOUNCE wayland 1.14.0], freedesktop.org, 8. august 2017.

Se også[rediger | rediger kilde]

Eksterne lenker[rediger | rediger kilde]

informatikkstubbDenne informatikkrelaterte artikkelen er foreløpig kort eller mangelfull, og du kan hjelpe Wikipedia ved å utvide den.