Mateus Müller

O carinha do Linux

24 jul. 2018

Qual a DIFERENÇA entre WAYLAND e X11?

Diferença entre o WAYLAND e o X/X11/Xorg

Eu sempre fui um cara que prefere a linha de comando no lugar da interface gráfica, mas, nos últimos tempos, tenho tentado me familiarizar mais com o mundo gráfico do Linux, diferenças, arquitetura, etc. Isto, porque tenho a necessidade de usá-la do modo mais produtivo possível durante o trabalho com os artigos, vídeos, testes, VM’s, etc.

Durante estas pesquisas e estudos, tentei entender um pouco melhor sobre a diferença entre Wayland e X11. E hoje, vou mostrar para vocês um pouco do que aprendi. E para que isso ocorra da melhor forma, vamos começar falando sobre a estrutura atual do X/X11/Xorg.

Arquitetura do X/X11/Xorg

Na foto abaixo está representada a estrutura atual de comunicação em termos de vídeo, no Linux:

Qual a DIFERENÇA entre WAYLAND e X11?
Qual a DIFERENÇA entre WAYLAND e X11?

Então, vamos entender esta confusão aí. Dado um exemplo onde eu, usuário, clico em cima de uma janela qualquer, digamos o Firefox, e arrasto ela do lado esquerdo para o lado direito. Para que ela apareça do lado direito, existe um processo de renderização que será o seguinte:

  1. Assim que executarmos essa ação, o Kernel enviará uma requisição ao evdev. O evdev é basicamente um udev para dispositivos de entrada como mouse, teclado, etc. Já o evdev, por sua vez, enviará essa requisição ao X Server.
  2. O X Server recebe a requisição, analisa e determina em qual X Client essa mudança irá ocorrer, por exemplo: É no Firefox? Ou no Telegram? Ou até naquela janela do gerenciador de arquivos que tava aberta? Neste caso, foi no Firefox. Então, enviamos a requisição para este X Client.
  3. O X Client recebe o evento e decide qual ação tomar. Analisando a requisição, o X Client entendeu que a janela do Firefox deve mudar de posição, mas ele não sabe fazer isso. Então, volta a requisição pro X Server.
  4. O X Server recebe novamente e aciona o hardware (via driver) para a renderização da tela em outro local. O X Server também identifica onde deve ser renderizada a tela e envia ao Compositor para cuidar disso (coordenadas da posição da tela).
  5. O Compositor precisa renderizar a nova janela com base nas coordenadas que ele definiu, mas como fazer isso se somente o X Server tem contato com o Kernel e hardware? Devolve pra ele a batata quente!
  6. O X Server então copia o back buffer (do Compositor) para o front buffer e de fato renderiza.

Você não achou este processo meio redundante? Veja bem, no passo 2, o X Server não consegue definir muito bem em qual X Client atuar, visto que o “cara” dos cálculos é o Compositor.

No passo 3 o X Client tem que devolver a requisição para o X Server tomar uma ação. Será que não podemos encurtar isso?

No passo 5, por que raios o Compositor não tem contato direto com o Kernel? Seria muito mais rápido!

Pensando nessas dificuldades e a complexidade do servidor X, Kristian Høgsberg iniciou o projeto Wayland para tratar este mal.

Arquitetura do Wayland

Veja a foto abaixo para entender melhor:

Qual a DIFERENÇA entre WAYLAND e X11?
Qual a DIFERENÇA entre WAYLAND e X11?

Primeiramente, vamos partir da mesma forma que no exemplo anterior:

  1. Assim que executarmos essa ação, o Kernel enviará uma requisição ao evdev. Já o evdev, por sua vez, enviará essa requisição ao Compositor.
  2. O Compositor entende a requisição, sabe para qual X Client enviar, bem como as coordenadas.
  3. Envia-se para o X Client que fará a renderização. (Falaremos disso mais detalhadamente a seguir).
  4. Finalizada a renderização, o X Client envia um sinal ao Compositor avisando que terminou.
  5. O Compositor recompõe a tela.

Assim sendo, conseguimos extrair do processo a camada do X Server que não servia para nada.

Mas, e como o X Client consegue renderizar? O X Client e o Compositor compartilham um buffer de memória de vídeo, onde ambos gravam informações. O X Client usa uma librarie como o OpenGL que sabe como fazer o processo de renderização. Resumindo, o X Client só joga a parte pesada para o OpenGL que cuida de tudo.

O mais legal, é que o OpenGL renderiza diretamente no buffer, ao qual ambos têm acesso. Assim, o Compositor só pega o que está no buffer e recompõe a tela. Muito mais fácil do que o client ter que enviar ao server, e o server receber para tomar uma ação, não é?!

Como saber se estou usando Wayland ou Xorg?

Rode o seguinte comando a anote o ID da sessão:

$ loginctl

Qual a DIFERENÇA entre WAYLAND e X11?

$ loginctl show-session 2 -p Type
Qual a DIFERENÇA entre WAYLAND e X11?
Qual a DIFERENÇA entre WAYLAND e X11?

Observações

Um fato interessante do Wayland é que ele está sendo feito totalmente “from scratch”, ou seja, do zero. Desta forma, não está sendo usado nenhum lixo ou algo relacionado ao X11, o que faz a plataforma ficar melhor e mais fácil para os desenvolvedores.

Já temos também distribuições de grande porte utilizando o Wayland, como o Fedora. Interfaces gráficas também já estão aderindo o Wayland, auxiliando no desenvolvimento e projetando a sua interface para melhor integrar com o mesmo, como por exemplo: Gnome, KDE Plasma e Enlightment.

O Ubuntu estava usando Wayland na versão 17.10, entretanto, voltou para o X.Org na versão 18.04, visto que haviam alguns bugs.

Eu ainda acredito que, assim que o projeto amadurecer, será algo muito bom para o mundo Linux.

Fontes

Forte abraço, e até a próxima!

Veja também:

Se tiver alguma dúvida ou sugestão de conteúdo, por favor, comente!

Comentários Disqus