Respostas:
Tanto o GTK quanto o Qt são kits de ferramentas para criar interfaces gráficas. Cada kit de ferramentas da interface do usuário fornece suas próprias funções para os programas criarem widgets (botões, caixas de texto ...) e vem na forma de bibliotecas às quais o programa gráfico se vincula. Um programa escrito para o GNOME usará o GTK ( libgdk
e libgtk
), enquanto os programas do KDE usam o Qt ( libQtCore
e libQtGui
), os programas do Enlightenment usam o EFL, e assim por diante.
No entanto, todos esses kits de ferramentas usam o mesmo sistema X window e o mesmo protocolo X11 . Para fazer com que as coisas apareçam na tela, o kit de ferramentas se conecta ao servidor X em execução (geralmente Xorg, anteriormente chamado XFree86), envia comandos X11 (criar janela, desenha algo em uma janela) e recebe eventos de entrada X11 (mouse, teclado, redimensionamento de janela , & c) de volta.
(A maioria dos kits de ferramentas modernos, como GTK, Qt ou EFL, executam desenhos sofisticados e usam o X11 para enviar a imagem final de toda a janela, e o servidor X apenas a coloca na tela. Os kits de ferramentas mais antigos, como lXaw ou Motif, usam X11 para desenhar primitivas, como linhas ou retângulos ou texto, e o servidor X faz toda a renderização.)
O servidor X faz o trabalho de reunir tudo, conversar com sua placa gráfica e assim por diante. Dessa forma, você pode executar programas que usam várias versões diferentes de kits de ferramentas diferentes, porque no final eles apenas usam os mesmos recursos do sistema operacional.
A situação do kit de ferramentas múltiplas não é exclusiva do X - por exemplo, você encontrará programas do Windows usando o padrão, comctl32
mas também o WPF, o .NET WinForms, o Aura do Chrome, o XUL do Firefox e até o mesmo GTK ou Qt. A maioria dos jogos usa seus próprios controles de estilo. Realmente, isso é possível em qualquer sistema gráfico que permita desenhar uma imagem em toda a janela.
No entanto, um dos princípios de X era "mecanismo, não política". Isso significa que o servidor X fornece apenas o mecanismo para seus clientes (programas gráficos) fazerem várias coisas, mas impõe poucas regras, conforme necessário . Em outras palavras, o X leva isso a uma extensão maior do que qualquer outro sistema gráfico.
Por exemplo, uma das partes integrantes de um sistema gráfico é o gerenciamento de janelas - o desenho de quadros (também conhecidos como decorações) ao redor de cada janela, a capacidade de mover e redimensionar janelas e assim por diante. O Windows e o OS X têm um gerenciador de janelas embutido no sistema, mas no X é executado como um programa separado - o pacote X.Org é fornecido com um mínimo twm
, mas quase todos os ambientes de desktop enviam seus próprios gerenciadores de janelas (o GNOME tinha Sawfish, Metacity, gnome-shell; o KDE possui o KWin), proporcionando integração com o respectivo ambiente de desktop.
(Como os kits de ferramentas, os gerenciadores de janelas modernos de "composição" assumem o trabalho do Xorg de compor todas as janelas na imagem final da tela, permitindo que coisas como sombras ou efeitos sejam adicionados.)
Com os ambientes de desktop modernos, isso também criou problemas. Para usar o exemplo mais comum: a mesma funcionalidade "pegar teclado" é usada pelas teclas de atalho; menus pop-up; e screensavers, e somente um programa pode usá-lo de uma vez. Isso significa que você não pode bloquear a tela enquanto um menu pop-up está aberto ou pular músicas enquanto a tela está bloqueada. Essa é uma das várias razões pelas quais Wayland está sendo criado como substituto do X11.
Tecnicamente, isso significa que você pode executar programas X em um computador diferente, conversando com o servidor X em sua máquina pela rede. De fato, esse era o caso de uso primário nos primeiros dias e é daí que o nome " servidor X " vem em primeiro lugar. É possível rodar um servidor X em um Mac e exibir janelas criadas por programas rodando em Linux, FreeBSD e até OpenVMS.
No entanto, como mencionado acima, os kits de ferramentas modernos executam todos os desenhos do lado do cliente (gráficos sofisticados e fontes bonitas são bastante difíceis de executar com as primitivas X11) e enviam apenas as imagens finais para o servidor X, que é muito rápido localmente, mas requer um pouco de largura de banda da rede.
(Outros protocolos, como o RFB (também conhecido como VNC) ou o "Remote Desktop" da Microsoft, foram projetados para isso e têm maneiras muito eficientes de compactar as imagens da janela.)
Parte da resposta é que os principais ambientes de desktop (Gnome, KDE, XFCE, talvez outros) trabalham juntos em http://freedesktop.org para tornar possível essa interoperação. Uma das especificações publicadas pelo FD.o é o EWMH , que garante um certo nível de compatibilidade entre os gerenciadores de janelas (para recursos modernos, não apenas para o gerenciamento básico de janelas).