Tanto o GTK quanto o Qt são toolkits para construir interfaces gráficas. Cada kit de ferramentas de interface do usuário fornece suas próprias funções para programas para criar widgets (botões, caixas de texto ...) e vem na forma de bibliotecas com as 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 toolkits usam o mesmo sistema X window & o mesmo protocolo X11 . Para fazer as coisas aparecerem na tela, o kit de ferramentas se conecta ao servidor X em execução (geralmente Xorg, anteriormente chamado XFree86), envia comandos X11 (cria janela, desenha algo em uma janela) e recebe eventos de entrada X11 (mouse, teclado, redimensionar janela , & c) de volta.
(Os kits de ferramentas mais modernos, como GTK, Qt ou EFL, executam eles próprios desenhos extravagantes e usam o X11 para enviar a imagem final da janela inteira, e o servidor X simplesmente a coloca na tela. Ferramentas mais antigas como lXaw ou O Motif usa o X11 para desenhar primitivos como linhas ou retângulos ou texto, e o servidor X faz toda a renderização.
O servidor X, em seguida, faz o trabalho de colocar tudo junto, conversando 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 usam apenas os mesmos recursos do SO.
Mecanismo, não política
A situação do kit de ferramentas múltiplas é não exclusiva de X - por exemplo, você encontrará programas do Windows usando o padrão comctl32
, mas também WPF, .NET WinForms, Aura do Chrome, XUL do Firefox, e até mesmo o mesmo GTK ou Qt. A maioria dos jogos usa seus próprios controles estilizados. Realmente, isso é possível em qualquer sistema gráfico que permite desenhar uma imagem em toda a janela.
No entanto, um dos princípios do X era "mecanismo, não política". Isso significa que o servidor X apenas fornece o mecanismo para seus clientes (programas gráficos) fazerem várias coisas, mas impõe o mínimo de regras necessárias . Em outras palavras, X leva isso para 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 (aka decorações) ao redor de cada janela, a capacidade de mover & redimensionar janelas e assim por diante. O Windows e o OS X têm um gerenciador de janelas embutido no sistema, mas no X ele é executado como um programa separado - o pacote X.Org vem com um mínimo de twm
, mas quase todos os ambientes de desktop enviam seus próprios gerenciadores de janelas. , Metacity, gnome-shell; o KDE possui o KWin) fornecendo integração com o respectivo ambiente de área de trabalho.
(Como os toolkits, os modernos gerenciadores de janela de "composição" realmente assumem o trabalho de Xorg de compor todas as janelas na imagem final da tela, permitindo que coisas como sombras ou efeitos sejam adicionadas.)
Com ambientes modernos de desktop, isso também criou problemas. Para usar o exemplo mais comum: a mesma funcionalidade "agarrar teclado" é usada por teclas de atalho; menus pop-up; e screensavers, e apenas um programa pode usá-lo de uma só vez. Isso significa que você não pode bloquear a tela enquanto um menu pop-up estiver aberto ou pular músicas enquanto a tela estiver bloqueada. É uma das várias razões pelas quais o Wayland está sendo criado como substituto do X11.
Nota lateral
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, este era o caso de uso primário nos primeiros dias, e é onde o nome "X servidor " vem em primeiro lugar. É possível rodar um servidor X em um Mac e fazer com que ele exiba janelas criadas por programas rodando em Linux, FreeBSD, até mesmo OpenVMS.
No entanto, como mencionado acima, kits de ferramentas modernas executam todo o desenho do lado do cliente (gráficos extravagantes e fontes bonitas são bastante difíceis de fazer com primitivos X11), e apenas empurram as imagens finais para o servidor X, que é muito rápido localmente mas requer um pouco de largura de banda de rede.
(Outros protocolos, como o RFB (vulgo VNC) ou o "Remote Desktop" da Microsoft, são projetados para isso, e eles têm maneiras muito eficientes de compactar as imagens da janela.)