La arquitectura tradicional de los compositores Wayland integra el servidor de display, el compositor y el gestor de ventanas en un único proceso. Si bien esto resolvió problemas de latencia y sincronización inherentes a la arquitectura de X11 (donde el servidor de display actuaba como intermediario redundante), ha impuesto una carga significativa a los desarrolladores de gestores de ventanas, quienes deben implementar un compositor completo.

El proyecto River aborda este problema fundamental de acoplamiento excesivo. Su versión 0.4.0, junto con el protocolo river-window-management-v1, propone una separación clara entre el compositor (River) y el gestor de ventanas. Esta iniciativa busca democratizar el desarrollo de gestores de ventanas para Wayland, permitiendo a los ingenieros enfocarse en la política de gestión de ventanas sin la complejidad de construir un compositor desde cero. La motivación es fomentar la diversidad de gestores de ventanas, similar a la que existía en X11, sin sacrificar las ventajas de rendimiento y 'frame perfection' de Wayland.

Arquitectura del Sistema

La arquitectura de River 0.4.0 se basa en dos componentes principales: el compositor River y un gestor de ventanas externo, que interactúan a través del protocolo river-window-management-v1. El compositor River se encarga de las funciones de bajo nivel: enrutamiento de eventos de entrada desde el kernel, composición de buffers de ventanas en un único buffer de salida, y la interacción directa con el kernel para la visualización (DRM/KMS). Esto incluye la gestión de la 'rendering state' (posición y orden de renderizado de ventanas, decoraciones del lado del servidor, recorte de ventanas).

El gestor de ventanas, por su parte, implementa la 'window management policy', controlando aspectos como el posicionamiento de ventanas, atajos de teclado y el estado de las ventanas (dimensiones, estado de pantalla completa, foco del teclado). El protocolo river-window-management-v1 es clave para esta separación, ya que permite al gestor de ventanas tener control total sobre la política sin requerir roundtrips por cada frame o evento de entrada. Las modificaciones de estado se agrupan en 'atomic updates' a través de 'manage sequences' (para el estado de gestión de ventanas) y 'render sequences' (para el estado de renderizado), iniciadas por el compositor. Esto asegura la 'frame perfection' al esperar que todas las ventanas envíen buffers con las nuevas dimensiones antes de renderizar el nuevo estado, con un timeout para evitar bloqueos. El gestor de ventanas permanece inactivo hasta que un evento relevante (ej. nuevo teclado, nueva ventana) lo despierte, minimizando la latencia.

Flujo de Actualización de Estado de Ventana en River

  1. 1 Usuario/Evento Usuario activa un atajo de teclado o se abre una nueva ventana.
  2. 2 Compositor River Detecta el evento y lo enruta, iniciando una 'manage sequence'.
  3. 3 Gestor de Ventanas Recibe el evento, calcula nuevas dimensiones/posiciones para las ventanas.
  4. 4 Gestor de Ventanas Envía 'atomic updates' de 'window management state' a River.
  5. 5 Compositor River Notifica a las ventanas afectadas sobre sus nuevas dimensiones.
  6. 6 Ventanas Renderizan nuevo contenido con las dimensiones solicitadas y envían buffers.
  7. 7 Compositor River Espera por todos los buffers (con timeout) y compone la escena final.
  8. 8 Kernel (DRM/KMS) Muestra el buffer compuesto en la pantalla, logrando 'frame perfection'.
CapaTecnologíaJustificación
orchestration Wayland Protocolo de servidor de display que define la comunicación entre el compositor y las aplicaciones cliente. Wayland busca eliminar la latencia y el tearing de X11. vs X11
orchestration river-window-management-v1 Protocolo específico de River para la comunicación entre el compositor River y los gestores de ventanas externos, permitiendo control sobre la política de ventanas sin acoplamiento monolítico. vs Integración directa del gestor de ventanas en el compositor (enfoque tradicional de Wayland)
compute DRM/KMS Direct Rendering Manager / Kernel ModeSetting. Componentes del kernel de Linux utilizados por el compositor para la gestión directa de la tarjeta gráfica y la configuración de modos de pantalla, esencial para la 'frame perfection' y baja latencia.

Trade-offs

Ganancias
  • Reducción de la barrera de entrada para desarrollo de gestores de ventanas
  • Mejora en la experiencia de desarrollo y depuración de gestores de ventanas
  • Mayor resiliencia del sistema (fallo del WM no colapsa la sesión)
  • Flexibilidad en la elección de lenguajes para gestores de ventanas (ej. con GC) sin afectar el rendimiento del compositor
Costes
  • Complejidad adicional en el diseño del protocolo de comunicación entre compositor y WM
  • Limitaciones a paradigmas 2D (no VR, efectos visuales complejos)

Fundamentos Teóricos

El problema de la separación de responsabilidades y la gestión de estado distribuido en sistemas interactivos tiene raíces en principios de diseño de sistemas operativos y arquitecturas de interfaz de usuario. La evolución de X11 a Wayland, y ahora la propuesta de River, refleja la búsqueda de un equilibrio entre flexibilidad y rendimiento, un tema recurrente en la computación distribuida. La latencia y la 'frame perfection' son métricas críticas que se abordan con técnicas de sincronización y batching, reminiscentes de algoritmos de consenso o de commit atómico en bases de datos distribuidas, donde múltiples componentes deben acordar un estado consistente. Aunque no se cita un paper específico, el concepto de 'atomic updates' y 'sequences' para mantener la consistencia del estado en un sistema distribuido (incluso si es local entre procesos) es análogo a los principios de transacciones ACID o los protocolos de commit de dos fases (2PC) en la gestión de bases de datos, donde se busca garantizar que un conjunto de operaciones se complete completamente o no se complete en absoluto, manteniendo la integridad del sistema. La distinción entre 'window management state' y 'rendering state' es una forma de partición de estado que optimiza la comunicación, un patrón común en sistemas de alto rendimiento.