- PVSM.RU - https://www.pvsm.ru -
Одним из знаменательных Linux событий прошлого года стал выход 25-й Федоры с графическим окружением Gnome 3.22 на базе дисплейного сервера Wayland, который призван заменить X Window System [1]. Но зачем вообще после стольких лет возникла такая необходимость?
В последнее время экипаж МКС пересел с Windows на Linux.
— Хьюстон, у нас проблемы. Нас сносит на Юпитер.
— Вы что, опять возились с xorg.conf?
— Да. Хьюстон, за три последних дня у нас почему-то выросли бороды.
Далее, речь о том, почему Linux необходима новая графическая среда, хотя бы в 2017 г, а отдельным постом я расскажу про Wayland и Mir.
Я уверен, что вы уже прочитали статью Хабрапост про графический стек Linux [2], а также страницу на Вики [3] и теперь можете уверенно двигаться дальше. Ну, а если пока оставили в закладках, позвольте вкратце напомнить.
(5:50)$ eix -c xorg-server
[I] x11-base/xorg-server (1.18.4@19.09.2016): X.Org X servers
Графическая подсистема X.Org Server состоит из двух частей.
Еще немного тезауруса о технологиях, благодаря которым современное графическое окружение Linux держит свою марку.
Mesa — Реализация OpenGL, OpenCL и Vulkan API для Linux и Unix, включающая в себя как программные библиотеки, так и набор драйверов видеокарт. Mesa имеет и умеет много чего, но в основном это открытая реализация OpenGL API, для трансляции которого в исполнительные команды используются программные:
swrast
— устаревший и слишком тормознутый,softpipe
— средне,lvmpipe
— может и быстрый,
и аппаратные бэкенды с помощью открытых драйверов intel, radeon и noveau.
r600g
r300g
nvc0
OpenSWR
, в отличие от предыдущих трех, он на стероидах и значительно быстрее lvmpipe
.
Программирование на X — это как чтение французских философов, после этого начинаешь задаваться вопросом: что я на самом деле знаю?
Томас Турман.
Кому на сегодняшний день позарез нужны иксы? В Android телефонах, телевизорах, планшетах X Windows System не используется, Хромбуки [5] тоже как-то без них обходятся. Значит речь идет только о Linux / Unix рабочих станциях, в основном по той причине, что тулкиты GTK+ и QT, долгое время не могли обходиться без X.
В этом году X11 исполняется 30 лет. Секрет живучести X Window System в следующих принципах, сформулированных в 1996 г.
Сочетание этих принципов позволило X11 быть невероятно гибким и масштабируемым решением для столь разных графических оболочек Unix в течении долгого времени. Особенное место занимает последний — обеспечить механизм, для того, чтобы X-клиент смог реализовать все свои затеи. Обратной стороной такой всеядности и живучести стало невероятное нагромождение устаревших стандартов, методов и технологий. Можно вспомнить сервер шрифтов [6] вместе с XLFD или движок для отрисовки многоугольников и разноцветных полос.
Изначально X был государством в государстве и подменял собой множество функции ядра ОС:
Из все этого списка, пункт первый являлся корнем всех добродетелей и зол, так как ни одна другая графическая система с открытым ПО не сумела решить эту задачу для всех платформ. Сейчас почти весь этот список в ядре, в том числе и modesetting
, но позади долгий этап планомерного принуждения иксов к миру, то есть к разумному сосуществованию в окружении GNU/Linux.
Некоторое время всех все устраивало, программисты ваяли стильные приложения, примерно такие.
Затем внезапно устройства стали более быстрыми, мощными и сложными: несколько GPU, мониторов, разношерстые устройства ввода. Рендеринг также стал более сложным, появился OpenGL. X Window system стала обрастать расширениями, однако ядро протокола по политическим мотивам осталось нетронутым. На все недостатки находились обходные пути, и пошло и поехало… BIOS видеокарты, порты I/O, подсистема питания. И всем этим хозяйством X управлял из рук вон плохо, превратившись в ОС внутри ОС, причем достаточно паршивую ОС.
Стало понятно, что иксы нужно менять, но в этот момент начались дрязги и пляски [7] вокруг лицензии xfree86. После того, как страсти по лицензиям утихли, произошло размежевание иксовых разработчиков и основная их масса выбрала X.Org со свободной лицензией GPL. Работа снова закипела.
Какие-же функции остались за X сервером после всех этих трансформаций? В принципе не так уж много. По сути основная работа иксов состоит в том, чтобы посредничать между X-клиентом и WM — оконным менеджером. Клиентская программа рисует фрейм, X сервер передает данные WM, который рендерит кадр, определяет местоположение окна и передает обратно серверу, который показывает готовый результат. Основную работу сейчас делает именно WM, и напрашивается вопрос. А что случится, если мы уберем посредника? Ответ — Wayland.
Точно так-же при обновлении содержимого экрана иксы не при делах. Приложение рисует что-то, данные через DRI попадают в область off-screen buffer памяти видеокарты. Приложение затем оповещает сервер о том, что буфер изменился, а X-сервер передает это сообщение WM, и тот через DRI рисует новую картинку.
Помимо этого остаются архитектурные ограничения, которые невозможно обойти, не ломая совместимость с древними Motif приложениями. Да-да, не смейтесь, несколько лет назад я сам с такими работал и даже сопровождал. К таким ограничениям относится ужасный IPC, полный захват устройств ввода, в результате чего скринсейвер не запускается при открытом меню, кнопки управления звуком блокированы скринсейвером и pop-up сообщениями. Дерганое изображение, неравномерная отрисовка, артефакты обновления, это все никуда не денется, как бы ни старались иксовые программисты, а они стараются все меньше и все больше перестраиваются на Wayland. Ах, да и еще имманентное состояние гонки.
В силу своей асинхронности X11 предрасположен создавать состояние гонки между событиями X-клиента или между быстрым и мертвым тормознутым X-клиентом. Возьмем простейший случай: пользователь щелчком левой кнопки мыши вызывает меню приложения, затем отпускает кнопку и приложение при наведения курсора выполняет определенное действие. Покажем последовательность событий на диаграмме Фейнмана.
ButtonPress
приложению.MapWindow
для показа меню.Expose
.На диаграмме видно, что произойдет, если пользователь отпустит левую клавишу раньше события 4. Если натренированный на действие пользователь заранее переместился на место предполагаемого пункта меню до того момента, пока там возникло новое окно, то тогда произойдет состояние гонки mouse ahead. Событие ButtonRelease
придется на еще не занятую новым окном область экрана. Это вполне вероятно на удаленных X-сессиях по медленной сети.
Server Client
+-------+ +-----+
Left Button Down
|
+----------------> Map menu
Left Button Up |
| |
+-------------------------------> No menu operations visible
|
Map Window <-----------------------+
Указанный выше сценарий благополучно завершится без состояния гонки при использовании synchronous grab
, т. е. синхронного захвата, который ставит на паузу все события с устройств ввода, точнее буферизирует их. Однако в более сложных сценариях и это не помогает. К тому же от этого страдает производительность приложения.
Тридцать лет тому назад Unix сервера и рабочие станции благодаря X Window System получили унифицированную графическую среду, что было довольно прогрессивным и важным шагом для ИТ индустрии. Кто сейчас восхищается давнишними конкурентами — Sun NeWS, Amiga, или ругает их? Тогда иксы обошли их во за счет кросс-платформенности, возможности запускать приложения поверх TCP/IP, что было сравнимо с http доступом для веб приложений сегодня.
Вместе с тем создатели иксов явно где-то перемудрили. Принцип обеспечения механизмов, но не политики впоследствии сыграл злую шутку с экосистемой X и она обросла всем тем, чем обросла. За десятилетия ландшафт компьютеров, устройств и ПО радикально изменился, а X Window System проникла на лаптопы и даже смартфоны Нокиа. До сих пор разработчикам вполне удавалось держать проект на плаву, благодаря миграции значительной части функционала в ядро. Этот ресурс уже тоже исчерпан, и в силу вступил неумолимый закон убывающей отдачи. Наконец-то есть возможность начать с чистого листа, догнать и перегнать тренд, вместо того, чтобы плестись за ним. Я также связываю с этим давно обещанный прорыв Linux на десктопы. Закономерность или случайность, но Linux имеет полное доминирование на устройствах, где нет X сервера.
Как должна происходить замена X Window System на Wayland или Mir? Нельзя так просто дать готовый рецепт, но можно сказать как не должно поступать. Чтобы без хейтеров и фанбоев, без шоковой терапии и подозрительных двадцати раундов голосования с итоговым перевесом в один голос [8]. Без раскола сообщества. Словом, без всего того, что имело место при замене систем инициализации на systemd
. А вы как считаете?
Автор: temujin
Источник [15]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/linux/245262
Ссылки в тексте:
[1] X Window System: https://wayland.freedesktop.org/faq.html
[2] графический стек Linux: https://habrahabr.ru/post/148954/
[3] страницу на Вики: https://en.wikipedia.org/wiki/X_Window_System_protocols_and_architecture
[4] Image: https://habrastorage.org/files/669/dad/62e/669dad62e45f45d9a6480c57c06dc18d.png
[5] Хромбуки: https://hostink.ru/news/Chrome_OS_Freon/
[6] сервер шрифтов: https://keithp.com/~keithp/talks/xtc2001/paper/
[7] дрязги и пляски: https://en.wikipedia.org/wiki/XFree86
[8] в один голос: https://www.linux.org.ru/news/debian/10161361
[9] The Linux graphics stack and Nouveau driver: http://www.slideshare.net/ennael/kr2014-nouveau
[10] X and the future of Linux graphics: https://www.youtube.com/watch?v=dZI4pAvK_RY
[11] The real story behind Wayland and X: https://www.youtube.com/watch?v=cQoQE_HDG8g
[12] The X Windowing System: http://www.catb.org/esr/writings/taouu/html/ch02s06.html
[13] Explaining X11 for the rest of us: http://magcius.github.io/xplain/article/
[14] Thoughts about DRI.Next: https://keithp.com/blogs/DRI-Next/
[15] Источник: https://habrahabr.ru/post/321470/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.