Вејланд (енгл.Wayland) рачунарки је протокол који наводи комуникацију између сервера за приказ и његових клијената, као и референтну примену протокола у цеу (програмски језик).[4] Сервер за приказ који користи протокол Вејланд назива се Вејланд композитор (енгл.Wayland compositor).
Вејланд је развила група добровољаца предвођена Кристијаном Хогсбергом (Kristian Høgsberg) као слободан софтвер и софтвер отвореног кода са циљем да замени Екс виндоу систем модерним, једноставнијим прозорским системом у Линуксу и јуниксоликим оперативним системима.[4]Изворни код је објављен под условима MИТ лиценце, попустљиве слободне лиценце софтвера.[5][6]
Вејланд пројекат такође развија референтну примену Вејланд композитора који се назива Вестон.[4]
Увод
Протеклих година, десктоп графика у Линуксу се удаљила од тога да има „гомилу рендеринг интерфејса...где се сви обраћају X серверу, који је у центру универзума“ према стављању Лунукс кернела и његових компоненти (нпр. DRI, DRM) „у средину“, са „прозорским системима као што су X и Вејланд...у страну“. Ово ће бити „много једноставнији графички систем који нуди већу флексибилност и боље перформансе“.[7]
Хогсберг је могао X-у да дода екстензију, као што су многи скорашњи пројекти урадили, али је преферирао да „склони X са стазе између клијената и хардвера“ због разлога објашњених у најчешће постављеним питањима[8] пројекта.
Вејланд се састоји од протокола и референтне имплементације који се назива Вестон. Пројекат такође развија верзије GTK+ и Qt које рендерују у Вејланд уместо у X. Очекује се да многе апликације добију подршку за Вејланд кроз једну од ових библиотека без измена на апликацији.
Вејланд тренутно не подржава мрежну транспарентност, али ће је можда подржавати у будућности[9]. То је покушано да се оствари као део пројекта Google Summer of Code 2011. године, али није било успешно[10]. Адам Џексон (Adam Jackson) је замислио да пружи даљински приступ Вејланд апликацији или кроз пиксел скрејпинг, енгл.pixel-scraping, (као VNC), или тако што ће га подесити да шаље rendering command stream кроз мрежу (као у RDP, SPICE или X11)[11]. Рано 2013. године, Хогсберг је почео да експериментише са мрежном транспарентности користећи прокси Вејланд сервер који шаље компресоване слике правом композитору[12].
Архитектура софтвера
Архитектура протокола
Вејланд протокол прати модел клијент-сервер у којем су клијенти графичке апликације које захтевају приказ пиксел бафера на екрану, а сервер (композитор) пружа услуге контролисања приказа ових бафера.
Референтна имплементација Вејланда је дизајнирана као протокол са два слоја[13]:
Слој нижег нивоа или „жични протокол“ који управља међупроцесном комуникацијиом између два повезана процеса (клијента и композитора) и подацима које размењују међу собом. Овај слој је базиран на порукама и обично је имплементиран користећи кернелове IPC услуге, обично Unix domain sockets у случају Линукса и оперативним системима сличним Јуниксу[14].
Слој вишег нивоа изграђен изнад њега, који управља информацијом коју клијент и композитор треба да размене да би имплементирали основне карактеристике прозорског система. Овај слој је имплементиран као „асинхронизован објектно оријентисан протокол“[15].
Док је слој нижег нивоа написан ручно у програмском језику C, слој вишег нивоа је аутоматски генерисан од описа елемената протокола који се налазе у XML формату[16]. Сваки пут кад се опис протокола ове XML датотеке промени, C изворни код који имплементује такав протокол може бити регенерисан да укључи нове промене, дозвољавајући веома флексибилан, екстензибилан (продужив) и протокол отпоран на грешке (енгл.error-proof protocol).
Референтна имплементација Вејланд протокола је подељена у две библиотеке: библиотека коју користи Вејландов клијент се назива libwayland-client , и библиотека коју корисни Вејландов композитор која се назива libwayland-server[17].
Преглед протокола
Вејландов протокол је описан као „асинхронизован објектно оријентисан протокол“. Објектно оријентисан значи да су услуге које нуди композитор представљене као серија објеката који се налазе у истом композитору. Сваки објекат имплементира интерфејс који има име, број метода (који се називају захтеви, енгл.requests ) као и неколико повезаних догађаја (енгл.events ). Сваки захтев и догађај имају нула или више аргумената, сваки са именом и типом података[15]. Протокол је асинхронизован у смислу да захтеви не морају да чекају на синхронизоване одговоре од ACKs, избегавајући тако кашњење повратног путовања (енгл.round-trip delay time ) и постижући боље перформансе.
Вејландови клијенти могу да шаљу захтеве (призивање методе, енгл.a method invocation ) неким објектима ако интерфејс објекта подржава захтеве. Клијент такође мора да снабдева захтеване податке за аргументе таквог захтева. На овај начин клијенти захтевају услуге од композитора. Композитор за узврат шаље информације назад клијенту проузрокујући да објекат емитује догађаје (вероватно са аргументима такође). Ови догађаји могу бити емитовани и од стране композитора као одговор на одређене захтеве, или асихроно, подређени појавама унутрашњих догађаја (као што је неки са улазног уређаја) или променама стања . Услови грешке су такође сигнализирани као догађаји од стране композитора[15].
Да би клијент могао да шаље захтеве објекту, прво треба да каже серверу идентификациони број (енгл.ID number) који ће користити да идентификује тај објекат[15]. Постоје две врсте објеката у композитору: глобални објектни и не-глобални објекти. Глобални објекти су представљени клијентима од стране композитора када се стварају (и такође када се уништавају), док су не-глобални објекти обично створени од стране објекта који већ постоје као део њихове функционалности[18].
Интерфејси и њихови захтеви и догађаји су срж елемената који дефинишу Вејландов протокол. Свака верзија протокола укључује скуп интерфејса, заједно са њиховим захтевима и догађајима, за које се очекује да буду у било ком Вејландовом композитору. Опционо, Вејланд композитор може да дефинише и имплементира сопствене интерфејсе са сопственим захтевима и догађајима, да би повећао сопствену функционалност изван изворног протокола[19]. Да би олакшао промене између верзија протокола, интерфејси садрже „број везије“ атрибута као додатак уз његово име; овај атрибут дозвољава интерфејсу да буде третиран различито од претходне верзије самог себе са различитим или са мање захтева и догађаја. Сваки Вејлед композитор открива не само који су интерфејси доступни али такође и њихову подржану верзију, а објекти имплементују специфичне верзије интерфејса[20].
Вејландови главни интерфејси
Интерфејси тренутне верзије Вејланд протокола су дефинисани у датотеци protocol/wayland.xml Вејландовог изворног кода. Ово је XML датотека која садржи постојеће интерфејсе у тренутној верзији, заједно са њиховим захтевима, догађајима и осталим атрибутима. Да би био имплементиран од стране било ког Вејланд композитора најмањи захтев је овај скуп интерфејса.
Неки од најосновнијих интерфејса Вејландовог протокола су:
wl_display - главни глобални објекат, то је специјални објекат који капсулира сам Вејландов протокол
wl_registry - глобални објекат регистра, у коме композитор региструје све глобалне објекте за које жели да буду доступни свим клијентима
wl_compositor- објекат који представља композитор, његова задатак је да комбинује различите површине у један излаз
wl_surface - објекат који представља правоугаону област на екрану, дефинисан је локацијом, величином и садржајем пиксела
wl_buffer - објекат који, када је закачен на wl_surface објекат, пружа садржај који се приказује
wl_output - објекат који представља област која се приказује на екрану
wl_pointer, wl_keyboard, wl_touch - објекти представљају улазне уређаје као што су курсори или тастатуре
wl_seat - објекат који представља седиште (скуп улазних и излазних уређаја) у конфигурацијама са више рачунара
Типична сесија Вејланд клијента почиње тако што отвори конекцију ка композитору користећи wl_display објекат. Ово је специјални локални објекат који представља конекцију и не налази се у серверу. Користећи његов интерфејс клијенти могу да захтевају wl_registry глобални објекат од композитора, где се налазе имена свих глобалних објеката, и везују оне за које је клијент заинтересован. Обично клијент везује барем wl_compositor објекат одакле ће захтевати један или више wl_surface објеката да би приказао излаз апликације на екрану[18].
Екстензије Вејландових интерфејса
Вејланд композитор може да дефинише и извезе сопствене додатне интерфејсе[19]. Ова особина се користи да се прошири протокол изван основне функционалности које пружају главни интерфејси, и који је постао стандардни начин са се имплементују екстензије Вејландовог протокола. Одређени композитори могу да изаберу да додају преправљене интерфејсе да би пружали специјализоване или јединствене одлике. Вејланд референтни композитор, Вестон, користи их да би имплементирао нове екперименталне интерфејсе као простор за нове концепте и идеје, од којих су неки касније постали део главног протокола (као што је wl_subsurface интерфејс додат у Вејланду 1.4[21]).
Екстензиони протоколи главног протокола
XDG-Shell протокол
XDG-Shell протокол је додатни начин за управљање површинама под Вејланд композитором (не само Вестоном). Традиционалан начин за манипулисање (максимизирање, минимизирање, цео екран итд.) површинама је да се користе wl_shell_*() функције, које су део главног Вејланд протокола и налазе се у libwayland-client. Имплементација XDG-Shell протокола, напротив, би требало да буде пружена од стране Вејланд композитора. Тако да ће се наћи xdg-shell-client-protocol.h заглавље у Вестоновом изворном стаблу (енгл.Weston source tree). Сваки Вејланд композитор би требало да обезбеди своју имплементацију.
Од јуна 2014. године XDG-Shell протокол нема дефинисану верзију и склон је променама.
XDG-Shell протокол има циљ да замени wl_shell на дуже стазе, али неће бити део Вејландовог главног протокола. Почиње као нестабилан API, са циљем да прво буде коришћен као место за развој, и онда када су одлике дефинисане као што је захтевано од стране неколико десктоп шелова (енгл.desktop shells), може коначно бити стабилан. Он углавном пружа два нова интерфејса xdg_surface и xdg_popup. xdg_surface интерфејс имплементује прозоре на десктопу који могу бити померани, мењати величине, максимизовани, итд.; он пружа захтев за креирање односа дете/родитељ (енгл.child/parent relationship). xdg_popup интерфејс имплементује попап мени на десктопу; xdg_popup је увек краткотрајан за другу површину, и такође има имплицитно хватање (енгл.implicit grab).[22]
IVI-Shell протокол
IVI-Shell протокол је екстензија Вејландовог главног протокола од стране IVI-people (in-vehicle infotainment).
WRandR
WRandR је Вејландова екстензија која олакшава способност да прозори на слици мењају величину, ротирају, и рефлектују главни прозор екрана.
Модел рендеровања
Вејланд протокол не укључује рендеринг API[23][24][25][26]. Уместо тога, Вејланд прати директан модел рендеровања, у коме клијент мора да рендерује садржај прозора у бадеру који се дели са композитором. За ту сврху, клијент може да изабере да обави сво рендеровање сам, користи библиотеку за рендеровање нао што је Cairo или OpenGL, или да се ослања на рендеринг енџн (енгл.rendering engine) са библиотекама виџета (енгл.widget libraries) високог нивоа са Вејланд подршком, као што су Qt или GTK+. Клијент такође опционо може да користи друге специјализоване библиотеке да би обавио специфичне задатке, као што је Freetype за рендеровање фонтова.
Вејланд композитори
Дисплеј сервери који имплементују Вејланд дисплеј сервер протокол се такође називају Вејланд композиторима зато што додатно обављају задатак композитних виндоу менаџера (енгл.compositing window manager).
Вестон – референтна имплементација Вејланд композитора; Весон имплементује декорације са стране клијента
Lipstick - оквир (енгл.framework) мобилне графичке љуске (енгл.graphical shell) који имплементује Вејланд композитор. Користи се у Sailfish OS и Nemo Mobile[28].
Enlightenment 0.19 се очекује да има пуну подршку за Вејланд[29].
KWin је имао некомплетну Вејландову подршку у априлу 2013. године[30].
Mutter одржава одвојену грану за интеграцију Вејланда за GNOME 3.9.[31]
Clayland је једноставан пример Вејланд композитора који користи Клатер (енгл.Clutter)..
Вестон
Вестон је референтна имплементација Вејланд композитора. Написан је у програмском језику C и прво је објављен под GPLv2 лиценцом, али је тренутно објављен под MИТ лиценцом. Вестон је написан за Линуксов кернел API, наиме званично је подржан да ради само са Линуксовим кернелом због зависности одређених одлика, као што су KMS драјвер, GEM (Graphics Execution Manager), и udev, који није имплементиран у друге оперативне системе сличне Јуниксу[32]. Када је покренут на Линукс хардверу, руковање улазних уређаја се ослања на evdev, док се руковање баферима ослања на GBM (Generic Buffer Management).
Вестон је написан за Линукс кернел; фебруара 2013. године, најављен је прототип порта Вејледа за FreeBSD[33].
^Stone, Daniel (1. 2. 2013). The real story behind Wayland and X. 42:00 мин. Архивирано из оригинала 10. 03. 2016. г. Приступљено 15. 05. 2015.
Presentation at linux.conf.au 2013. "[W]e think it's going to better at remoting than X."
^Høgsberg, Kristian. „Wayland”(PDF).Непознати параметар |access= игнорисан [|access-date= се препоручује] (помоћ) "No rendering API, all direct rendering"
^„Wayland FAQ”. Wayland project. Wayland project. Архивирано из оригинала 07. 03. 2011. г. Приступљено 4. 9. 2014. "Wayland doesn't render on behalf of the clients, it expects the clients to use whatever means they prefer to render into a shareable buffer."
^Barnes, Jesse. „Introduction to Wayland”(PDF). Intel Open Source Technology Center. "Does not include a rendering API – Clients use what they want and send buffer handles to the server"