2 điểm bởi GN⁺ 2025-12-25 | 1 bình luận | Chia sẻ qua WhatsApp
  • 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ìnhcompositor 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

  • Lệnh cài đặt:
    zig build -Doptimize=ReleaseSafe
    sudo zig build install -p /usr/local -Doptimize=ReleaseSafe
    
  • Gỡ bỏ cần xóa thủ công /usr/local/bin/phoenix
  • Build cho phát triển:
    zig build
    
    • Binary kết quả: ./zig-out/bin/phoenix
    • Có thể chạy và build cùng lúc: zig build run

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 glegl

1 bình luận

 
GN⁺ 2025-12-25
Ý 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ới những người nhất định phải dùng X11, nó có vẻ là lựa chọn tốt hơn XLibre
    • Tôi chưa trực tiếp dùng thử, nhưng nếu đã loại bỏ các tính năng cũ thì rốt cuộc có lẽ sẽ rơi vào tình huống giống Wayland
      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 đủ
    • Nếu cái này ra đời sớm hơn thì có lẽ nhiều người đã thích nó hơn Wayland
      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

    • Phoenix trong hệ sinh thái Elixir thực ra còn là trường hợp ít gây nhầm lẫn hơn
      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ừ xưa người ta đã hay dùng Phoenix như biểu tượng của một dự án hồi sinh từ tro tà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
    • Firefox trước đây cũng từng định dùng tên Phoenix nhưng đã bị kiện vì vấn đề thương hiệu
      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

    • Tôi đã nghĩ từ lâu rằng làm một phiên bản X được dọn dẹp gọn gàng sẽ tốt hơn Wayland
      Trông có vẻ là một dự án hữu ích, hy vọng nó phát triển tốt
    • Bạn nói Wayland còn thiếu về mặt năng suất, tôi tò mò cụ thể là thiếu những gì
    • Tôi lại nghĩ Windows hay macOS thậm chí còn không làm tốt cả quản lý cửa sổ
      Đầ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ế
    • Ngược lại, tôi không hề thấy Wayland thiếu về năng suất
      Ở 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

    • Nhưng tôi nghĩ lựa chọn như vậy sẽ gây ra phân mảnh
      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 --release
    Người dùng cũng có thể tự truyền --release
    Có 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

    • Phần lớn các chương trình X11 cũ phụ thuộc vào API vẽ của X11
      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

    • Trong X11, “screen” mang một ý nghĩa cụ thể, nên dù chỉ hỗ trợ một screen
      thì việc dùng nhiều màn hình hay desktop ảo cũng không thành vấn đề
    • Kiến trúc này cho phép thêm các tính năng đa màn hình liền mạch như Xinerama một cách dễ dàng về sau
  • Thật thú vị khi nó không dùng XML protocol spec để sinh mã như Xorg