Phoenix: новый X-сервер на zig с поддержкой wayland и современным Drm

Проект Phoenix: попытка перезапустить X-сервер на современном стеке с Zig и учётом эпохи Wayland
--------------------------------------------------------------------

Phoenix — это экспериментальный X-сервер нового поколения, который не опирается на кодовую базу X.org и создаётся как переосмысление X11 под реалии нынешних десктопов. В отличие от классического X.Org Server, Phoenix пишут с нуля на языке Zig, а сам проект ориентирован не на полное копирование протокола X11, а на его эволюцию и упрощение, с учётом совместимости с Wayland и актуальным графическим оборудованием.

Код Phoenix распространяется под лицензией GPLv3, а сам сервер пока находится в ранней стадии разработки: его нельзя использовать как основной, но он уже способен запускать простые графические приложения через вложенный режим — поверх существующего X-сервера. В таком варианте работают программы, использующие GLX, EGL или Vulkan для вывода изображения.

Не «ещё один X.org», а упрощённый и обновлённый X11

Создатели Phoenix сознательно отказываются от полного воспроизведения всего наследия X11. За десятилетия в протокол и реализацию X.org обросла огромная масса функций, расширений и костылей, значительная часть которых нужна только для очень старого и экзотического оборудования, либо для давно неактуальных приложений.

В Phoenix решили двигаться в другую сторону:

- не поддерживать древние видеокарты и устаревшие драйверы;
- реализовывать только те части протокола X11, которые действительно используются современными программами;
- отказаться от многих специфических подсистем X.org, упростив архитектуру и уменьшая объём потенциальных уязвимостей и багов.

Хороший пример такого подхода — работа со шрифтами. Вместо полной, исторически сложившейся поддержки всех механизмов X11 для текстового рендеринга планируется реализовать только минимально необходимый набор операций, который используется реальными приложениями. Всё остальное предполагается перекладывать на современные библиотеки и стек отрисовки.

Современный графический стек: DRM и GBM вместо старых драйверов

Классический X.Org Server полагается на старую модель X-драйверов, написанных под конкретные семейства видеокарт. Phoenix от этого отказывается. Для вывода графики он опирается на:

- Linux DRM (Direct Rendering Manager) — ядровой интерфейс прямого рендеринга;
- Mesa GBM (Generic Buffer Management) — систему управления графическими буферами.

Таким образом, Phoenix использует тот же низкоуровневый стек, что и современные композиторы Wayland. Это позволяет:

- опираться на актуальные драйверы из ядра Linux и Mesa;
- проще поддерживать новое оборудование;
- не тянуть за собой наследие старых X-драйверов.

При этом разработчики исходят из того, что такой «обрезанный» по старым функциям сервер всё равно останется совместимым с большинством прикладного ПО, включая даже приложения на GTK2, если они не зависят от совсем уж архаичных возможностей X11.

Поддержка X11-приложений без фетиша по ретро-железу

Планка обратной совместимости у Phoenix довольно прагматичная:

- запуск большинства программ, написанных за последние ~20 лет;
- работоспособность на железе возрастом до 15–20 лет;
- отсутствие попыток заставить Phoenix функционировать с устройствами эпохи ранних XFree86.

То есть цель — не музейная совместимость со всеми возможными конфигурациями, а комфортный запуск реального пользовательского софта, который ещё актуален сегодня, без завала кода поддержкой откровенно мёртвых сценариев.

Новые расширения X11 под современные задачи

Phoenix не ограничивается простым «переписать по‑новому то же самое». В протокол X11 планируют добавить расширения, которые учитывают нынешние требования к графике и мониторам:

- полная поддержка HDR (широкий динамический диапазон);
- корректная работа с несколькими мониторами, где у каждого свой отдельный фреймбуфер;
- привязка параметров DPI к конкретному монитору, а не ко всей сессии;
- адаптивная частота обновления (VRR), полезная для игр и плавного вывода;
- механизмы защиты от «разрывов» изображения (tearing) при смене кадров.

Это как раз те вещи, с которыми классический X-сервер справляется с большими оговорками или только через массу костылей и сторонних решений.

UTF‑8 по умолчанию и отказ от старых кодировок

Ещё одно заметное отличие Phoenix от традиционного X — работа со строками. В классической экосистеме X11 до сих пор живы разные кодировки, что порождает проблемы при смешении приложений и библиотек.

В Phoenix решили:

- по умолчанию использовать UTF‑8 для всех строк;
- старые кодировки, вроде ISO Latin‑1, применять только в том случае, если приложение явно указало необходимость именно такого формата.

Таким образом, сервер сразу ориентируется на современное универсальное представление текста, что упрощает интернационализацию и уменьшает количество тонких и трудноотлавливаемых багов с символами.

Безопасность: изоляция клиентов и контроль доступа

Традиционно X11 считается небезопасным: одно приложение может легко шпионить за другим, перехватывать нажатия клавиш, получать содержимое чужих окон и т. д. Это следствие архитектуры X11, ориентированной на доверенную многопользовательскую среду прошлых десятилетий.

Phoenix пытается решить эту проблему на уровне дизайна:

- каждый клиент по умолчанию изолирован от остальных;
- доступ к чужим окнам, данным и событиям ввода выдается только после явного подтверждения через диалог или предустановленных прав при запуске;
- глобальные сочетания клавиш не работают произвольно: либо требуется удержание модификатора, либо отдельное право доступа.

Чтобы при этом не поломать старые X11-приложения, разработчики используют мягкую модель отказа: если приложению не хватает прав, оно получает не ошибку протокола, а пустой или нулевой результат. Для старого ПО это менее разрушительно, чем жёсткие ошибки, и позволяет функционировать дальше, пусть и без части желаемых возможностей.

