- Phoenix es un nuevo servidor X escrito desde cero en el lenguaje Zig, sin bifurcar Xorg, y busca ser una alternativa moderna
- Por ahora puede ejecutar de forma anidada dentro de un servidor X existente aplicaciones simples que usan gráficos GLX, EGL y Vulkan; todavía no admite ejecución independiente
- Para mantener la simplicidad, solo soporta aplicaciones escritas en los últimos 20 años y hardware de los últimos 15 años, y funciona sin una interfaz de controladores del servidor
- Refuerza la seguridad con análisis automático de mensajes del protocolo, y restringe el acceso entre aplicaciones mediante una estructura de aislamiento basada en solicitudes de permisos
- Soporta tecnologías modernas como HDR, VRR, múltiples monitores y compositor integrado, y también planea compatibilidad con Wayland y extensiones del protocolo X11
Resumen de Phoenix
- Phoenix es un servidor X moderno para reemplazar al servidor Xorg, una implementación completamente reescrita desde cero en Zig
- No es un fork de Xorg y apunta a una arquitectura más simple y segura
- Actualmente todavía no está listo para un uso completo y solo soporta ejecución anidada (nested mode) dentro de un servidor X existente
- Puede realizar renderizado acelerado por hardware basado en GLX, EGL y Vulkan
Objetivos
Simplicidad
- Busca ser un servidor más simple que Xorg, por lo que solo soporta parte del protocolo X11
- Incluye únicamente las funciones necesarias para aplicaciones escritas en los últimos 20 años
- Está dirigido solo a hardware de los últimos 15 años compatible con Linux DRM y Mesa GBM
- No usa una interfaz de controladores del servidor separada como Xorg
- Tiene una estructura similar a la de un compositor Wayland
Seguridad
- Garantiza seguridad mediante el análisis automático de mensajes del protocolo
- Con la opción de compilación
ReleaseSafe de Zig, detecta automáticamente operaciones ilegales como desbordes de índices de arreglos
- De forma predeterminada, las aplicaciones se ejecutan aisladas entre sí
- La interacción con otras apps solo es posible mediante una solicitud de permisos por GUI o autorización previa
- Ejemplo: una app de grabación de pantalla solo puede grabar la ventana especificada
- Cuando el acceso está restringido, el cliente recibe datos ficticios en lugar de un error
- Los atajos globales funcionan cuando incluyen teclas modificadoras (ctrl, shift, etc.)
- Usar atajos globales sin teclas modificadoras requiere permisos explícitos
- Mediante opciones, puede cambiarse al mismo comportamiento que Xorg
Soporte para tecnologías modernas
- Soporta tecnologías de pantalla modernas como múltiples monitores, distintas tasas de refresco, VRR y HDR
- En lugar de un único framebuffer, procesa cada pantalla de forma independiente
Mejoras en el procesamiento gráfico
- Ofrece renderizado sin tearing por defecto y un compositor integrado
- Si se ejecuta un compositor externo (como picom), se desactiva automáticamente
- Si una app a pantalla completa desactiva vsync, se ajusta en función de esa app
- Busca reducir la latencia de vsync y del compositor
Nuevos estándares
- Define y documenta una propiedad DPI por monitor (randr property)
- Las aplicaciones pueden escalar el contenido según el DPI de cada monitor
Extensiones del protocolo X11
- Si hacen falta nuevas funciones como HDR, se planean extensiones del protocolo X11
Compatibilidad con Wayland
- Considera la posibilidad de que algunas apps sean exclusivas de Wayland
- Phoenix podría soportar Wayland directamente o ejecutarlas mediante un puente Wayland–X11 (por ejemplo, 12to11)
Servidor de pantalla anidado
- Permite ejecución anidada acelerada por hardware dentro de X11 o Wayland
- Es útil para depurar Phoenix y probar gestores de ventanas y compositores
- En entornos Wayland, puede usarse como servidor alternativo a Xwayland
No objetivos (Non-goals)
- Reemplazar completamente al servidor Xorg no es un objetivo
- Xorg seguirá manteniendo más funciones de X11 y soporte para hardware antiguo
- No soporta múltiples pantallas X11 (solo múltiples monitores)
- Las llamadas a GrabServer no tienen efecto
- Los clientes/servidores con intercambio de endianess se reconsiderarán si es necesario
- No hay soporte para GLX indirecto (renderizado remoto)
- Su complejidad es alta y el streaming remoto es más eficiente
- Si hace falta, el renderizado remoto podría hacerse mediante un proxy GLX
Diferencias con el protocolo X11
- No implementa parte del protocolo central de X11, incluidas funciones relacionadas con fuentes
- La codificación de cadenas usa UTF-8 por defecto
- Sin embargo, hay excepciones cuando el protocolo especifica ISO Latin-1
Instalación y compilación
Generación de documentación del protocolo X11
- Comando:
zig build -Dgenerate-docs=true
- Resultado: se generan archivos
.txt dentro de ./zig-out/protocol/
- Es documentación generada automáticamente con estilo de documentación oficial y una función todavía en desarrollo
Dependencias
- Zig 0.14.1
- x11 (xcb) — para modo anidado en X11 (
-Dbackends=x11)
- wayland (wayland-client, wayland-egl) — para modo anidado en Wayland (
-Dbackends=wayland, actualmente no soportado)
- drm (libdrm, gbm) — para ejecución independiente (
-Dbackends=drm, actualmente no soportado)
- OpenGL (libglvnd) — proporciona
gl y egl
1 comentarios
Comentarios en Hacker News
Es interesante el enfoque de reestructurar el servidor X al estilo Wayland
Integra por defecto el servidor de pantalla y el compositor, aísla las apps de forma predeterminada, elimina las funciones remotas de GLX y descarta sin miedo protocolos obsoletos; eso resulta llamativo
No sé quién necesitaría esto, pero la decisión en sí parece bastante razonable
Entonces no entiendo cuál sería la diferencia. Quizá mi análisis fue incompleto
Además, si también ejecuta apps de Wayland, de hecho podría atraer a todavía más usuarios
El nombre Phoenix se usa demasiado
También está Phoenix en el framework de Elixir, y recuerdo haberlo visto varias veces en otros proyectos
Es un nombre tan común como "Apollo", así que creo que al crear un proyecto nuevo primero hay que buscar
Ahí hay muchos nombres distintivos como bandit, cowboy, thousand island, ranch, mint y finch
También son comunes los nombres duplicados como ExThing, ThingEx y Thingx, así que cuesta saber cuál es el estándar
Recuerdo que en los años 80 también se nombraba software nuevo de esa manera
En wxPython también existe un proyecto Phoenix. Suena bien, pero es un nombre demasiado común
Este proyecto está realmente genial
Me gusta Wayland, pero los protocolos de portal y el mecanismo de extensiones todavía me dejan insatisfecho
En productividad hay aspectos donde se queda corto frente a Windows o macOS
Una reescritura de X11 con seguridad incorporada suena como un enfoque prometedor
Parece un proyecto útil, y ojalá avance
A principios de los 2000 incluso instalarlos era difícil, y para un usuario común hacerlo por su cuenta era casi imposible
Las distribuciones de Linux eran mucho más fáciles de instalar, y si Windows se volvía lento esa era la razón por la que uno terminaba comprando otra PC
En el trabajo también uso GNOME + Wayland sin problemas
Da gusto ver un proyecto de preservación de X de este tipo
Prefiero Wayland, pero sigo pensando que todavía hay áreas donde X hace falta
Un nuevo equipo de desarrollo debería repartir la carga
X11 ya debería enterrarse por completo y habría que concentrarse en un solo servidor de pantalla
No sé qué tan bien vaya a funcionar este proyecto,
pero me parece bueno que haya más proyectos competidores frente a la tendencia a la unificación centrada en las empresas (por ejemplo, Wayland, GNOME y los desarrolladores pagados de KDE)
También me pregunto cuánto financiamiento haría falta para modernizar Xorg
Wayland apareció en 2008, pero incluso después de casi 20 años no ha logrado cubrir todas las necesidades de los usuarios
Al intentar ajustarse a una especificación estrecha de lo que quieren las empresas, sus límites son evidentes
Los desarrolladores de aplicaciones pueden especificar el modo de lanzamiento en el script de compilación con algo como
zig build --releaseEl usuario también puede pasar
--releasedirectamenteParece que el autor de Phoenix eligió oficialmente el modo ReleaseSafe para los lanzamientos
Por cierto, Phoenix también es el nombre de mi ciudad natal
gpu-screen-recorder, del mismo autor, es el mejor grabador de pantalla que he usado en Wayland
Incluso grabar en 4K 60fps funcionó de inmediato sin tener que configurar nada
Me pregunto si funcionan apps X11 antiguas como xterm, emacs, xfig y ghostview
Dice que el soporte mult pantalla no es un objetivo,
así que me pregunto si entonces no se podría usar con administradores de ventanas que soportan escritorios virtuales (como i3)
no hay problema para usar varios monitores o escritorios virtuales
Es interesante que, a diferencia de Xorg, no use especificaciones de protocolo XML para generar código