- Phoenix adalah server X baru yang ditulis sepenuhnya dari nol dengan bahasa Zig tanpa melakukan fork dari Xorg yang ada, dengan tujuan menjadi alternatif modern
- Saat ini, Phoenix dapat menjalankan aplikasi sederhana yang menggunakan grafis GLX, EGL, dan Vulkan secara nested di dalam server X yang sudah ada, dan belum mendukung mode standalone
- Demi kesederhanaan, Phoenix hanya mendukung aplikasi yang ditulis dalam 20 tahun terakhir dan perangkat keras dalam 15 tahun terakhir, serta bekerja tanpa antarmuka driver server
- Untuk meningkatkan keamanan, pesan protokol diparsing secara otomatis, dan akses antar aplikasi dibatasi dengan struktur isolasi berbasis permintaan izin
- Mendukung teknologi modern seperti HDR, VRR, multi-monitor, dan compositor bawaan, serta merencanakan kompatibilitas Wayland dan perluasan protokol X11
Gambaran umum Phoenix
- Phoenix adalah server X modern untuk menggantikan server Xorg, sebuah implementasi yang sepenuhnya ditulis ulang dengan bahasa Zig
- Bukan fork dari Xorg, dan mengarah pada struktur yang lebih sederhana dan aman
- Saat ini belum sepenuhnya siap dipakai, dan hanya mendukung mode nested di dalam server X yang sudah ada
- Dapat melakukan rendering berakselerasi perangkat keras berbasis GLX, EGL, dan Vulkan
Tujuan
Kesederhanaan
- Server ini dibuat lebih sederhana daripada Xorg, dengan hanya mendukung sebagian dari protokol X11
- Hanya mencakup fitur yang dibutuhkan aplikasi yang ditulis dalam 20 tahun terakhir
- Menargetkan hanya perangkat keras dalam 15 tahun terakhir yang mendukung Linux DRM dan Mesa GBM
- Tidak menggunakan antarmuka driver server terpisah seperti Xorg
- Strukturnya mirip dengan compositor Wayland
Keamanan
- Menjamin keamanan melalui parsing otomatis pesan protokol
- Melalui opsi build Zig
ReleaseSafe, perilaku ilegal seperti indeks array yang melewati batas dapat dideteksi otomatis
- Secara default aplikasi dijalankan dalam isolasi antar aplikasi
- Interaksi dengan aplikasi lain hanya dimungkinkan melalui permintaan izin GUI atau izin yang telah diberikan sebelumnya
- Contoh: aplikasi perekam layar hanya dapat merekam jendela yang ditentukan
- Saat akses dibatasi, klien menerima data dummy alih-alih error
- Shortcut global berfungsi bila menyertakan tombol modifier seperti ctrl, shift, dan lainnya
- Jika ingin memakai shortcut global tanpa modifier, diperlukan izin eksplisit
- Melalui opsi tertentu, perilakunya dapat diubah agar sama seperti Xorg
Dukungan teknologi modern
- Mendukung teknologi display modern seperti multi-monitor, refresh rate yang berbeda, VRR, dan HDR
- Alih-alih satu framebuffer tunggal, tiap display diproses secara independen
Peningkatan pemrosesan grafis
- Secara default menyediakan rendering tanpa tearing dan compositor bawaan
- Akan dinonaktifkan otomatis bila menjalankan compositor eksternal (seperti picom)
- Jika aplikasi fullscreen mematikan vsync, perilaku akan disesuaikan untuk aplikasi tersebut
- Menargetkan pengurangan latensi vsync dan compositor
Standar baru
- Mendefinisikan dan mendokumentasikan properti DPI per monitor (randr property)
- Aplikasi dapat melakukan penskalaan konten sesuai DPI tiap monitor
Ekstensi protokol X11
- Jika diperlukan fitur baru seperti HDR, Phoenix berencana menambahkan ekstensi protokol X11
Kompatibilitas Wayland
- Mempertimbangkan kemungkinan adanya aplikasi yang hanya mendukung Wayland
- Phoenix dapat mendukung Wayland secara langsung, atau dijalankan melalui bridge Wayland–X11 (misalnya 12to11)
Server display nested
- Dapat berjalan secara nested dengan akselerasi perangkat keras di dalam X11 atau Wayland
- Berguna untuk debugging Phoenix serta pengujian window manager dan compositor
- Di lingkungan Wayland, dapat dimanfaatkan sebagai server alternatif untuk Xwayland
Bukan tujuan (Non-goals)
- Bukan bertujuan menjadi pengganti total server Xorg
- Xorg tetap mempertahankan lebih banyak fitur X11 dan dukungan perangkat keras lawas
- Beberapa screen X11 tidak didukung (hanya multi-monitor yang didukung)
- Pemanggilan GrabServer tidak berlaku
- Klien/server endian-swap akan ditinjau ulang bila diperlukan
- Tidak mendukung GLX tidak langsung (rendering jarak jauh)
- Kompleksitasnya tinggi, dan streaming jarak jauh lebih efisien
- Jika perlu, rendering jarak jauh dimungkinkan melalui proxy GLX
Perbedaan dengan protokol X11
- Sebagian protokol inti X11, seperti fitur terkait font, belum diimplementasikan
- Encoding string secara default menggunakan UTF-8
- Namun ada pengecualian jika protokol secara eksplisit menetapkan ISO Latin-1
Instalasi dan build
Pembuatan dokumentasi protokol X11
- Perintah:
zig build -Dgenerate-docs=true
- Hasil: file
.txt dibuat di dalam ./zig-out/protocol/
- Ini adalah dokumentasi yang dibuat otomatis dengan gaya dokumen resmi, dan fitur ini masih dalam pengembangan
Dependensi
- Zig 0.14.1
- x11 (xcb) — untuk mode nested X11 (
-Dbackends=x11)
- wayland (wayland-client, wayland-egl) — untuk mode nested Wayland (
-Dbackends=wayland, saat ini belum didukung)
- drm (libdrm, gbm) — untuk mode standalone (
-Dbackends=drm, saat ini belum didukung)
- OpenGL (libglvnd) — menyediakan
gl dan egl
Belum ada komentar.