Windows bietet Ihnen eine einzelne Implementierung eines einzelnen Desktops zusätzlich zu einer einzelnen Implementierung einer einzelnen API / eines einzelnen Frameworks, die alle von Microsoft durchgeführt werden.
Auf Unix-Systemen erhalten Sie eine API / ein Framework (X11 / X Window System), für die mehrere Implementierungen existieren (Xorg, Xfree86), auf denen Sie verschiedene API / Frameworks auf "höherer Ebene" (GTK +, Qt, ...) erhalten. ) weil raw X11 so primitiv ist, auf dem Sie verschiedene Desktops (Gnome, KDE, ...) erhalten, die alle von verschiedenen Personen erstellt wurden.
Darüber hinaus wurde das X11-System von Grund auf unter Berücksichtigung von Remote-GUIs entwickelt - dh einer lokalen Maschine, die die GUI einer remote ausgeführten Anwendung anzeigt -, die die Konzepte eines "X-Servers" und eines "X-Clients" einführt.
Dann gibt es eine Nomenklatur, die sich für Neulinge falsch anfühlt: Auf Ihrem lokalen Computer wird der "X Server" ausgeführt, der den Dienst "GUI anzeigen" bereitstellt, während der Remotecomputer der "X Client" ist, der die Dienste nutzt auf Ihrem Computer, um die GUI anzuzeigen.
Nun, das ist der schnelle Überblick. Sobald Sie das geklärt haben, sollte es viel einfacher werden, Artikel / Forenbeiträge zu diesem Thema zu verstehen.
Bearbeiten: Um die beiden ersten Kommentare des OP zu beantworten.
Ja, "X11" ist lediglich ein Protokoll, und Xorg / XFree86 sind zwei Implementierungen. Im Grunde geht es bei X11 nur um das Zeichnen von Linien und Punkten, was nicht besonders nützlich ist, wenn Sie eine grafische Benutzeroberfläche erstellen möchten.
Zusätzlich zum X11-Protokoll haben die Leute viele Dinge implementiert, und es ist ziemlich schwierig, einen 1: 1-Vergleich mit Windows durchzuführen, da Microsoft sich nie die Mühe gemacht hat, die Dinge wirklich getrennt zu halten. Außerdem bin ich kein Entwickler vom Typ GUI, dh meine tatsächliche Erfahrung mit beiden Systemen ist minimal.
Unten bietet ein "Fenstermanager" ein Fenster (Behandeln von Rahmen, Schließen / Minimieren / Maximieren von Schaltflächen, Ändern der Größe usw.) und bietet dem Widget-Toolset die "Immobilien" innerhalb des Fensters an. Es gibt viele Fenstermanager, von denen einige andere Systeme nachahmen (Windows, MacOS, AmigaOS usw.), und sie sind größtenteils für das verbleibende System transparent austauschbar.
Das "Widget-Toolset" bietet Ihnen Schaltflächen, Schieberegler, Textfelder usw., auf denen Sie Ihre GUI erstellen können. Dies ist es, was Sie (als Anwendungsentwickler) tatsächlich sehen, was die API betrifft, und was den größten Teil des "Look & Feel" Ihrer Anwendung bestimmt.
Ein "Desktop" erstellt eine Reihe von Anwendungen auf einer bestimmten Kombination aus Widget-Toolset und Fenstermanager, um ein einheitliches Erscheinungsbild zu erzielen. Sie müssen sich nicht damit beschäftigen, es sei denn, Sie möchten den Desktop selbst entwickeln.
Der Desktop "Gnome" verwendet das Widget-Toolset "GTK +" über dem Fenstermanager "Metacity".
Der Desktop "KDE" verwendet das Widget-Toolset "Qt" über dem Fenstermanager "KWin".
Beachten Sie, dass sich insbesondere diese beiden, GTK + und Qt, weit über einfache "Widget-Toolsets" hinaus zu "Anwendungsentwicklungs-Frameworks" entwickelt haben. Wenn Sie GUI-Apps für Linux entwickeln möchten, müssen Sie effektiv auswählen, welche der beiden Sie verwenden möchten. Es gibt mehr Auswahlmöglichkeiten, wenn Sie eine "leichtere" App möchten (ohne die großen Bibliotheksabhängigkeiten zu benötigen), aber auf den meisten Systemen sind GTK + - und Qt-Bibliotheken ohnehin bereits installiert.
Es ist durchaus möglich, Qt-Apps auf einem Gnome-Desktop oder GTK + -Apps auf einem KDE-Desktop zu verwenden (das war nicht immer so), sodass Sie sich keine Gedanken über die Kompatibilität machen müssen. Bei der Wahl zwischen zwei Apps mit vergleichbarer Funktionalität bevorzugen die Benutzer normalerweise die App mit den "nativen" Widgets des Desktops ihrer Wahl, aber darüber würde ich mir keine Sorgen machen.
Weitere wichtige Punkte bei der Auswahl des "Widget-Toolset": Lizenzbedingungen, Unterstützung für die Sprache Ihrer Wahl, plattformübergreifende Kompatibilität.
Post Scriptum : Als ich einige Jahre später zurückkam, habe ich selbst einige Erfahrungen mit der GUI-Programmierung gesammelt und festgestellt, dass in der obigen Erklärung eines fehlt, wenn Sie nach einem Rat suchen, wie Sie vorgehen sollen: wxWidgets . Dies ist ein Framework, das auf dem aufbaut, was Sie nativ verwenden, und eine transparent tragbare GUI-Entwicklung ermöglicht, ohne die Leistung zu beeinträchtigen oder Lizenzzeichenfolgen zuzuordnen. C ++ API. Es ist der Weg, den ich für meine GUI-Anforderungen gewählt habe, und ich war der Meinung, dass er der Vollständigkeit halber erwähnt werden sollte .