Содержание статьи
Проблемные иксы
X Window появилась на свет во времена мейнфреймов и терминальных клиентов. Суть идеи, которая легла в основу этой системы, была следующей: надо создать графическую систему, которая бы работала по принципу старого доброго текстового терминала. Приложения должны были работать на мейнфрейме, обладающем большой вычислительной мощностью. А графика отображаться на десятках подключенных с помощью сетевого кабеля тонких клиентов.
Чтобы работать в такой конфигурации, графическая система должна была обладать определенными характеристиками, включая сетевую прозрачность, экономичность протокола передачи данных (на 10-килобитных каналах особо графику не погоняешь) и поддерживать самые простые монохромные дисплеи. Реализуя все эти характеристики, разработчики X Window создали сетевой протокол, базирующийся на простых командах отрисовки, таких как «линия», «квадрат», «текст», которые могут использовать клиенты (приложения). Приложения работают на мейнфрейме и создают картинку на сервере, который работает на тонком клиенте (как бы странно это ни звучало).
В первые годы существования иксов все это прекрасно работало и не вызывало никаких вопросов. Но по мере появления все более развитых дисплеев, увеличения производительности и ухода от идеи «мейнфрейм — терминал» к стационарным ПК ущербность X Window становилась все более очевидной. Сначала разработчикам пришлось добавить в протокол идею цветов, из‑за чего протокол разросся и в нем появились функции опроса терминала о его возможностях (монохромный, 16 цветов, 256 цветов), дополнительные графические функции (все это есть в протоколе до сих пор). Затем пришлось решить проблему отображения сложной графики, в результате чего появился протокол XRender, базирующийся на идеях графической подсистемы Plan 9. Далее появилась проблема работы с множеством шрифтов, для решения которой создали еще и специальный font-сервер. Затем пришел черед растровой графики, видео, теней, прозрачности, OpenGL, низкой производительности на локальной машине (для решения которой придумали способ работы с клиентами через разделяемую память) и многое‑многое другое.
info
Полная интеграция Wayland с дистрибутивом Fedora и средой GNOME будет обеспечена в Fedora 21.
Все эти изменения могли бы стать обычным эволюционным процессом, свойственным любому долго живущему ПО, если бы в 1979 году разработчики не приняли решение закрепить 11-ю версию протокола и больше не вносить в нее изменения (это и есть X11). В условиях господства закрытого софта в 1980-е обратная совместимость всех последующих версий X Window с ранее написанным ПО позволила иксам занять лидирующие позиции как стандартной системы в мире UNIX. Но в результате привела к ее чрезвычайному усложнению.
Фактически современный Xorg — это не что иное, как иксы образца 1979 года с огромным количеством обвесок и расширений, прилепленных к нему с разных сторон. Да, с его помощью действительно можно запустить софт 20-летней давности, используя древнюю видеокарту с 256 Кб памяти, но платить за это приходится необоснованной сложностью системы, ее тяжестью, жадностью к ресурсам и, что не менее важно, архаичным интерфейсом программирования (я имею в виду чистый Xlib, а не GTK или Qt).
95% функциональности Xorg в современных приложениях никак не используется. Это мертвый код, нужный для совместимости со старым софтом и железом. Сегодня приложения формируют картинку полностью самостоятельно и передают ее X-серверу уже в готовом виде, а последний отвечает только за то, чтобы скомпоновать из отдельных окон окончательное изображение (используя драйвер видеокарты) и вернуть назад события с клавиатуры и мыши. Это действительно простые операции, для выполнения которых старый Xorg с его сетевой прозрачностью, множеством расширений, поддержкой древнего железа, надстроек и костылей не нужен.
Мы свой Xorg построим
Единственный способ решить многочисленные проблемы Xorg — это избавиться от него полностью и создать новый графический сервер. Попытки сделать это в разные времена предпринимали многие команды разработчиков, включая программистов из проектов DirectFB и GGI. Однако дальше единичных случаев применения во встраиваемом оборудовании дело не доходило, и большинство из этих проектов умерли в забвении.
Проект Wayland продвинулся намного дальше своих конкурентов. Он не только получил поддержку крупных проектов, но и стал главным кандидатом на роль замены иксов. Проект был начат Кристианом Хёгсбергом (Kristian Høgsberg) вскоре после окончания работ над AIGLX, очередным расширением Xorg, которое позволило X-серверу использовать преимущества современных 3D-ускорителей при выводе изображения на экран (настоящая прозрачность, трансформации окон, визуальные эффекты и прочее).
По своей сути Wayland представляет собой «новый Xorg», то есть систему, идеологически близкую к X Window, но созданную с учетом предыдущих ошибок и без всего накопленного балласта. Как и иксы, Wayland — это протокол взаимодействия, в котором в качестве сервера выступает композитный менеджер. Его функция — объединить графические буферы приложений (проще говоря, окна) на экране и передать события ввода нужному окну.
Всю работу по отрисовке интерфейса выполняют сами приложения (с помощью графических тулкитов GTK+, Qt или графических библиотек Clutter или SDL) и, когда это нужно, отдают результат композитному менеджеру через UNIX-сокет. Последний, в свою очередь, использует DRM (Direct Rendering Manager), чтобы вывести картинку на экран и получить события ввода с помощью Linux-драйвера evdev. Wayland не реализует функций отрисовки, не требует создания специальных драйверов (задействуются DRI-совместимые драйверы, также поддерживаемые X.org) и в целом очень прост в реализации.
Проблема совместимости с ранее написанным софтом здесь также решена куда более изящно. Протокол Wayland строго версионирован, то есть может безболезненно меняться на протяжении своей жизни. А ранее написанный софт просто будет использовать одну из предыдущих версий протокола, главное, чтобы она была реализована в композитном менеджере. Более того, Wayland позволяет бесшовно запускать внутри себя софт, написанный для иксов, для чего используется специальная реализация X-сервера (XWayland), которая запускается как клиент Wayland для отдельно взятого приложения.
Статус поддержки
Как опциональный компонент Wayland уже есть в дистрибутивах Fedora и Arch Linux и может быть установлен в виде набора пакетов в некоторые другие дистрибутивы. Статус поддержки Wayland в графических средах пока ограничен. В экспериментальном режиме ограниченная поддержка есть в GNOME, KDE и Enlightenment, однако использовать их полноценно не удастся, так как многие компоненты до сих пор работают только поверх иксов.
В комплекте с Wayland идет эталонная реализация композитного менеджера Weston. Он представляет собой простую графическую оболочку, которая позволяет запускать приложения и управлять окнами. Ее можно использовать уже сейчас, но большого смысла в этом нет, так как Weston создан в наглядной демонстрации возможностей Wayland.
Wayland vs Mir
В свое время компания Canonical собиралась использовать Wayland в дистрибутиве Ubuntu. Однако в 2012 году компания отказалась от Wayland в пользу своего собственного дисплейного сервера Mir, первую альфа‑версию которого выкатила уже через год. В качестве причин отказа от Wayland компания указала неправильную с их точки зрения реализацию обработчика событий ввода, что не было принято сообществом Wayland всерьез, так как Canonical даже не пыталась вести дискуссию на эту тему или предложить переработанную реализацию.
В целом Mir оказался очень похожим на Wayland с его минимализмом и заточкой под одну конкретную задачу, но еще больше он казался похожим на композитный менеджер SurfaceFlinger из Android. В частности, идеи обработки событий ввода и использование EGL как единого канала работы с графическими драйверами взяты именно из Android, причем первый вместе с исходниками.
Сейчас Mir находится в финальной стадии развития и пока не включен в Ubuntu по умолчанию. Разработчики других дистрибутивов и графических сред (KDE, E17) уже отказались от портирования своих продуктов на Mir, так как не считают правильным сосредоточивать силы разработки одного из основных компонентов системы в руках отдельно взятой компании.
Совсем другое дело — окружение рабочего стола Hawaii, созданное специально для Wayland и в целом уже более‑менее пригодное для использования. Hawaii включает в себя композитный менеджер, оболочку рабочего стола со строкой состояния, меню приложений, апплетами для управления звуком и сетью. В комплекте имеется приложение для настройки системы, файловый менеджер, терминал, текстовый редактор, PDF-ридер и просмотрщик изображений (опционально доступен браузер и IRC-клиент).
Поддержка Wayland уже добавлена во многие графические библиотеки и тулкиты, такие как GTK+, Qt, SDL и Clutter, поэтому некоторые основанные на них приложения можно запустить как клиент Wayland без перекомпиляции (библиотека сама выберет, какой способ вывода изображения использовать). Большинство приложений, тем не менее, до сих пор используют прямые вызовы к иксам, но в таких средах, как GNOME и KDE, их становится все меньше.
Что касается графических драйверов, то в целом здесь все в порядке. Как я уже говорил, Wayland использует DRM для взаимодействия с драйвером, а сегодня это стандарт, поддержка которого есть во всех открытых драйверах, включая Intel, Radeon и NVIDIA (Nouveau). С закрытыми драйверами пока все сложнее, но на данном этапе хватит и открытых.
Статус поддержки Wayland в крупных проектах
- Программное обеспечение консорциума GENIVI Alliance, предназначенное для создания автомобильных развлекательных систем.
- Фреймворк Maliit, предназначенный для создания виртуальных клавиатур для мобильных устройств (используется в Nokia N9, KDE Plasma Active, устройствах OLPC и Ubuntu Touch).
- Mesa — открытая реализация OpenGL, используемая в свободных драйверах Intel, ATI, NVIDIA (Nouveau) и Qualcomm Snapdragon (freedreno).
- Мобильная операционная система Sailfish OS (форк MeeGo).
- ОС Tizen, развиваемая Samsung и предустановленная на часы Gear 2.
- Окружение рабочего стола Enlightenment (поддержка на уровне приложений, композитный менеджер пока не реализован).
- GNOME 3.12 поддерживает Wayland в экспериментальном режиме (большинство приложений пока работают только поверх X).
- KDE 4.11 имеет частичную поддержку Wayland (на уровне композитного менеджера и некоторых приложений, в том числе офисного пакета Calligra Suite).
- Окружение Mate планируется перевести на Wayland с выпуском 1.10.
- Фонд Raspberry Pi работает над поддержкой Wayland, но не в качестве полной замены X.
- Компания Intel портировала браузер Chromium для работы поверх Wayland в рамках проекта ozone-wayland.
Полная поддержка Wayland уже есть в тулкитах Clutter, EFL, GTK+, Qt 5 и SDL.
Тестируем!
Самый простой способ затестить Wayland — это скачать и запустить LiveCD-дистрибутив под названием RebeccaBlackOS (это в честь американской певички такой). Несмотря на название, дистрибутив довольно полезный и позволяет потестить множество самых разных приложений из комплекта KDE, GNOME и Enlightenment в среде Weston или Hawaii. Там же есть XWayland и куча иксовых приложений для тестинга.
Скачать дистрибутив можно на sf.net, вес — 1,1 Гб. Он отлично работает на голом железе, но поддерживает также и VirtualBox. Достаточно только включить расширение PAE/NX в настройках процессора виртуального окружения и выбрать вывод через framebuffer в меню загрузчика LiveCD. 3D-ускорение в этом случае работать не будет, но ты этого не заметишь (будет задействована софтверная реализация OpenGL). Сразу после загрузки система предложит выбрать один из трех вариантов десктоп‑интерфейса: классический Weston, Hawaii или Orbital. Последний — нечто вроде очень сырого KDE, собранного на коленке.
Неважно, какой из них ты выберешь. Из любого можно запустить множество приложений из состава KDE, GNOME и Enlightenment. Большинство из них будет запущено в качестве Wayland-клиентов, но некоторые работают поверх XWayland. Разницу между ними ты сразу заметишь, так как Wayland-приложения будут иметь разные декорации окон, в зависимости от принадлежности к графической среде: синяя рамка для KDE-приложений, черная для приложений Enlightenment, белая для GTK/Gnome и белая с градиентом для приложений XWayland или родных приложений Wayland.
Для пользователя Linux, знающего, что такое менеджер окон, такой разброд оформления может показаться странным, однако в Wayland это нормальная ситуация. Здесь приложения сами отвечают за отрисовку декораций окон, и, по сути, она может быть любой (или не существовать вообще). В будущем, конечно, придумают способы унификации оформления для всех приложений, запущенных в одной среде, но пока все это выглядит довольно смешно.
Из других приложений в дистрибутиве можно найти веб‑браузер Firefox, торрент‑клиент Transmission, различные утилиты, NetworkManager и другие. Они работают поверх XWayland. В целом LiveCD включает солидный набор приложений, но использовать его для решения повседневных задач, конечно же, не получится. Система часто падает, в ней много разного рода глюков и костылей. Некоторые из них — следствие некомпетентности автора LiveCD, другие вызваны сыростью графических окружений и приложений. Тот же Hawaii, несмотря на всю свою внешнюю привлекательность, полон багов, которые приводят к падениям и различным графическим глитчам. С другой стороны, дистрибутив отлично подходит для ознакомления с Wayland, и здесь ему просто нет альтернатив.
И еще раз тестируем!
Еще один простой и бескровный метод опробовать Wayland — это Arch Linux. В этом дистрибутиве библиотеки GTK+, qt, SDL и Clutter по умолчанию собраны с поддержкой Wayland, а сам он (библиотека с реализацией) устанавливается как их зависимость. Также в репозитории всегда доступен Weston, а установить Hawaii можно, подключив официальный репозиторий проекта (в других дистрибутивах пришлось бы собирать из исходников).
info
Для запуска GNOME под управлением Wayland следует использовать команду gnome-session --session=gnome-wayland.
Запустить Weston и Hawaii можно не только поверх голого железа (из консоли, прибив иксы), но и как обычный клиент иксов. Все, что нужно сделать, — это просто запустить Weston из эмулятора терминала:
$ sudo pacman -S weston
$ weston --fullscreen
По умолчанию в панели запуска Weston доступен только терминал, но с его помощью можно запустить несколько тестовых приложений. Их имена начинаются на weston-, так что найти их будет просто. Добавить приложения в панель, а также активировать другие его возможности можно с помощью конфига (~/.config/weston.ini):
[core]
# Включаем поддержку XWaylandmodules=desktop-shell.so,xwayland.so
[shell]
# Меняем обоиbackground-image=/путь/до/изображения.jpg
# Меняем цвет панелиpanel-color=0x90ff0000
# Меняем эффект открытия оконanimation=zoom
[keyboard]
# Включаем русскую раскладку с переключением по Caps Lockkeymap_rules=evdev
keymap_layout=us,ru
keymap_loptions=grp:caps_toggle
[launcher]
# Добавляем Firefox в панель запускаicon=/usr/share/icons/hicolor/24x24/apps/firefox.png
path=/usr/bin/firefox
[screensaver]
# Хранитель экранаpath=/usr/libexec/weston-screensaver
duration=600
Что касается Hawaii, то его установка производится следующим образом:
- Добавляем в конфиг /etc/pacman.conf следующие строки:
[hawaii]
Server = http://archive.maui-project.org/archlinux/$repo/os/$arch SigLevel = Optional TrustAll
- Обновляем индекс репозиториев и пакетов:
$ sudo pacman -Sy
- Устанавливаем Hawaii плюс менеджер логина SSDM, браузер QupZilla и IRC-клиент Communi:
$ sudo pacman -S hawaii-meta-git communi-desktop-git qupzilla-qt5-git sddm-qt5-git
- Запускаем Hawaii (в иксах или из голой консоли, прибив иксы):
$ /opt/hawaii-git/bin/hawaii
Также может потребоваться принудительная установка пакета icu:
$ sudo pacman -S icu
info
При желании Wayland можно запустить даже в Android, для чего предусмотрена прослойка совместимости видеодрайверов libhybris.
Вместо выводов
Wayland уже готов для того, чтобы окончательно отправить иксы на помойку истории. Он прост, отвечает современным требованиям и лишен огромного количества мусорного кода, однако в ближайшие пять лет мы, скорее всего, не увидим полного избавления дистрибутивов от X Window. Очень много работы еще предстоит сделать, чтобы портировать старый, но нужный софт.