Wayland на замену Xorg.

В преддверии выхода Ubuntu 17.10, в которой по умолчанию используется Wayland, поговорим об этом  протоколе для организации графического сервера в Linux и других UNIX-подобных операционных системах. А также разберём, зачем Wayland пришёл на замену Xorg.

Чем плох Xorg?

Графическая система Linux оставалась в своей сути неизменной с 1993 года. Xorg (до 2004 года он назывался XFree86) — это та реализация графической системы, которая лучше всего соответствует инженерной направленности Linux. Она построена по архитектуре «клиент-сервер», может отрисовывать окна на удалённых машинах, её функциональность легко нарастить расширениями.

Но такой подход заложил и слабые места, которые ярко проявились в наше время многоядерных вычислений, сложной графики и множества устройств ввода. Сейчас Xorg — это рядовая программа, через которую проходит вся графика и данные от клавиатур, мышей, джойстиков, тачпадов, и т. д. Существование такой монолитной прослойки порождает уйму проблем:

  • X-сервер получает от программ поток кадров, который нужно отобразить на экран, но из-за особенностей реализации протокола Xorg может терять кадры или путать их местами — пользователь видит это как лаги, подёргивания и разрывы картинки (тиринг);
  • модернизация Xorg практически невозможна из-за очень сложного кода — это давно уже не стройная «академическая» программа, а нагромождение слоёв, каждый из которых — попытка осовременить Xorg, в итоге нижние слои почти не используются, без толку «утяжеляя» протокол;
  • Xorg плохо работает с несколькими одновременными нажатиями — о тачпадах в 90-х годах никто не думал, капризен к переключениям видеокарт, не может обрабатывать отжатие клавиши вместо нажатия, теряет ввод при открытии меню — таких вот недочётов и странностей много;
  • чтобы быстро и плавно отрисовывать тени, прозрачности, шрифты и прочие элементы GUI, нужно напрямую использовать аппаратные ресурсы видеокарты, но Xorg не может обеспечить прямую отрисовку — он «гоняет» всю эту кипу данных через себя от программы к композитному менеджеру, а от него — к видеокарте, опять же через себя;
  • наконец, существование централизованного графического сервера опасно с точки зрения безопасности, ведь если злоумышленник получает контроль над Xorg, в его руки попадает и всё то, что видит пользователь на экране, и все его устройства ввода, при этом в X-сервере нередко находят опасные уязвимости.

Как с этим бороться?

Были попытки создать X12 (нынешняя реализация Xorg обозначается как X11), но скоро разработчики Xorg поняли, что проще всё выкинуть и сделать с нуля, заложив современные возможности в самую основу протокола. Так был начат проект Wayland — начала его компания Intel, которая активно участвует в развитии Linux.

Wayland — протокол общения приложений с композитным менеджером. Композитный менеджер это почти всегда менеджер окон: Weston, KWin, Mutter, Compiz, и т. д. Он напрямую использует ресурсы видеокарты, взаимодействуя с ядром. Сам протокол Wayland включает в себя только работу с поверхностями — окнами, панелями, виджетами. То, что внутри панели, рисует сама программа.

Так исчезает надобность в графическом сервере типа того, что виден в диспетчере задач под именем Xorg (в некоторых дистрибутивах — просто X). Как следствие, отрисовка становится очень быстрой и плавной, при этом нагрузка на оборудование — минимальна. Особенно сильно разница заметна на слабом «железе», например, на Raspberry Pi:

Когда же Wayland придёт в Linux?

Разработка Wayland длится больше 5 лет, но до сих пор он применяется лишь на некоторых смартфонах. Но в ближайшем будущем следует ожидать начала массового прихода Wayland на компьютеры пользователей. Ведь, с одной стороны, KDE и Gnome уже готовы для работы на Wayland, с другой — Nvidia, наконец, реализовала полноценную поддержку протокола в своём драйвере.

На память приходит дистрибутив Fedora, в котором используется Wayland, а теперь еще и Ubuntu 17.10 (следующие версии также будут на Wayland). Но в Ubuntu 17.10 всё еще доступны две сессии, как Xorg, так и Wayland. Так как проблем с новым дисплейным сервером ещё достаточно, нельзя совсем отказываться от Xorg  в данный момент.

Wayland не единственная альтернатива Xorg — для Ubuntu разрабатывался протокол Mir, на который планировалось перевести окружение Unity. Он также избавляет графическую систему от посредничества X-сервера. Mir не был готов для использования и Canonical отказались от собственного варианта, как отказалась от своего upstart и перевела Ubuntu на systemd. И сейчас Mir разрабатывается исключительно для IoT устройств (интернет вещей). А Ubuntu возвращается на Gnome и начинает использовать протокол Wayland с версии 17.10.