Risposte:
Sia GTK che Qt sono toolkit per la creazione di interfacce grafiche. Ogni toolkit dell'interfaccia utente fornisce le proprie funzioni ai programmi per creare widget (pulsanti, caselle di testo ...) e si presenta sotto forma di librerie a cui si collega il programma grafico. Un programma scritto per GNOME utilizzerà GTK ( libgdk
e libgtk
), mentre i programmi KDE usano Qt ( libQtCore
e libQtGui
), i programmi Enlightenment usano EFL e così via.
Tuttavia, tutti questi toolkit usano lo stesso sistema X Window e lo stesso protocollo X11 . Per far apparire le cose sullo schermo, il toolkit si collega al server X in esecuzione (di solito Xorg, precedentemente chiamato XFree86), invia comandi X11 (crea finestra, disegna qualcosa in una finestra) e riceve eventi di input X11 (mouse, tastiera, ridimensionamento della finestra , ecc.) indietro.
(La maggior parte dei toolkit moderni, come GTK, Qt o EFL, eseguono da soli disegni fantasiosi e basta usare X11 per inviare l'immagine finita dell'intera finestra e il server X lo mette semplicemente sullo schermo. I toolkit più vecchi come lXaw o Motif invece usano X11 per disegnare primitive come linee o rettangoli o testo e il server X esegue tutto il rendering.)
Il server X fa quindi il lavoro di mettere tutto insieme, parlare con la scheda grafica e così via. In questo modo, è possibile eseguire programmi che utilizzano varie versioni diverse di diversi toolkit, perché alla fine usano solo le stesse funzionalità del sistema operativo.
La situazione del toolkit multiplo non è unica per X - ad esempio, troverai programmi Windows che usano lo standard comctl32
ma anche WPF, .NET WinForms, Chrome's Aura, Firefox's XUL e persino lo stesso GTK o Qt. La maggior parte dei giochi utilizza i propri controlli in stile. Davvero, questo è possibile su qualsiasi sistema grafico che ti consente di disegnare un'immagine attraverso l'intera finestra.
Tuttavia, uno dei principi di X era "meccanismo, non politica". Ciò significa che il server X fornisce solo il meccanismo ai suoi client (programmi grafici) per fare varie cose, ma impone il minor numero di regole necessarie . In altre parole, X lo prende in misura maggiore rispetto a qualsiasi altro sistema grafico.
Ad esempio, una delle parti integranti di un sistema grafico è la gestione delle finestre : il disegno di cornici (ovvero decorazioni) attorno a ciascuna finestra, la possibilità di spostare e ridimensionare le finestre e così via. Windows e OS X hanno un gestore di finestre integrato nel sistema, ma in X funziona come un programma separato: la suite X.Org è dotata di un minimo twm
, ma quasi tutti gli ambienti desktop hanno i loro gestori di finestre (GNOME aveva Sawfish, Metacity, gnome-shell; KDE ha KWin) che fornisce l'integrazione con il rispettivo ambiente desktop.
(Come i toolkit, i moderni gestori di finestre "compositing" assumono effettivamente il compito di Xorg di comporre tutte le finestre sull'immagine finale dello schermo, consentendo l'aggiunta di elementi come ombre o effetti.)
Con i moderni ambienti desktop, anche questo ha creato problemi. Per usare l'esempio più comune: la stessa funzionalità "afferra tastiera" viene utilizzata dai tasti di scelta rapida; menu a comparsa; e salvaschermi e solo un programma alla volta può usarlo. Ciò significa che non è possibile bloccare lo schermo mentre è aperto un menu a comparsa o saltare brani mentre lo schermo è bloccato. È uno dei numerosi motivi per cui Wayland viene creato come sostituto di X11.
Tecnicamente, questo significa anche che potresti eseguire programmi X su un altro computer, parlando con il server X sul tuo computer in rete. In effetti, questo era il principale caso di utilizzo nei primi tempi, ed è da qui che deriva il nome "X server ". È possibile eseguire un server X su un Mac e visualizzare finestre create da programmi in esecuzione su Linux, FreeBSD, anche OpenVMS.
Tuttavia, come accennato in precedenza, i moderni toolkit eseguono tutti i disegni sul lato client (grafica elaborata e caratteri graziosi sono piuttosto difficili da fare con le primitive X11) e trasferiscono solo le immagini finali al server X, che è molto veloce localmente, ma richiede un buona parte della larghezza di banda della rete.
(Altri protocolli, come RFB (aka VNC) o Microsoft "Remote Desktop", sono progettati per questo e hanno modi molto efficienti di comprimere le immagini delle finestre.)
Parte della risposta è che i principali ambienti desktop (Gnome, KDE, XFCE, forse altri) lavorano insieme su http://freedesktop.org per rendere possibile tale interoperabilità. Una delle specifiche pubblicate da FD.o è EWMH , che garantisce un certo livello di compatibilità tra gestori di finestre (per caratteristiche moderne, non solo di gestione di base della finestra).