# Wayland (protocolo)

Wayland es un protocolo de comunicaciones de servidor gráfico y una biblioteca para Linux que implementa este protocolo.
Wayland proporciona un método para que los gestores de composición de ventanas se comuniquen directamente con las aplicaciones y el hardware de vídeo. Se espera que también sea posible la comunicación con hardware de entrada usando otras bibliotecas. Las aplicaciones renderizan los gráficos en sus propios buffers y el gestor de ventanas se convierte en el servidor gráfico, haciendo una composición con esos buffers para formar la visualización en pantalla de las ventanas de las aplicaciones. Este es un enfoque más simple y más eficiente que usar un gestor de composición de ventanas con el X Window System.
Como parte de sus esfuerzos, el proyecto Wayland también desarrolla una implementación de referencia de un compositor de Wayland llamado Weston.

## Historia

Kristian Høgsberg (krh), un ingeniero de software que trabaja en la pila de gráficos de Linux, comenzó Wayland en su tiempo libre en 2008 mientras trabajaba para Red Hat, en este momento trabaja para Intel. Anteriormente había trabajado en AIGLX, que permitía la aceleración por hardware en los gestores de composición de ventanas, y en DRI2. El nombre "Wayland" viene del pueblo de Wayland, Massachusetts. Høgsberg estaba conduciendo a través de este pueblo cuando los conceptos detrás de Wayland "se cristalizaron".
Su principal objetivo era un sistema en el que "cada frame es perfecto, me refiero a que las aplicaciones serán capaces de controlar el renderizado lo suficiente como para que nunca veamos tearing, retraso, redibujado o parpadeo".
Wayland es software libre. Las bibliotecas libwayland-server y libwayland-client fueron liberadas bajo la licencia MIT y el compositor de demostración originalmente bajo los términos de la LGPLv2. Se planificó cambiar todo el proyecto a la licencia LGPLv2, pero esto no ocurrió y actualmente todo el proyecto utiliza licencia MIT.
En noviembre de 2010, Wayland solo funciona con controladores libres y de código abierto para Intel, AMD (anteriormente conocido como ATI) y Nvidia (controlador nouveau). En noviembre de 2010, Nvidia declaró que no tiene planes de dar soporte a Wayland en sus controladores cautivos.
Los desarrolladores de Wayland son, en su gran mayoría, desarrolladores de X.Org Server.
En marzo de 2021, Nvidia finalmente adopta los estándares de Wayland, y comienza a darle soporte en sus drivers privativos

### Historial de lanzamientos

Principales lanzamientos de Wayland y Weston :
| Versión | Fecha | Principales características | Principales características |
| Versión | Fecha | Wayland | Weston |
| Versión antigua, sin servicio técnico: 0.85 | 02012-02-09 9 de febrero de 2012 | Primer lanzamiento | Primer lanzamiento |
| Versión antigua, sin servicio técnico: 0.95 | 02012-07-24 24 de julio de 2012 | Began API stabilization. | |
| Versión antigua, sin servicio técnico: 1.0 | 02012-10-22 22 de octubre de 2012 | Stable wayland-client API. | |
| Versión antigua, sin servicio técnico: 1.1 | 02013-04-15 15 de abril de 2013 | | Software rendering. FBDEV, RDP backends. |
| Versión antigua, sin servicio técnico: 1.2 | 02013-07-12 12 de julio de 2013 | Stable wayland-server API. | Color management. Subsurfaces. Raspberry Pi backend. |
| Versión antigua, sin servicio técnico: 1.3 | 02013-10-11 11 de octubre de 2013 | More pixel formats. Support for language bindings. | Android driver support via libhybris. |
| Versión antigua, sin servicio técnico: 1.4 | 02014-01-23 23 de enero de 2014 | New wl_subcompositor and wl_subsurface interfaces. | Multiple framebuffer formats. logind support for rootless Weston. |
| Versión antigua, sin servicio técnico: 1.5 | 02014-05-20 20 de mayo de 2014 | | libinput. Fullscreen shell. |
| Versión antigua, sin servicio técnico: 1.6 | 02014-09-19 19 de septiembre de 2014 | | libinput por defecto |
| Versión antigua, sin servicio técnico: 1.7 | 00014-02-2015 2015 de febrero de 14 | | Support for the Wayland presentation extension and for surface roles. IVI shell protocol. |
| Versión antigua, sin servicio técnico: 1.8 | 02015-06-02 02 de junio de 2015 | Separated headers for core and generated protocol. | Repaint scheduling. Named outputs. Output transformations. Surface-shooting API. |
| Versión antigua, sin servicio técnico: 1.9 | 02015-09-21 21 de septiembre de 2015 | Updated license. | Updated license. New test framework. Triple-head DRM compositor. linux_dmabuf extension. |
| Versión antigua, sin servicio técnico: 1.10 | 02016-02-17 17 de febrero de 2016 | Drag-and-drop functionality, grouped pointer events. | Video 4 Linux 2, touch input, debugging improvements. |
| Versión antigua, sin servicio técnico: 1.11 | 02016-06-01 01 de junio de 2016 | New backup loading routine, new setup logic. | Proxy wrappers, shared memory changes, Doxygen-generated HTML docs. |
| Versión antigua, sin servicio técnico: 1.12 | 02016-09-21 21 de septiembre de 2016 | Debugging support improved. | libweston and libweston-desktop. Pointer locking and confinement. Relative pointer support. |
| Versión antigua, sin servicio técnico: 1.13 | 02017-02-24 24 de febrero de 2017 | | The ABI of Weston has been changed, thus the new version was named 2.0.0 rather than 1.13.0. |
| Versión antigua, sin servicio técnico: 1.14 | 02017-08-08 08 de agosto de 2017 | | Lanzamiento de Weston 3.0.0 . |
| Versión antigua, sin servicio técnico: 1.15 | 02018-04-09 09 de abril de 2018 | | Weston 4.0.0 was released at the same time. |
| Versión antigua, sin servicio técnico: 1.16 | 02018-08-24 24 de agosto de 2018 | | Weston 5.0.0 was released at the same time. |
| Versión antigua, sin servicio técnico: 1.17 | 02019-03-20 20 de marzo de 2019 | | Weston 6.0.0 was released at the same time. |
| Versión antigua, sin servicio técnico: 1.18 | 02019-08-02 02 de agosto de 2019 | | Weston 7.0.0 fue lanzado un mes después. Weston 8.0.0 released at 2020-01-24. Weston 9.0.0 released at 2020-09-04. |
| Versión antigua, sin servicio técnico: 1.19 | 02021-01-27 27 de enero de 2021 | | |
| Versión estable actual: 1.20 | 02021-12-09 09 de diciembre de 2021 | | Weston 10.0.0 es lanzado el 1 de febrero del 2022. |
| Leyenda:Versión antiguaVersión antigua, con soporte técnicoÚltima versiónÚltima versión previaLanzamiento futuro ||||

