После пяти месяцев разработки представлен стабильный релиз протокола, механизма межпроцессного взаимодействия и библиотек Wayland 1.10, а также развиваемого параллельно композитного сервера Weston 1.10 и набора расширений wayland-protocols 1.1. Ветка 1.10 обратно совместима на уровне API и ABI с выпусками 1.x, но дополнительно содержит порцию улучшений, расширяющих возможности композитного сервера Weston. Следующий выпуск 1.11 запланирован на 31 мая.
Недавно отделившийся пакет wayland-protocols включает набор протоколов и расширений, дополняющих возможности базового протокола Wayland и предоставляющих возможности, необходимые для построения композитных серверов и пользовательских окружений. В рамках композитного сервера Weston развиваются технологии, содействующие появлению полноценной поддержки протокола Wayland в Enlightenment, GNOME, KDE и других пользовательских окружениях. Разработка Weston нацелена на предоставление высококачественной кодовой базы и рабочих примеров для использования Wayland в десктоп-окружениях и встраиваемых решениях, таких как платформы для автомобильных информационно-развлекательных систем, смартфонов, телевизоров и прочих потребительских устройств.
Основные новшества Weston 1.10:
- В состав включен клиент с поддержкой интерфейса V4L2 (Video for Linux 2), демонстрирующий способ получения видео с устройств V4L2, таких как dmabuf;
- В оболочке для информационно-развлекательных систем (IVI Shell) улучшена поддержка конфигураций с несколькими экранами. Добавлена поддержка нескольких режимов компоновки информации на экране: размещение бок о бок, полноэкранный, кусочный (tiled) и в случайном порядке;
- В weston.ini добавлена порция новых параметров изменения конфигурации, в том числе «vt-switching» и «allow-zap» для включения/выключения обработки Ctrl-Alt-fn (переход к виртуальным терминалам) и Ctrl-Alt-Backspace (экстренное завершение работы сервера);
- Возможность использования механизма уведомлений Systemd, который, например, может применяться для отслеживания работоспособности Weston и автоматизации перезапуска в случае краха/зависания. Режим активируется через опцию «—enable-systemd-notify»;
- В число зависимостей добавлен пакет wayland-protocols, компоненты которого раньше входили в состав Weston, но недавно были выделены в отдельный пакет;
Улучшения, связанные с протоколом и API Wayland:
- В Wayland API добавлена поддержка операций Dragdrop, отсутствие которых было серьёзным препятствием по обеспечению полноценной работы GNOME поверх Wayland. Добавленные вызовы обеспечивают согласование типа контента при его перемещении между источником и получателем, а также информируют источник о завершении или отмене операции. Реализованный подход отличается от используемого в X11 протокола XDND предоставлением дополнительных средств управления передачей на стороне получателя;
- Поддержка группировки событий указателей (Pointer) вместе с событиями кадров (Frame), что позволяет создавать такие возможности как диагональная прокрутка, в которой комбинируются события вертикального и горизонтального скроллинга. Кроме того, сгруппированные события также позволяют более точно отслеживать клики колесом мыши, прекращение прокрутки касанием и процесса генерации событий прокрутки;
- Добавлен вызов wl_surface.damage_buffer, предоставляющий более удобный способ организации перерисовки частей поверхности;
- Для буферов разделяемой памяти реализована техника подсчёта ссылок, дающая композитным менеджерам возможность отложить высвобождение пулов памяти до момента, когда они больше не будут использоваться. Данная возможность уже применяется в Enlightenment для асинхронной отрисовки;
- Предоставлена возможность удаления объектов wl_seat, что полезно для реализации таких применений как подключение к удалённому рабочему столу;
- К отдельным объектам протокола теперь могут быть привязаны собственные номера версий. Для обеспечения обратной совместимости всем ранее добавленным объектам присвоена версия 0;
- Добавлен новый API установки и получения файловых дескрипторов сокетов, которые используются в серверах Wayland для взаимодействия с клиентами. Данная функциональность может быть использована для усиления защиты с применением таких систем, как SELinux и SMACK;
- Добавлены атрибуты enum и bitfield;
- Добавлена порция пояснений по использованию протоколов и API, упрощающих правильное использование Wayland в окружениях рабочего стола;
В пакет wayland-protocols 1.1 добавлено два новых протокола: относительные события указателей и ограничения указателей (блокировка). Ранее добавленные протоколы: управление работой в полноэкранном режиме, обработка методов ввода, совместное использование нескольких видеокарт при помощи технологии DMABuff, организация ввода текста, управление с сенсорных экранов, XDG-расширения для рабочего стола и организация отображения видео.
Отдельно можно отметить публикацию компанией Samsung патчей с реализацией сетевой прозрачности для протокола Wayland, позволяющих организовать выполнение клиентских приложений и отрисовку на разных компьютерах. Суть предложенных изменений сводится к пробросу существующего протокола поверх сокета TCP/IP. Сжатие и техники оптимизации потока пока не реализованы, разработка находится в стадии прототипа. При этом, для добавления поддержки сетевой прозрачности в композитный сервер достаточно добавить одну строчку «wl_display_add_remote_socket(display, «foo»)». Сетевая прозрачность пока работает только с клиентами, поддерживающими тип буферов wl_shm (EGL и dmabuf пока не поддерживаются).
Статус поддержки Wayland в окружениях рабочего стола и дистрибутивах:
- В GNOME поддержка Wayland близка к полной готовности, остаётся решить лишь несколько незначительных проблем. Репозиторий Fedora Rawhide, на базе которого формируется релиз Fedora 24, переведён на использование по умолчанию рабочего стола GNOME поверх Wayland. Экспериментальный сеанс рабочего стола GNOME на базе Wayland доступен в Ubuntu GNOME (следует установить пакет gnome-session-wayland и выбрать на экране входа «GNOME on wayland»).
- Разработчики KDE развивают kwin_wayland, вариант оконного менеджера KWin для Wayland, а также библиотеку KWayland, в которую вынесен весь код, специфичный для поддержки Wayland. Для использования с Wayland адаптированы некоторые специфичные расширения Plasma, ранее привязанные к API X11. В состав KDE Plasma 5.5 включена реализация сеанса на базе Wayland. Сеанс на базе Wayland обеспечивает более высокое качество отрисовки (исключено появление разрывов /tearing/ при выводе видео) и повышенный уровень безопасности (затруднено создание кейлоггеров). Началось формирование Live-сборок KDE Plasma 5 на базе Wayland. Wayland применяется по умолчанию в платформе Plasma Mobile.
- В пользовательском окруженим Enlightenment 0.20 обеспечена полноценная поддержка Wayland. Работа поверх Wayland реализована с применением собственного композитного менеджера wl-desktop-shell. Отмечается, что все необходимые для работы поверх Wayland возможности реализованы, но окружение на базе Wayland пока недостаточно протестировано для ежедневного использования;
- Для ОС DragonFly BSD подготовлен порт с Wayland и Weston;
- Wayland задействован по умолчанию в мобильных платформах Sailfish 2 и Tizen 3.
- В панели Cairo-Dock реализована возможность работы в окружении композитного сервера Weston.
- Работа по добавлению поддержки Wayland ведётся для рабочих столов LXQt и MATE.
- Развиваются новые десктоп-окружения, работающее только на базе технологий Wayland: Quantum Shell, Hawaii и Orbital.
- Для тестирования работы GNOME, KDE и Enlightenment, Hawai и Orbital поверх Wayland выпускается специальный Live-дистрибутив Rebecca Black Linux.
- Отмечается прогресс в адаптации Firefox и LibreOffice для работы поверх Wayland без привлечения прослойки XWayland.
Wayland представляет собой протокол взаимодействия композитного сервера и работающих с ним приложений. Клиенты самостоятельно выполняют отрисовку своих окон в отдельном буфере, передавая информацию об обновлениях композитному серверу, который комбинирует содержимое буферов отдельных приложений для формирования итогового вывода с учётом возможных нюансов, таких как перекрытие окон и прозрачность. Иными словами, композитный сервер не предоставляет API для отрисовки отдельных элементов, а оперирует только с уже сформированными окнами, что позволяет избавиться от двойной буферизации при использовании высокоуровневых библиотек, таких как GTK+ и Qt, берущих на себя работу по компоновке содержимого окон. В настоящее время поддержка прямой работы c Wayland уже реализована для библиотек GTK3+, Qt 5, SDL (начиная с выпуска 2.0.2), Clutter и EFL (Enlightenment Foundation Library). Начиная с Qt 5.4 в состав включён модуль QtWayland с реализацией компонентов для работы Qt-приложений в окружении композитного сервера Weston, развиваемого проектом Wayland.
Взаимодействие с аппаратным обеспечением в Wayland/Weston, например, проведение инициализации, переключение видеорежимов (drm modesetting) и управление памятью (GEM для i915 и TTM для radeon и nouveau) графических карт, может производиться напрямую через модуль, работающий на уровне ядра, что позволяет обойтись без привилегий суперпользователя. Отмечается значительный прогресс в направлении поддержки Wayland в проприетарных драйверах NVIDIA — в ветку 355.x уже включена поддержка всех необходимых расширений EGL, но остаётся реализовать KMS API и KMS ioctl. Композитный сервер Weston может работать не только с использованием DRM-модуля ядра Linux, но и поверх X11, другого композитного сервера Wayland, фреймбуфера и RDP. Кроме того, развиваются проекты по обеспечению работы поверх графического стека платформы Android.
В рамках проекта Weston развивается одна из реализаций композитного сервера. В роли композитного сервера также может выступать любой другой продукт, поддерживающий протокол Wayland. Например, в настоящее время ведётся работа по обеспечению поддержки Wayland в KWin. В текущем виде Weston уже вышел за рамки набора примеров для тестирования протокола Wayland и может обрастать функциональностью через плагины и дополнения. Пользовательские оболочки и расширенные функций управления окнами предлагается реализовывать в форме внешних бэкендов к Wayland.
Для обеспечения выполнения обычных X11-приложений в окружении на базе Wayland используется DDX-компонент XWayland (Device-Dependent X), похожий по организации работы на Xwin и Xquartz для платформ Win32 и OS X. Поддержку запуска X11-приложений планируется встроить непосредственно в композитный сервер Weston, который при попытке выполнения X11-приложения будет инициировать запуск X-сервера и связанных с ним компонентов XWayland. При таком подходе процесс запуска X11-приложений будет бесшовным и неотличимым для пользователя от запуска приложений, работающих напрямую с Wayland.