-
Phoenix는 기존 Xorg를 포크하지 않고 Zig 언어로 처음부터 작성된 새로운 X 서버로, 현대적 대안을 목표로 함
- 현재는 GLX, EGL, Vulkan 그래픽을 사용하는 간단한 애플리케이션을 기존 X 서버 내에서 중첩 실행할 수 있으며, 독립 실행은 아직 지원되지 않음
-
단순성을 위해 최근 20년 내 작성된 애플리케이션과 15년 내 하드웨어만 지원하며, 서버 드라이버 인터페이스 없이 동작
-
보안성을 강화해 프로토콜 메시지를 자동 파싱하고, 애플리케이션 간 접근은 권한 요청 기반 격리 구조로 제한
-
HDR, VRR, 다중 모니터, 내장 컴포지터 등 현대 기술을 지원하며, Wayland 호환성과 X11 프로토콜 확장도 계획
Phoenix 개요
-
Phoenix는 Xorg 서버를 대체할 현대적 X 서버로, Zig 언어로 완전 새로 작성된 구현체
- Xorg의 포크가 아니며, 보다 단순하고 안전한 구조를 지향
- 현재는 완전한 사용 단계가 아니며, 기존 X 서버 내 중첩 실행(nested mode) 만 지원
- GLX, EGL, Vulkan 기반의 하드웨어 가속 렌더링을 수행 가능
목표
단순성
- Xorg보다 단순한 서버로, X11 프로토콜의 일부만 지원
- 최근 20년 내 작성된 애플리케이션에 필요한 기능만 포함
-
Linux DRM과 Mesa GBM을 지원하는 최근 15년 내 하드웨어만 대상
- Xorg처럼 별도의 서버 드라이버 인터페이스는 사용하지 않음
보안성
-
프로토콜 메시지 자동 파싱으로 안전성 확보
- Zig의 ReleaseSafe 빌드 옵션을 통해 배열 인덱스 초과 등 불법 동작 자동 감지
- 기본적으로 애플리케이션 간 격리 실행
- 다른 앱과의 상호작용은 GUI 권한 요청 또는 사전 권한 부여를 통해서만 가능
- 예: 화면 녹화 앱은 지정된 창만 녹화 가능
- 접근 제한 시 클라이언트는 오류 대신 더미 데이터를 수신
-
글로벌 단축키는 수정키(ctrl, shift 등) 포함 시 동작
- 수정키 없이 전역 단축키 사용 시 명시적 권한 필요
- 옵션을 통해 Xorg와 동일한 동작 방식으로 전환 가능
현대 기술 지원
-
다중 모니터, 서로 다른 주사율, VRR, HDR 등 최신 디스플레이 기술 지원
- 단일 프레임버퍼 대신 각 디스플레이별 독립 처리
그래픽 처리 개선
-
기본적으로 티어링 없는 렌더링과 내장 컴포지터 제공
- 외부 컴포지터(picom 등) 실행 시 자동 비활성화
- 전체화면 앱이 vsync를 끄면 해당 앱에 맞춰 조정
-
vsync 및 컴포지터 지연 시간 감소 목표
새로운 표준
-
모니터별 DPI 속성(randr property) 정의 및 문서화
- 애플리케이션이 모니터별 DPI에 맞춰 콘텐츠 스케일링 가능
X11 프로토콜 확장
-
HDR 등 새로운 기능 필요 시 X11 프로토콜 확장 예정
Wayland 호환성
- 일부 앱이 Wayland 전용일 가능성을 고려
- Phoenix가 Wayland를 직접 지원하거나, Wayland–X11 브리지(예: 12to11) 를 통해 실행 가능
중첩 디스플레이 서버
-
X11 또는 Wayland 내에서 하드웨어 가속 중첩 실행 가능
- Phoenix 디버깅 및 윈도우 매니저·컴포지터 테스트에 유용
- Wayland 환경에서 Xwayland 대안 서버로 활용 가능
비목표 (Non-goals)
-
Xorg 서버 완전 대체는 목표 아님
- Xorg는 더 많은 X11 기능과 구형 하드웨어 지원 유지
-
여러 X11 스크린은 지원하지 않음 (다중 모니터만 지원)
-
GrabServer 호출은 무효
-
엔디안 스왑 클라이언트/서버는 필요 시 재검토
-
간접 GLX(원격 렌더링) 지원 없음
- 복잡성이 높으며, 원격 스트리밍이 더 효율적
- 필요 시 GLX 프록시를 통한 원격 렌더링 가능
X11 프로토콜과의 차이
-
폰트 관련 기능 등 X11 핵심 프로토콜 일부 미구현
- 문자열 인코딩은 기본적으로 UTF-8 사용
- 단, 프로토콜에서 ISO Latin-1로 명시된 경우 예외
설치 및 빌드
- 설치 명령:
zig build -Doptimize=ReleaseSafe
sudo zig build install -p /usr/local -Doptimize=ReleaseSafe
- 제거는 수동으로 /usr/local/bin/phoenix 삭제 필요
- 개발용 빌드:
zig build
- 결과 바이너리: ./zig-out/bin/phoenix
- 실행과 빌드를 동시에 수행 가능: zig build run
X11 프로토콜 문서 생성
- 명령: zig build -Dgenerate-docs=true
- 결과: ./zig-out/protocol/ 내 .txt 파일 생성
- 공식 문서 스타일의 자동 생성 문서이며, 현재 진행 중 기능
의존성
-
Zig 0.14.1
-
x11 (xcb) — X11 중첩 모드용 (-Dbackends=x11)
-
wayland (wayland-client, wayland-egl) — Wayland 중첩 모드용 (-Dbackends=wayland, 현재 미지원)
-
drm (libdrm, gbm) — 독립 실행용 (-Dbackends=drm, 현재 미지원)
-
OpenGL (libglvnd) — gl 및 egl 제공