- Phoenix là một máy chủ X mới được viết lại hoàn toàn từ đầu bằng ngôn ngữ Zig, không fork từ Xorg hiện có, hướng tới một lựa chọn thay thế hiện đại
- Hiện tại, nó có thể chạy lồng bên trong máy chủ X hiện có các ứng dụng đơn giản sử dụng đồ họa GLX, EGL, Vulkan; chưa hỗ trợ chạy độc lập
- Để đảm bảo tính đơn giản, chỉ hỗ trợ các ứng dụng được viết trong vòng 20 năm gần đây và phần cứng trong vòng 15 năm gần đây, đồng thời hoạt động không cần giao diện trình điều khiển máy chủ
- Tăng cường bảo mật bằng cách tự động phân tích cú pháp thông điệp giao thức, và giới hạn truy cập giữa các ứng dụng bằng cấu trúc cô lập dựa trên yêu cầu cấp quyền
- Hỗ trợ các công nghệ hiện đại như HDR, VRR, đa màn hình, compositor tích hợp, đồng thời có kế hoạch mở rộng giao thức X11 và tương thích Wayland
Tổng quan về Phoenix
- Phoenix là một máy chủ X hiện đại nhằm thay thế máy chủ Xorg, là một bản hiện thực được viết mới hoàn toàn bằng ngôn ngữ Zig
- Không phải là bản fork của Xorg, và hướng tới cấu trúc đơn giản và an toàn hơn
- Hiện chưa ở giai đoạn có thể sử dụng hoàn chỉnh, và chỉ hỗ trợ chạy lồng (nested mode) bên trong máy chủ X hiện có
- Có thể thực hiện kết xuất tăng tốc phần cứng dựa trên GLX, EGL và Vulkan
Mục tiêu
Tính đơn giản
- Là máy chủ đơn giản hơn Xorg, chỉ hỗ trợ một phần giao thức X11
- Chỉ bao gồm các tính năng cần thiết cho các ứng dụng được viết trong vòng 20 năm gần đây
- Chỉ nhắm tới phần cứng trong vòng 15 năm gần đây hỗ trợ Linux DRM và Mesa GBM
- Không sử dụng giao diện trình điều khiển máy chủ riêng như Xorg
- Có cấu trúc tương tự Wayland compositor
Bảo mật
- Đảm bảo an toàn bằng tự động phân tích cú pháp thông điệp giao thức
- Thông qua tùy chọn build
ReleaseSafe của Zig, có thể tự động phát hiện các hành vi không hợp lệ như vượt chỉ số mảng
- Mặc định chạy cô lập giữa các ứng dụng
- Tương tác với ứng dụng khác chỉ có thể thực hiện qua yêu cầu cấp quyền trên GUI hoặc quyền được cấp trước
- Ví dụ: ứng dụng ghi màn hình chỉ có thể ghi lại cửa sổ được chỉ định
- Khi bị hạn chế truy cập, client sẽ nhận dữ liệu giả thay vì lỗi
- Phím tắt toàn cục hoạt động khi có kèm phím bổ trợ (ctrl, shift, v.v.)
- Nếu dùng phím tắt toàn cục không có phím bổ trợ thì cần quyền rõ ràng
- Có thể chuyển sang cách hoạt động giống hệt Xorg thông qua tùy chọn
Hỗ trợ công nghệ hiện đại
- Hỗ trợ các công nghệ hiển thị mới nhất như đa màn hình, tần số quét khác nhau, VRR, HDR
- Xử lý độc lập theo từng màn hình thay vì dùng một framebuffer duy nhất
Cải thiện xử lý đồ họa
- Mặc định cung cấp kết xuất không xé hình và compositor tích hợp
- Tự động vô hiệu hóa khi chạy compositor bên ngoài (như picom)
- Nếu ứng dụng toàn màn hình tắt vsync thì sẽ điều chỉnh theo ứng dụng đó
- Mục tiêu là giảm độ trễ của vsync và compositor
Tiêu chuẩn mới
- Định nghĩa và tài liệu hóa thuộc tính DPI theo từng màn hình (randr property)
- Ứng dụng có thể scale nội dung theo DPI của từng màn hình
Mở rộng giao thức X11
- Dự kiến sẽ mở rộng giao thức X11 khi cần các tính năng mới như HDR
Tương thích Wayland
- Xem xét khả năng một số ứng dụng chỉ hỗ trợ Wayland
- Phoenix có thể hỗ trợ Wayland trực tiếp, hoặc chạy thông qua cầu nối Wayland–X11 (ví dụ: 12to11)
Máy chủ hiển thị chạy lồng
- Có thể chạy lồng có tăng tốc phần cứng bên trong X11 hoặc Wayland
- Hữu ích cho việc debug Phoenix và kiểm thử window manager·compositor
- Có thể được dùng như máy chủ thay thế cho Xwayland trong môi trường Wayland
Những điều không nhắm tới (Non-goals)
- Thay thế hoàn toàn máy chủ Xorg không phải là mục tiêu
- Xorg vẫn duy trì nhiều tính năng X11 hơn và hỗ trợ phần cứng cũ
- Không hỗ trợ nhiều màn hình X11 screen (chỉ hỗ trợ đa màn hình)
- Lời gọi GrabServer là vô hiệu
- Client/server đổi endian sẽ được xem xét lại nếu cần
- Không hỗ trợ GLX gián tiếp (kết xuất từ xa)
- Độ phức tạp cao, và streaming từ xa hiệu quả hơn
- Nếu cần, có thể kết xuất từ xa thông qua proxy GLX
Khác biệt với giao thức X11
- Chưa hiện thực một số phần của giao thức lõi X11, như các tính năng liên quan đến font
- Mặc định dùng UTF-8 cho mã hóa chuỗi
- Tuy nhiên, ngoại lệ khi giao thức chỉ định rõ là ISO Latin-1
Cài đặt và build
Tạo tài liệu giao thức X11
- Lệnh:
zig build -Dgenerate-docs=true
- Kết quả: tạo các file
.txt trong ./zig-out/protocol/
- Đây là tài liệu được tự động tạo theo phong cách tài liệu chính thức, và hiện vẫn đang được phát triển
Phụ thuộc
- Zig 0.14.1
- x11 (xcb) — cho chế độ lồng X11 (
-Dbackends=x11)
- wayland (wayland-client, wayland-egl) — cho chế độ lồng Wayland (
-Dbackends=wayland, hiện chưa được hỗ trợ)
- drm (libdrm, gbm) — cho chạy độc lập (
-Dbackends=drm, hiện chưa được hỗ trợ)
- OpenGL (libglvnd) — cung cấp
gl và egl
1 bình luận
Ý kiến trên Hacker News
Cách tiếp cận tái cấu trúc máy chủ X theo kiểu Wayland khá thú vị
Việc mặc định tích hợp display server và compositor, mặc định cô lập ứng dụng, loại bỏ khả năng từ xa của GLX, và mạnh dạn bỏ đi các giao thức cũ thực sự rất ấn tượng
Không rõ ai sẽ cần thứ này, nhưng bản thân lựa chọn đó trông khá hợp lý
Vậy thì tôi không rõ khác biệt là gì. Có lẽ phân tích của tôi chưa đầy đủ
Hơn nữa, nếu còn chạy được cả ứng dụng Wayland thì thực tế có thể sẽ có nhiều người dùng hơn nữa chọn nó
Cái tên Phoenix đang bị dùng quá nhiều
Có Phoenix trong framework Elixir, và tôi cũng nhớ đã thấy nó ở nhiều dự án khác
Nó phổ biến kiểu như “Apollo”, nên tôi nghĩ khi tạo dự án mới thì nên tìm kiếm trước
Bên đó có nhiều cái tên rất đặc trưng như bandit, cowboy, thousand island, ranch, mint, finch
Các kiểu trùng tên như ExThing, ThingEx, Thingx cũng rất phổ biến nên khó biết cái nào là tiêu chuẩn
Tôi nhớ từ thập niên 1980 đã có kiểu đặt tên phần mềm mới như vậy rồi
wxPython cũng có dự án Phoenix. Tên này hay nhưng quá phổ biến
Dự án này thực sự rất hay
Tôi thích Wayland, nhưng giao thức portal và cơ chế mở rộng của nó vẫn còn đáng tiếc
Về mặt năng suất làm việc, vẫn có những điểm thua Windows hay macOS
Một bản viết lại X11 có bảo mật tích hợp nghe thật đáng mong đợi
Trông có vẻ là một dự án hữu ích, hy vọng nó phát triển tốt
Đầu những năm 2000 thì ngay cả việc cài đặt cũng khó, với người dùng phổ thông gần như là bất khả thi nếu tự cài
Các bản phân phối Linux cài đặt dễ hơn nhiều, và việc Windows chậm dần rồi phải mua PC mới cũng là vì thế
Ở công ty tôi cũng đang làm việc với GNOME + Wayland mà không gặp vấn đề gì
Thật vui khi có kiểu dự án bảo tồn X như thế này
Tôi thích Wayland hơn, nhưng vẫn nghĩ vẫn còn những mảng cần đến X
Một đội ngũ phát triển mới nên chia sẻ bớt gánh nặng
X11 giờ nên được chôn hẳn, và cần tập trung vào một display server duy nhất
Tôi không biết dự án này sẽ hoạt động tốt đến đâu, nhưng
trước xu hướng thống nhất hóa xoay quanh doanh nghiệp (ví dụ: các lập trình viên được trả lương của Wayland, GNOME, KDE),
tôi nghĩ việc có thêm nhiều dự án cạnh tranh là điều tốt
Tôi cũng tò mò cần bao nhiêu tiền để hiện đại hóa Xorg
Wayland ra đời từ năm 2008, nhưng gần 20 năm trôi qua vẫn chưa đáp ứng hết các nhu cầu của người dùng
Việc cố bám theo những đặc tả hẹp mà doanh nghiệp muốn đã bộc lộ giới hạn rất rõ
Lập trình viên ứng dụng có thể chỉ định chế độ phát hành trong script build bằng dạng
zig build --releaseNgười dùng cũng có thể tự truyền
--releaseCó vẻ tác giả của Phoenix đã chọn chế độ ReleaseSafe làm bản phát hành chính thức
Nhân tiện, Phoenix cũng là tên quê hương của tôi
gpu-screen-recorder của cùng một tác giả là
trình ghi màn hình tốt nhất mà tôi từng dùng trên Wayland
Ghi 4K 60fps cũng chạy ngay mà không cần cấu hình gì đặc biệt
Tôi tò mò liệu các ứng dụng X11 cũ như xterm, emacs, xfig, ghostview có chạy được không
nên rất có thể sẽ không hoạt động đúng, nhưng bản thân việc triển khai thì đơn giản
Hỗ trợ đa màn hình được ghi là không nằm trong mục tiêu,
vậy thì tôi thắc mắc liệu có không dùng được với các window manager hỗ trợ desktop ảo (như i3) hay không
thì việc dùng nhiều màn hình hay desktop ảo cũng không thành vấn đề
Thật thú vị khi nó không dùng XML protocol spec để sinh mã như Xorg