Windows offre un'unica implementazione di un singolo desktop in aggiunta a un'unica implementazione di una singola API / framework, il tutto fatto da Microsoft.
Sui sistemi Unix, ottieni un'API / framework (X11 / X Window System) per i quali esistono implementazioni multiple (Xorg, Xfree86), in cima alle quali ottieni varie API / framework "di livello superiore" (GTK +, Qt, ... ) perché l'X11 grezzo è così primitivo, oltre al quale si ottengono vari desktop (Gnome, KDE, ...), tutti realizzati da persone diverse.
Inoltre, il sistema X11 è stato progettato da zero pensando a GUI remote, ovvero una macchina lokal che mostra la GUI di un'applicazione in esecuzione in remoto, che introduce i concetti di "X Server" e "X Client".
Poi c'è una nomenclatura che "sente" la strada sbagliata per i nuovi arrivati: il tuo computer locale esegue "X Server" fornendo il servizio "display a GUI", mentre il computer remoto è "X Client" che utilizza i servizi sul tuo computer per visualizzare la GUI.
Bene, questa è la rapida panoramica; una volta risolto il problema, la comprensione di eventuali articoli / post sul forum sull'argomento dovrebbe diventare molto più semplice.
Modifica: per rispondere ai primi due commenti del PO.
Sì, "X11" è semplicemente un protocollo e Xorg / XFree86 sono due implementazioni. Al suo livello base, X11 riguarda solo il disegno di linee e punti, il che non è estremamente utile se si desidera eseguire una GUI.
Oltre al protocollo X11, le persone hanno implementato molte cose ed è abbastanza difficile fare un confronto 1: 1 con Windows perché Microsoft non si è mai preoccupata di tenere davvero le cose separate. Inoltre non sono uno sviluppatore di tipo GUI, ovvero la mia esperienza effettiva con entrambi i sistemi è minima.
Nella parte inferiore, un "gestore di finestre" fornisce una finestra (gestione dei bordi, chiusura / riduzione / ingrandimento dei pulsanti, ridimensionamento ecc.) E offre la "proprietà" all'interno della finestra al set di strumenti del widget. Ci sono molti gestori di finestre, alcuni che imitano altri sistemi (Windows, MacOS, AmigaOS, qualunque cosa) e sono per lo più intercambiabili trasparenti al sistema rimanente.
Il "set di strumenti del widget" offre pulsanti, cursori, campi di testo ecc. Su cui costruire la tua GUI. Questo è ciò che tu (in qualità di sviluppatore di applicazioni) effettivamente riesci a "vedere", per quanto riguarda le API, e ciò che decide maggiormente del "look and feel" della tua applicazione.
Un "desktop" crea una serie di applicazioni su una determinata combinazione di set di strumenti widget / gestore finestre, al fine di fornire un aspetto coerente. Non devi preoccuparti di questi a meno che tu non voglia davvero sviluppare il desktop stesso.
Il desktop "Gnome" utilizza il set di strumenti del widget "GTK +" nella parte superiore del gestore di finestre "Metacity".
Il desktop "KDE" utilizza il set di strumenti del widget "Qt" nella parte superiore del gestore finestre "KWin".
Si noti che soprattutto quei due, GTK + e Qt, si sono evoluti ben oltre i semplici "set di strumenti widget" in "framework di sviluppo di applicazioni". Se vuoi sviluppare app GUI per Linux, devi effettivamente scegliere quale di quelle due vuoi usare. Ci sono più scelte, se vuoi un'app più "leggera" (che non necessita delle grandi dipendenze delle librerie), ma oggi la maggior parte dei sistemi ha già installato le librerie GTK + e Qt.
È perfettamente possibile usare le app Qt su un desktop Gnome o le app GTK + su un desktop KDE (non è sempre stato così), quindi devi preoccuparti poco della compatibilità. Data la scelta tra due app con funzionalità comparabili, le persone preferiranno di solito l'app utilizzando i widget "nativi" del desktop preferito, ma non me ne preoccuperei.
Altri, più importanti punti elenco nella scelta del "set di strumenti widget": termini di licenza, supporto per la lingua scelta, compatibilità multipiattaforma.
Post Scriptum : Tornando diversi anni dopo, ho acquisito una mia esperienza di programmazione della GUI e mi rendo conto che manca una cosa nella spiegazione sopra se stai cercando un consiglio "da che parte andare": wxWidgets . Questo è un framework che si basa su tutto ciò che si sta utilizzando in modo nativo e consente lo sviluppo di GUI in modo trasparente portatile , senza sacrificare le prestazioni o senza stringhe di licenze associate. API C ++. È il percorso che ho scelto per le mie esigenze con la GUI e ho pensato che dovesse essere menzionato per completezza.