• [^] # Re: Gestionnaire de fenêtres

    Posté par . En réponse à la dépêche Pourquoi Wayland veut remplacer X. Évalué à 10.

    Ben tu te trompes :)

    J'avais la même inquiétude (z'OMG que va devenir mon XMonad :'( ?), mais j'ai été sur IRC proposer une idée et on m'a dit que c'était possible et que c'était même la solution envisagée à long terme.

    Reprenons le schéma d'architecture de Wayland :

    Archi Wayland

    Ce qui te fais peur ce sont ces petites flèches 1 et 4 que tu vas devoir implémenter dans ton wmii, right ? Ben en fait c'est toutafé possible d'ajouter un bloc à cet endroit là, qu'on appellera compositeur système. Lui va parler au noyal direct, et ton wmii va parler au compositeur système en utilisant le protocole… Wayland. Qui est bien plus simple que evdev+kms. De plus ça impliquera que ton WM/compositeur sera automatiquement (enfin, à condition qu'il existe un "compositeur système" idoine) portable sur d'autres plateformes que kms+evdev, par exemple la plateforme X11 ou la plateforme "nested wayland" ou "fb + gpm" ou encore "api graphique de *bsd + api events de *bsd".

    Bien sûr, par rapport à un bon vieux WM X, t'as quand même un truc en plus à gérer : le compositing, qui dans sa forme la plus simple revient à pas grand chose : un blit par fenêtre à l'endroit où t'as décidé de la poser. T'as aussi à faire la distribution des events (mon focus est sur telle appli donc c'est vers elle que je route les évènements).

    Mais ça, ça a un avantage certain : les possibilités offertes à ton WM explosent. Franchement imagine un wmii qui a accès à tout le pouvoir offert à un compositeur : ça fait rêver.

    Bon tu vas me dire, "argh, rajouter un bloc en plus dans le schéma juste pour faire la traduction (kms,evdev) -> (wayland sous-partie graphique, wayland sous-partie events), c'est moche, et les perfs ? Y se trouve que le fameux compositeur système, il a aucune opération graphique à faire, juste forwarder ce que ton compositeur/WM a produit. Et comme on est dans un monde moderne de buffers graphiques partagés, y peut se contenter de dire à la carte graphique (via KMS) "le scanout buffer que tu dois sortir à l'écran, c'est ". Et hop, zéro copie, zéro overhead.