|
Проект Denial развивает открытый композитный сервер на базе протокола Wayland, примечательный встраиванием движка построения пользовательского интерфейса на базе фреймворка Flutter. В отличие от традиционных решений, в которых Flutter-приложения запускаются поверх оконного менеджера, встраивание Flutter в композитный сервер позволило напрямую задействовать его для отрисовки всех элементов пользовательского окружения, создания анимации и компоновки окон. Проект находится на стадии публичного альфа-тестирования. Код написан на языках Dart и Rust, и распространяется под лицензией GPLv3+. При разработке задействован AI-ассистент OpenAI Codex.
Низкоуровневая часть композитного сервера написана на языке Rust с использованием библиотеки Smithay, и отвечает за обработку протоколов Wayland, управление состояниями клиентских окон, взаимодействие с устройствами ввода через libinput, управление устройствами вывода (DRM/KMS), переключение фокуса и управления ресурсами. Пользовательская оболочка написана на языке Dart и использует Flutter для управления раскладкой окон, формирования панелей, управления жестами, навигации и визуальных эффектов.
Кадровые буферы Wayland-приложений импортируются как внешние GPU-текстуры через расширение "EGL_EXT_image_dma_buf_import", что исключает копирование данных между CPU и GPU. Сцена, включающая элементы оболочки на базе Flutter и текстуры запущенных программ, отрисовываются напрямую в GBM-буферы (Generic Buffer Management) и выводятся на экран через DRM/KMS без промежуточной отрисовки.
Поддерживается запуск Wayland-приложений, а также X11-приложений с помощью прослойки Xwayland (подтверждена корректная работа игр под Steam и Proton).
Реализованы такие возможности, как вывод на несколько мониторов, встроенная система уведомлений, независимая регулировка громкости для каждого окна, блокировка экрана и поддержка desktop-порталов XDG для организации записи и трансляции экрана. При разработке пользовательской оболочки поддерживается горячая перезагрузка (Hot Reload), применение утилит Flutter Inspector, а также использование для отладки встроенных в браузеры инструментов для web-разработчиков.
|