Denial WM: Flutter가 직접 내장된 새로운 Wayland Compositor
WAYLAND
Denial은 현재 Flutter-native Wayland compositor로서 알파 소프트웨어로 간주됩니다. Denial의 리드 개발자는 Phoronix에 다음과 같이 설계 방식을 설명했습니다:
"Denial은 다른 compositor 위에서 애플리케이션으로서 Flutter를 실행하는 것이 아닙니다. Flutter Engine을 직접 내장하는 대신, Rust와 Smithay compositor가 Wayland 프로토콜 상태, 입력, DMA-BUFs, DRM/KMS 프레젠테이션 및 네이티브 리소스 수명을 처리합니다.
Wayland DMA-BUF 기반 애플리케이션 버퍼는 CPU readback, 픽셀 복사 또는 텍스처 업로드가 필요하지 않은 GPU 텍스처(EGL_EXT_image_dma_buf_import 사용)로 Flutter 씬(scene)에 임포트됩니다.
Flutter는 KMS 프레젠테이션에 사용되는 GBM 버퍼로 직접 렌더링합니다. 중간 렌더 타겟(render target), 최종 블릿(blit) 또는 두 번째 compositor 패스는 존재하지 않습니다.
Denial은 이미 저의 데일리 데스크톱입니다:
-
네이티브 Wayland 애플리케이션 (Chromium, Firefox, Blender, Discord 등)
-
XWayland
-
Steam 및 고사양 Proton 게임 (Arknights: Endfield, Wuthering Waves, Neverness to Everness, Final Fantasy XIV를 테스트했습니다) 모두 제 테스트에서 완벽하게 작동합니다.
-
nwg-displays를 위해 구현되어 업스트림 제출 준비가 된 전용 Denial 백엔드를 포함한 멀티 모니터 구성
-
알림 (notifications)
-
오디오, 창별 볼륨 제어 포함
-
화면 잠금 및 DPMS
-
화면 공유 (OBS로 테스트 완료)
-
CI/CD가 적용된 서명된 Arch 패키지
...
이 프로젝트는 일반적인 Flutter 개발 워크플로우도 유지합니다. 선택적인 개발 패키지는 compositor를 재시작하거나 실행 중인 애플리케이션을 닫지 않고도 라이브 데스크톱 셸에 대해 Flutter Inspector, DevTools 및 핫 리로드(hot reload)를 제공합니다. 프로파일링(Profiling) 및 디버그 모드는 Denial이 실행되는 동안 활성화/비활성화할 수 있습니다.
Denial은 외부 텍스처 손상 추적(external-texture damage tracking), 특화된 프레임 스케줄링(frame scheduling), 그리고 핫 드로우 의존성 경로(hot draw-dependency paths)에서의 힙 할당(heap allocations) 제거를 포함하여, 컴포지터(compositor) 특화 최적화가 적용된 커스텀 Flutter Engine 및 Skia 빌드를 사용합니다. 데스크톱 컴포지터에서는 최적화가 필수적이므로, 작업의 상당 부분이 낮고 일관된 프레임 시간(frame times)을 위해 최적화하는 데 할애됩니다.
흥미로운 프로젝트로 보이며, 적어도 시중에 나와 있는 다른 Wayland 컴포지터들보다 몇 가지 독창적인 목표를 가지고 있는 것 같습니다.
Denial에 대해 더 자세히 알고 싶은 분들은 DenialWM.org를 통해 확인할 수 있으며, GPLv3+ 라이선스의 코드는 GitHub에 호스팅되어 있습니다.