- En el entorno Wayland tradicional, el compositor y el gestor de ventanas estaban combinados en un solo programa, pero river 0.4.0 los separa en procesos distintos
- El nuevo protocolo river-window-management-v1 otorga al gestor de ventanas control total sobre políticas como la disposición de ventanas y los atajos de teclado, mientras mantiene la perfección de fotograma (frame perfection) y el rendimiento
- Esta estructura funciona sin latencia de entrada (latency) y garantiza un renderizado limpio incluso en diseños en mosaico complejos mediante actualizaciones de estado atómicas
- Gracias a esta separación, el gestor de ventanas puede desarrollarse y reiniciarse de forma independiente, y también es más fácil implementarlo en lenguajes de alto nivel
- Este enfoque impulsa una mayor diversidad de gestores de ventanas en el ecosistema Wayland, y river ya admite más de 15 gestores compatibles
La estructura tradicional de Wayland y el enfoque desacoplado de river
- Los compositores Wayland tradicionales integraban en un solo proceso tres funciones: servidor de pantalla, compositor y gestor de ventanas
- El servidor de pantalla enruta los eventos de entrada y entrega los búferes de visualización al kernel
- El compositor combina los búferes de varias ventanas para generar la imagen final en pantalla
- El gestor de ventanas se encarga de las políticas de usuario, como la disposición de ventanas y los atajos de teclado
- En la arquitectura X11, el servidor de pantalla existe como proceso separado, lo que provoca comunicación de ida y vuelta innecesaria y latencia
- Wayland resolvió esto al integrar el servidor y el compositor, pero no era indispensable acoplar también el gestor de ventanas
- river deshace esa unión y separa el gestor de ventanas como un programa independiente
Principios de diseño del protocolo river-window-management-v1
- Está diseñado para que el gestor de ventanas tenga el máximo control posible sin perder las ventajas de Wayland
- No requiere comunicación de ida y vuelta en cada fotograma ni en cada evento de entrada, por lo que no hay latencia de entrada
- Mantiene la perfección de fotograma (frame perfection): cuando se abre una ventana nueva o cambia de tamaño, garantiza actualizaciones de pantalla sin huecos ni superposiciones
- El renderizado se retrasa hasta que todas las ventanas envían sus nuevos búferes, pero si se supera cierto tiempo, se maneja con un timeout
- Cuanto mejor esté implementada una aplicación, más posible será lograr una sincronización de fotogramas completamente perfecta
Estructura de gestión de ventanas basada en máquina de estados
- El protocolo divide el estado en estado de gestión de ventanas y estado de renderizado
- Estado de gestión de ventanas: tamaño de ventana, modo de pantalla completa, foco del teclado, atajos de teclado, etc.
- Estado de renderizado: posición de ventana, orden, decoraciones, recorte, etc.
- Los cambios se procesan agrupados como actualizaciones atómicas (manage/render sequence)
- El compositor inicia la secuencia, y cuando no hay cambios de estado, el gestor de ventanas permanece en espera
- Esta estructura formaliza de manera explícita conceptos que ya estaban implícitos en river-classic, sway y otros
Ventajas de la arquitectura desacoplada
- Los desarrolladores de gestores de ventanas pueden concentrarse solo en las políticas sin tener que implementar el compositor completo
- Es más fácil depurar y reiniciar, y un fallo del gestor de ventanas no provoca el cierre de la sesión
- Incluso si se escribe en lenguajes con recolección de basura, no hay degradación de rendimiento y funciona sin retraso de fotogramas
- Ya existen más de 15 gestores de ventanas compatibles con river, y se espera una expansión en diversidad al nivel de X11
Limitaciones y planes futuros
- Actualmente el protocolo solo admite entornos de escritorio 2D; no soporta VR ni casos similares
- Los efectos visuales complejos (por ejemplo, ventanas que se tambalean) quedan fuera de su alcance, aunque sí permite animaciones simples
- En el futuro se está evaluando soporte para shaders personalizados, aunque no es un plan a corto plazo
- river 0.4.0 ya es suficientemente usable en el día a día, y se prevén mejoras de UX antes del paso a la versión 1.0.0
- Para sostener el desarrollo, se solicitan aportes a través de liberapay, GitHub Sponsors y Ko-fi
Ejemplos y galería
- Se ofrecen ejemplos de varios gestores de ventanas que funcionan sobre river
- Canoe: gestor de ventanas apilado clásico
- reka: gestor de ventanas basado en Emacs
- tarazed: entorno de escritorio centrado en el enfoque
- rhine: gestión de ventanas recursiva y modular con soporte para animaciones
- Además de estos, existen muchos otros gestores de ventanas compatibles con river
1 comentarios
Comentarios en Hacker News
Me cuesta entender las quejas sobre Wayland (el protocolo) en los comentarios
Bibliotecas como wlroots ya se encargaron de las partes pesadas, y ahora river ofrece una abstracción de más alto nivel
El proyecto Wayland quizá pudo haber ofrecido este tipo de abstracciones antes, pero creo que era algo que cualquiera podía hacer
Al final, estamos obteniendo estos avances gratis, así que no veo por qué quejarse de que otro no lo haga por nosotros
Los temas de accesibilidad también se consideraron riesgos de seguridad, lo que complicó el diseño, y ahora que entramos en la era de la IA agéntica, esto podría volverse un punto interesante
Pipewire ha ido cubriendo lo que Wayland dejó pendiente, pero sigue existiendo la percepción de que falta un diseño amigable para el usuario
Aun así, creo que Wayland va dos pasos hacia adelante en el panorama general, aunque a veces dé uno o dos hacia atrás
Hay muchas respuestas del tipo “a mi manera o vete”, y poca flexibilidad ante solicitudes externas
Está bien que se ofrezca gratis, pero con Xorg descontinuado y sin alternativas reales, me parece problemático imponerlo así
Este proyecto es la primera vez que me hace sentir que Wayland no es una pérdida de tiempo
No creo que un servidor de pantalla necesite complicarse también con la gestión de ventanas
Supongo que la razón original por la que Wayland unió el administrador de ventanas y el compositor fue simplemente que era el camino de menor resistencia
Aun así, el acceso remoto sigue siendo un problema. Cosas que funcionaban bien en X11 en Wayland han estado llenas de bugs
Wayland resolvió eso integrándolo, pero aparecieron otros efectos secundarios
Los límites de API están bien definidos, así que es fácil compartir código
Me pregunto si el bug de rotación de 90 grados es problema del compositor o de wlroots
Creo que recién ahora se está empezando a corregir uno de los varios defectos de diseño de Wayland
Probablemente harán falta otros 15 años para que los protocolos comunes se asienten y los administradores de ventanas maduren al nivel de X11
Y al final, seguramente alguien volverá a decir que “va a hacer algo mejor”, descartará Wayland y empezará de cero
Después de sufrir con problemas de UEFI, terminé cambiándome a Samsung DEX
Creo que el límite no es técnico sino más bien político
Como usuario de Linux desde hace 25 años, estoy satisfecho desde que me cambié a Wayland hace 5 años, sin problemas de screen tearing
Para los desarrolladores habrá más trabajo, pero como usuario es una mejora clara
Me pregunto si voy a terminar hablando siempre de esto, como la gente que añoraba funciones del viejo CDE
River ya era excelente incluso antes de esta separación. Tengo muchas ganas de ver cómo evoluciona
Me pasé un tiempo a Niri, pero pienso volver algún día
Si eres usuario de Xmonad, creo que River es lo que mejor te va a encajar
Me pregunto si en River las ventanas nuevas se insertan encima de la ventana actualmente seleccionada
También me gustaría saber cómo se llamará el proyecto del lado del administrador de ventanas después de la separación
Al final, lo que estamos haciendo es reinventar una por una las funciones de X11
Tal vez algún día una ventana de Wayland llegue a saber dónde está ubicada
Supongo que todavía habrá que esperar bastante
El escritorio probablemente quedará para Android, ChromeOS o máquinas virtuales sobre Windows/macOS
Yo uso un administrador de ventanas River totalmente personalizado
En Hyprland, por defecto solo podía usar mosaico BSP y eso me resultaba incómodo, pero en River puedo hacer el mosaico uniforme exactamente como quiero
Esta separación cambió mucho mi flujo de trabajo
Yo también fui usuario de i3, y gracias a hy3 pude usar Hyprland
Tengo mi configuración ordenada en dotfiles
Según entiendo, uno de los diseños centrales de Wayland era integrar el administrador de ventanas y el compositor
Me da curiosidad por qué se diseñó así
Wayland lo procesó de forma síncrona para eliminar las inconsistencias visuales
Este protocolo parece ser un intento de separar el servidor gráfico y el administrador de ventanas manteniendo esa ventaja de rendimiento
Creo que, comparado con X11, la mayor pérdida de Wayland es no poder reemplazar fácilmente el administrador de ventanas enchufable
La gente que intenta resolver este problema de verdad es muy valiosa
Ojalá capas como River o Wayback puedan cumplir ese papel
Yo también tengo ideas experimentales para escritorio, pero no me queda otra que empezar en X11, donde se puede iterar rápido
Wayland sigue teniendo debilidades de diseño
No hace falta que el estándar imponga una estructura específica
Llevo 15 años usando i3, y cada vez que aparece un proyecto así me pregunto para qué hace falta Wayland
X11 tendrá defectos, pero se puede hacer casi todo lo que uno quiera
Wayland siempre parece traer mucha fricción
Como usuario de laptop, ha sido una gran ventaja, y el soporte para VRR o HDR también es muchísimo más fácil que en X.org
El ajuste de DPI por pantalla, la prevención del screen tearing y el bloqueo de grabación de pantalla no autorizada por parte de apps vienen resueltos de base
Ya no tengo que tocar Xorg.conf y eso mejoró mi calidad de vida
Incluso ahora sigo usando distintos factores de escala según el monitor
Necesito una función donde una ventana pueda recibir entrada aunque esté inactiva, y solo el movimiento del mouse funciona como excepción
Al final lo cambié a Window Event, pero sigue siendo incómodo