Такое архитектурное решение имеет важные последствия: пользовательские компоненты графической системы - X-сервер, оконные менеджеры, композиторы Wayland - работают как отдельные процессы в изолированных адресных пространствах. Их можно останавливать, перезапускать, при этом их крах обычно не приводит к падению всей системы.
X Window System, разработанная в MIT в 1980-х годах, легла в основу графического интерфейса Linux. Архитектура X11 построена на клиент-серверной модели с путающей на первый взгляд терминологией:
- X-клиент - приложение, выполняющее вычисления (исторически — на мейнфрейме)
- X-сервер - программа, отвечающая за отображение и ввод данных (исторически — на графической станции)
X-протокол обеспечивает передачу сообщений в двух направлениях: события ввода от сервера к клиенту и команды отрисовки примитивов (точки, линии, текст, прямоугольники) - от клиента к серверу.
В современных системах эти компоненты часто работают на одной машине: X.Org Server взаимодействует с приложениями через локальные сокеты (вместо TCP/IP для удалtнных соединений), а оконный менеджер управляет расположением и взаимодействием окон.
За 40 лет развития X11 накопил унаследованные проблемы:
1. Пользовательские драйверы DDX — классические реализации позволяли рисовать 2D-графику напрямую из пользовательского пространства через драйвер фреймбуфера, нарушая изоляцию ядра.
2. Сложности с 3D-графикой — стандартный X-сервер плохо приспособлен для OpenGL. Это привело к выделению отдельной подсистемы Mesa, работающей в пользовательском пространстве и взаимодействующей с приложениями напрямую, минуя X-сервер (хотя синхронизация изображения с X-сервером сохраняется).
Для управления графическими адаптерами в ядре Linux существует подсистема DRM (Direct Rendering Manager). Она отвечает за настройку режимов работы видеоадаптера, управление видеопамятью, синхронизацию доступа и специфичное взаимодействие с конкретным графическим ускорителем.
DRM реализован как символьный драйвер: взаимодействие происходит через файловый API с использованием ioctl-команд. Для каждой видеокарты создаётся специальный файл устройства в /dev, через который пользовательское пространство получает доступ к функциям управления.
А Wayland представляет собой преемника X11, призванного избавиться от унаследованного багажа четырёхдесятилетней давности. Референсной реализацией служит композитор Weston.
Wayland сохраняет клиент-серверную модель с существенными отличиями:
1. Интеграция композитора - оконный композитор встроен непосредственно в сервер, более точное управление окнами и лучшую интеграцию с аппаратурой.
2. Современный протокол - устранены архаичные конструкции X11, неактуальные для современного оборудования.
3. Пользовательское пространство - как и X-сервер, Wayland-композитор работает как пользовательский процесс.
Wayland обеспечивает обратную совместимость: X-клиенты могут работать через специальные модули совместимости.
Вывод:
Графическая подсистема Linux демонстрирует эволюцию от сети-ориентированной архитектуры X11, разработанной для мейнфреймов 1980-х, к современному, лаконичному протоколу Wayland. При этом сохраняется ключевой принцип: основные компоненты остаются в пользовательском пространстве.
Подсистема DRM в ядре предоставляет единый интерфейс для управления современными графическими адаптерами, в то время как Mesa решает задачи 3D-графики, образуя многоуровневую, но при этом модульную архитектуру.