## Adopción
### Por parte de distribuciones linux

* Debian incluye Wayland como la sesión predeterminada para GNOME desde la versión 10, lanzada el 6 de julio de 2019.
* Fedora a partir de la versión 25 (lanzada el 22 de noviembre de 2016) usa Wayland para la sesión de escritorio predeterminada de GNOME 3.22, con X.Org como alternativa si el controlador de gráficos no es compatible con Wayland. Fedora usa Wayland como predeterminado para la sesión de escritorio de KDE a partir de la versión 34 (lanzada el 27 de abril de 2021). Adam Jackson (ajax), quien también es desarrollador de X.Org, dijo que Fedora es probable que finalmente utilice Wayland por defecto, "... porque es una victoria importante en un montón de cosas, y las desventajas son bastante insignificantes a pesar del temor del gallinero".
* Lubuntu: El 17 de agosto de 2018 el equipo de desarrolladores de Lubuntu anunció que cambiará a Wayland de manera permanente para la versión 20.10
* Manjaro incluye Wayland de forma predeterminada en la edición Gnome de Manjaro 20.2 (Nibia) (lanzado el 22 de noviembre de 2020).
* Red Hat Enterprise Linux incluye Wayland como la sesión predeterminada en la versión 8, lanzada el 7 de mayo de 2019.
* Slackware Linux incluyó a Wayland el 20 de febrero de 2020 para la versión de desarrollo, -current, que se convirtió en la versión 15.0.
* Ubuntu se envió con Wayland de forma predeterminada en Ubuntu 17.10 (Artful Aardvark). Sin embargo, Ubuntu 18.04 LTS volvió a X.Org de forma predeterminada debido a varios problemas. Desde Ubuntu 21.04, Wayland vuelve a ser el predeterminado.

### Entornos de escritorio

