Phoenix - server X modern yang ditulis ulang sepenuhnya dari nol dengan Zig
(git.dec05eba.com)- 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
- Melalui opsi build Zig
- 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
- Perintah instalasi:
zig build -Doptimize=ReleaseSafe sudo zig build install -p /usr/local -Doptimize=ReleaseSafe - Penghapusan harus dilakukan manual dengan menghapus
/usr/local/bin/phoenix - Build untuk pengembangan:
zig build- Biner hasil:
./zig-out/bin/phoenix - Dapat menjalankan dan melakukan build sekaligus:
zig build run
- Biner hasil:
Pembuatan dokumentasi protokol X11
- Perintah:
zig build -Dgenerate-docs=true- Hasil: file
.txtdibuat di dalam./zig-out/protocol/ - Ini adalah dokumentasi yang dibuat otomatis dengan gaya dokumen resmi, dan fitur ini masih dalam pengembangan
- Hasil: file
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
gldanegl
1 komentar
Komentar Hacker News
Pendekatan untuk membangun ulang server X dengan gaya Wayland ini menarik
Server tampilan dan compositor pada dasarnya disatukan, aplikasi diisolasi secara default, fitur remote GLX dihapus, dan protokol lama dibuang dengan berani, yang semuanya terasa mengesankan
Saya tidak tahu siapa yang benar-benar membutuhkan ini, tetapi pilihan tersebut sendiri tampak cukup masuk akal
Jadi saya tidak paham apa bedanya. Mungkin analisis saya belum lengkap
Apalagi kalau aplikasi Wayland juga bisa dijalankan, pengguna yang memilihnya mungkin justru akan lebih banyak
Nama Phoenix dipakai terlalu sering
Ada Phoenix di framework Elixir, dan saya ingat pernah melihatnya berkali-kali di proyek lain
Ini nama umum seperti ‘Apollo’, jadi menurut saya orang sebaiknya melakukan pencarian dulu sebelum membuat proyek baru
Di sana ada banyak nama unik seperti bandit, cowboy, thousand island, ranch, mint, finch
Duplikasi nama seperti ExThing, ThingEx, Thingx juga umum, jadi sulit menebak mana yang standar
Saya juga ingat pada 1980-an perangkat lunak baru sering diberi nama dengan cara seperti itu
wxPython juga punya proyek bernama Phoenix. Namanya keren, tetapi terlalu umum
Proyek ini benar-benar keren
Saya suka Wayland, tetapi protokol portal dan mekanisme ekstensi masih terasa kurang memuaskan
Dibandingkan Windows atau macOS, masih ada kekurangan dari sisi produktivitas
Menulis ulang X11 dengan keamanan bawaan terdengar seperti pendekatan yang menjanjikan
Ini tampak seperti proyek yang berguna, dan saya berharap proyek ini berkembang
Pada awal 2000-an, instalasinya saja sulit, dan bagi pengguna biasa hampir mustahil memasangnya sendiri
Distro Linux jauh lebih mudah dipasang, dan alasan orang membeli PC baru saat Windows melambat juga karena itu
Di kantor pun saya bekerja tanpa masalah dengan GNOME + Wayland
Senang melihat proyek pelestarian X seperti ini
Saya lebih suka Wayland, tetapi saya tetap merasa masih ada area yang membutuhkan X
Tim pengembang baru juga perlu ikut menanggung bebannya
X11 sekarang sebaiknya benar-benar ditinggalkan, lalu fokus pada satu server tampilan saja
Saya tidak tahu seberapa baik proyek ini akan berjalan, tetapi
di tengah arus penyeragaman yang berpusat pada korporasi (misalnya Wayland, GNOME, KDE dengan pengembang berbayar),
saya rasa makin banyak proyek pesaing adalah hal yang baik
Saya juga penasaran berapa banyak dana yang dibutuhkan untuk memodernkan Xorg
Wayland muncul pada 2008, tetapi bahkan setelah hampir 20 tahun, masih belum memenuhi semua kebutuhan pengguna
Keterbatasannya terlihat jelas karena diarahkan pada spesifikasi sempit yang diinginkan perusahaan
Pengembang aplikasi dapat menentukan mode rilis dalam skrip build dengan bentuk seperti
zig build --releasePengguna juga bisa langsung memberikan
--releasesendiriPenulis Phoenix tampaknya memilih mode ReleaseSafe sebagai rilis resmi
Sebagai catatan, Phoenix juga merupakan nama kampung halaman saya
gpu-screen-recorder buatan penulis yang sama adalah
perekam layar terbaik yang pernah saya coba di Wayland
Perekaman 4K 60fps langsung berjalan tanpa pengaturan khusus
Saya penasaran apakah aplikasi X11 lama seperti xterm, emacs, xfig, ghostview bisa berjalan
kemungkinan besar tidak akan berjalan dengan benar, tetapi implementasinya sendiri sederhana
Dukungan multi-screen disebut sebagai non-tujuan,
jadi saya penasaran apakah ini berarti tidak bisa dipakai di window manager yang mendukung desktop virtual (seperti i3)
penggunaan multi-monitor atau desktop virtual tetap tidak bermasalah
Menarik bahwa proyek ini tidak menggunakan spesifikasi protokol XML untuk menghasilkan kode seperti Xorg