Совместимость с Wayland: встроенная или через прослойки

Несмотря на то, что Phoenix — это X-сервер, разработчики не игнорируют реальность: всё больше современных окружений и приложений ориентируются на Wayland. Поэтому одна из целей проекта — дать возможность запускать программы, которые умеют работать только с Wayland.

Рассматриваются два пути:

1. Встроенная поддержка протокола Wayland внутри самого Phoenix, чтобы он мог выступать как Wayland-композитор, совмещённый с X‑сервером.
2. Использование внешних прослоек, переводящих Wayland-запросы в эквивалентные операции X11. Такая схема напоминает то, как реализуются слои совместимости между Windows и Unix-системами.

Важно понимать, что Wayland — это не монолитная реализация, а протокол плюс набор расширений. Разные композиторы (в популярных окружениях, вроде GNOME и KDE) реализуют разные наборы расширений, но базовый протокол и расширения, как правило, формально описаны. Это позволяет теоретически строить маппинг между возможностями Wayland и X11 там, где есть концептуальные аналоги.

Зачем вообще новый X-сервер, если «эпоха X11 заканчивается»?

На первый взгляд Phoenix идёт против тренда: многие окружения рабочего стола объявили курс на Wayland, частично уже отказались от X.org, а некоторые прямо вырезают поддержку X-сессий в будущих версиях.

Однако есть несколько аргументов в пользу существования таких проектов:

- Долгая жизнь X11-приложений. Огромная масса программ по-прежнему написана под X11. Полный и быстрый отказ от X-сервера маловероятен, а качественная реализация X-протокола с современными возможностями может облегчить переходный период.
- Прототипирование идей. Phoenix — это возможность переглядеть архитектуру X-сервера без груза наследия X.org: попробовать новые модели безопасности, изоляции, работы с мониторингом и шрифтами, не боясь сломать обратную совместимость со всем и сразу.
- Параллельное существование. Даже если в массовом десктопе Wayland станет безальтернативным дефолтом, X11 ещё долго будет использоваться в специфичных сценариях: удалённый запуск, отладка, старые приложения, узкоспециализированные рабочие места.

Для разработчиков системного ПО подобные эксперименты важны ещё и как способ опробовать современные языки (в данном случае Zig) на крупных низкоуровневых проектах.

Почему Zig и что с «безопасностью памяти»?

Zig позиционируется как современный системный язык, во многом продолжающий идеи C, но предлагающий более строгую модель управления ресурсами, удобную работу с компиляцией, кроссплатформенностью и отладкой. В отличие от языков с полной безопасностью памяти (Rust, некоторые диалекты современных высокоуровневых языков), Zig не гарантирует устранения всех ошибок работы с памятью на уровне компилятора.

Поэтому корректнее воспринимать его как «новое поколение C», а не как универсальное лекарство от всех багов. Для проекта вроде Phoenix это означает:

- разработчики получают низкоуровневый контроль и предсказуемое поведение;
- многие риски, присущие C, уменьшаются за счёт более строгого синтаксиса, удобных проверок и инструментов;
- при этом всё равно нужен аккуратный подход к управлению памятью и тщательное тестирование.

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

Ограничения и скепсис вокруг Phoenix и Wayland

Вокруг тем X11 vs Wayland традиционно много эмоций. Сторонники классических X часто указывают, что:

- X.org — это зрелый промышленный продукт, который «просто работает» на огромном спектре железа, включая давно снятое с поддержки оборудование;
- многие устройства, прекрасно функционирующие через X, либо с трудом работают под Wayland, либо совсем не поддерживаются подходящими композиторами.

С другой стороны, авторы Wayland и связанных проектов подчёркивают, что:

- архитектура X11 изначально не была рассчитана на современные требования безопасности, HDR, сложные многомониторные конфигурации;
- многие функции X уже фактически дублируются или обходятся через сторонние механизмы;
- путь «допиливать и латать» бесконечно сложнее, чем спроектировать протокол под актуальные задачи.

Phoenix в этом контексте занимает промежуточную позицию: он не отрицает существование и растущую роль Wayland, но и не считает X11 полностью исчерпанным. Проект пробует показать, каким мог бы быть «X нового поколения», если отбросить избыточную совместимость и сделать ставку на понятный, компактный и безопасный дизайн.

Потенциальные сценарии применения Phoenix

Если в будущем Phoenix удастся довести до стабильного состояния, у него могут появиться свои ниши:

- как экспериментальная платформа для тестирования новых расширений X11 и графических технологий;
- как лёгкий X-сервер для систем, где нужен X-протокол, но нет смысла тащить весь X.org;
- как связующее звено между миром старых X11-приложений и новым поколением графических стеков, в том числе Wayland.

При этом не стоит ожидать, что Phoenix «заменит X.org завтра». Это проект на годы, и его успех зависит не только от технических решений, но и от того, насколько он будет востребован разработчиками приложений и дистрибутивами.

Итог

Phoenix — это не попытка «спасти» старый X.org, а попытка показать, как может выглядеть современный X-сервер:

- написанный на более современном системном языке;
- опирающийся на DRM и GBM вместо старых X-драйверов;
- с упрощённой и очищенной от исторического балласта реализацией;
- с новыми расширениями под HDR, многомониторность и VRR;
- с жёсткой моделью безопасности и UTF‑8 по умолчанию;
- с учётом необходимости сосуществования с Wayland и запуска чисто Wayland-приложений.

Насколько жизнеспособным окажется такой подход, покажет только время, но сам факт появления Phoenix говорит о том, что интерес к эволюции X11 ещё не иссяк — даже на фоне активного наступления Wayland.

Прокрутить вверх