Respuestas:
Tanto GTK como Qt son juegos de herramientas para construir interfaces gráficas. Cada kit de herramientas de IU proporciona sus propias funciones para que los programas creen widgets (botones, cuadros de texto ...) y viene en forma de bibliotecas con las que se vincula el programa gráfico. Un programa escrito para GNOME usará GTK ( libgdk
y libgtk
), mientras que los programas de KDE usan Qt ( libQtCore
y libQtGui
), los programas de Enlightenment usan EFL, y así sucesivamente.
Sin embargo, todos estos kits de herramientas utilizan el mismo sistema X Window y el mismo protocolo X11 . Para que las cosas aparezcan en la pantalla, el kit de herramientas se conecta al servidor X en ejecución (generalmente Xorg, anteriormente llamado XFree86), envía comandos X11 (crear ventana, dibujar algo en una ventana) y recibe eventos de entrada X11 (mouse, teclado, cambio de tamaño de ventana , & c) volver.
(La mayoría de los kits de herramientas modernos, como GTK, Qt o EFL, realizan dibujos sofisticados, y solo usan X11 para enviar la imagen final de toda la ventana, y el servidor X simplemente la pone en la pantalla. En cambio, los kits de herramientas más antiguos como lXaw o Motif usan X11 para dibujar primitivas como líneas o rectángulos o texto, y el servidor X hace todo el procesamiento).
El servidor X hace el trabajo de armar todo, hablar con su tarjeta gráfica, y así sucesivamente. De esta manera, puede ejecutar programas que usan varias versiones diferentes de diferentes kits de herramientas, porque al final solo usan las mismas instalaciones del sistema operativo.
La situación del kit de herramientas múltiples no es exclusiva de X : por ejemplo, encontrará programas de Windows que usan el estándar, comctl32
pero también WPF, .NET WinForms, Chrome's Aura, Firefox's XUL e incluso el mismo GTK o Qt. La mayoría de los juegos usan sus propios controles de estilo. Realmente, esto es posible en cualquier sistema gráfico que le permita dibujar una imagen en toda la ventana.
Sin embargo, uno de los principios de X era "mecanismo, no política". Esto significa que el servidor X solo proporciona el mecanismo para que sus clientes (programas gráficos) hagan varias cosas, pero impone tan pocas reglas como sea necesario . En otras palabras, X toma esto en mayor medida que cualquier otro sistema gráfico.
Por ejemplo, una de las partes integrales de un sistema gráfico es la administración de ventanas : el dibujo de marcos (también conocidos como decoraciones) alrededor de cada ventana, la capacidad de mover y cambiar el tamaño de las ventanas, etc. Windows y OS X tienen un administrador de ventanas integrado en el sistema, pero en X se ejecuta como un programa separado: la suite X.Org viene con un mínimo twm
, pero casi todos los entornos de escritorio incluyen sus propios administradores de ventanas (GNOME tenía Sawfish, Metacity, gnome-shell; KDE tiene KWin) que proporciona integración con el entorno de escritorio respectivo.
(Al igual que los juegos de herramientas, los administradores de ventanas modernos de "composición" en realidad se hacen cargo del trabajo de Xorg de componer todas las ventanas en la imagen final de la pantalla, permitiendo que se agreguen cosas como sombras o efectos).
Con los entornos de escritorio modernos, esto también ha creado problemas. Para usar el ejemplo más común: las teclas de acceso rápido utilizan la misma funcionalidad de "agarrar teclado"; menús emergentes; y protectores de pantalla, y solo un programa puede usarlo a la vez. Esto significa que no puede bloquear la pantalla mientras está abierto un menú emergente, o saltar canciones mientras la pantalla está bloqueada. Es una de las varias razones por las que se está creando Wayland como reemplazo de X11.
Técnicamente, esto incluso significa que podría ejecutar programas X en una computadora diferente, hablando con el servidor X en su máquina a través de la red. De hecho, este fue el caso de uso principal en los primeros días, y es de donde proviene el nombre " servidor X " en primer lugar. Es posible ejecutar un servidor X en una Mac y hacer que muestre ventanas creadas por programas que se ejecutan en Linux, FreeBSD e incluso OpenVMS.
Sin embargo, como se mencionó anteriormente, los kits de herramientas modernos realizan todos los dibujos del lado del cliente (los gráficos sofisticados y las fuentes bonitas son bastante difíciles de hacer con las primitivas X11), y solo envían las imágenes finales al servidor X, que es muy rápido localmente, pero requiere un un poco de ancho de banda de red.
(Otros protocolos, como RFB (también conocido como VNC) o el "Escritorio remoto" de Microsoft, están diseñados para esto, y tienen formas muy eficientes de comprimir las imágenes de la ventana).
Parte de la respuesta es que los principales entornos de escritorio (Gnome, KDE, XFCE, quizás otros) trabajan juntos en http://freedesktop.org para hacer posible dicha interoperación. Una de las especificaciones publicadas por FD.o es EWMH , que garantiza un cierto nivel de compatibilidad entre los administradores de ventanas (para funciones modernas, no solo la administración básica de ventanas).
Cuando se ejecuta bajo GNOME, las aplicaciones de KDE todavía llaman a las bibliotecas Qt compartidas de las que dependen. Lo mismo se aplica a cualquier persona que ejecute cualquier aplicación en cualquier otro entorno de escritorio. No imponen restricciones sobre lo que se puede llamar y lo que no.