* KDE: KWin, el gestor de ventanas de KDE, añadió soporte para la salida OpenGL ES en la versión 4.7. Hasta el momento KWin ha empezado a ser portado a Wayland. En enero de 2013, el principal desarrollador de KWin, Martin Gräßlin, empezará a trabajar para Blue Systems y uno de sus objetivos será completar la migración Wayland. El soporte de Wayland para KDE Plasma se retrasó hasta el lanzamiento de Plasma 5, aunque anteriormente KWin 4.11 obtuvo un soporte experimental de Wayland. La versión 5.4 de Plasma fue la primera con una sesión de Wayland. Durante 2020, Klipper se transfirió a Wayland, teniendo la versión 5.20 una mejora la transmisión y grabación de pantalla.
* Gnome: GNOME 3.20 fue la primera versión en tener una sesión completa de Wayland. GNOME 3.22 incluía compatibilidad con Wayland muy mejorada en GTK, Mutter y GNOME Shell.. Desde entonces, Wayland es la opción por defecto en desmedro de Xorg.
* XFCE: El entorno de escritorio predeterminado de Xubuntu y Manjaro está actualizando la versión de gtk a la 3.0, lo cual es el principal requisito para poder soportar Wayland. Para marzo del 2021, el roadmap de la migración aún no establece cuándo se logrará la migración completa, incluso pone en duda si se logre realizar de manera exitosa. En 2024, se lanzo XFCE 4.20, con soporte experimental para Wayland.
* LXQt: Desde la versión 2.0.0 lanzada en abril de 2024, ofrec soporte experimental para Wayland

### Toolkits

Para julio de 2022:
* Clutter tiene soporte completo para Wayland.
* EFL tiene soporte completo, menos la selección.
* GLFW con soporte desde su versión 3.2
* GTK+ tiene soporte completo a partir de la versión 3.2.
* Qt 5 tiene soporte completo para Wayland, incluidos los decorados del lado cliente.
* SDL con soporte completo desde su versión 2.02, habilitándose defecto a partir de la versión 2.04.

## Diseño

En los últimos años, los gráficos de escritorio en GNU/Linux han pasado de tener "una pila de interfaces de renderizado... todos hablando con el servidor X, el cual es el centro del universo" a poner el núcleo Linux "en el centro", con "sistemas de ventanas como X y Wayland... en un rincón". Esto será "un sistema de gráficos muy simplificado que ofrece más flexibilidad y mejor rendimiento".
Høgsberg podía haber añadido una extensión a X como han hecho otros proyectos recientes, pero prefirió "empujar a X fuera del camino entre los clientes y el hardware" por las razones explicadas en las preguntas frecuentes del proyecto:
Wayland consiste en un protocolo (en gran parte completo) y una implementación de referencia llamada Weston. Para el renderizado, Weston puede usar OpenGL ES o software (la biblioteca pixman). En la actualidad, los clientes se limitan a OpenGL ES en lugar de OpenGL completo porque "libGL utiliza GLX y todas las dependencias de X". El proyecto también está desarrollando versiones de GTK+ y Qt que renderizan hacia Wayland en vez de a X. Se espera la mayoría de las aplicaciones obtengan soporte para Wayland a través de una de estas bibliotecas sin modificar la aplicación.
Wayland actualmente no proporciona transparencia en red, pero es posible que lo haga en el futuro. Se intentó como un proyecto de Google Summer of Code en 2011, pero no tuvo éxito. La lista de tareas por hacer de Wayland 1.0 incluye "tal vez tratar de hacer que Wayland remoto tenga lugar, a ver si hay algo en el protocolo/arquitectura que lo haga más difícil de lo que debería ser". Adam Jackson ha previsto proporcionar acceso remoto a una aplicación Wayland a través de cualquier 'pixel-scraping" (como VNC) o enviando un "flujo de comandos de renderizado" a través de la red (como en RDP, SPICE o X11). A principios de 2013, Høgsberg experimentó con la transparencia de red utilizando un servidor proxy Wayland que envía imágenes comprimidas al compositor real.
Weston, el compositor Wayland de referencia, solo trabaja con el núcleo Linux debido a su dependencia de las características específicas de Linux como udev.

## Compatibilidad con X

xwayland fue escrito para permitir ejecutar aplicaciones X11 a través de un servidor X, opcionalmente sin privilegios de root, corriendo como un cliente Wayland. Esto es similar a la forma en la que las aplicaciones X se ejecutan en el entorno gráfico nativo de Mac OS X.
Las aplicaciones escritas con la biblioteca Qt pueden cambiar entre X y Wayland en tiempo de carga con la opción -platform en la línea de comandos. En enero de 2011, el soporte de Wayland fue movido a la rama Lighthouse del repositorio Qt. Qt Lighthouse se incluye en la versión 4.8 de Qt.
En diciembre de 2010, GTK+ añadió soporte preliminar para cambiar el backend en tiempo de ejecución, diciendo "X11+Wayland o XQuartz+X11 son combinaciones interesantes". En enero de 2011, el backend Wayland de GTK+ fue actualizado para soportar la característica de multiples-backends y fue movido a la rama gdk-wayland-backend del repositorio Git de GTK+. En abril de 2011, la rama gdk-wayland-backend fue juntada con la rama principal de GTK+.
Los gestores de composición de ventanas existentes, como KWin y Mutter, se espera que implementen soporte para Wayland de forma directa, para convertirse en compositores Wayland/servidores gráficos.