Windows memberi Anda implementasi tunggal dari satu desktop di atas implementasi tunggal API / kerangka tunggal, semua dilakukan oleh Microsoft.
Pada sistem Unix, Anda mendapatkan API / kerangka kerja (X11 / X Window System) yang memiliki beberapa implementasi (Xorg, Xfree86), di atasnya Anda mendapatkan berbagai kerangka / kerangka kerja "level lebih tinggi" (GTK +, Qt, ... ) karena raw X11 sangat primitif, di atasnya Anda mendapatkan berbagai desktop (Gnome, KDE, ...), semua dikerjakan oleh orang yang berbeda.
Selain itu, sistem X11 telah dirancang dari bawah ke atas dengan mempertimbangkan GUI jarak jauh - yaitu, mesin lokal yang menampilkan GUI dari aplikasi yang dijalankan dari jarak jauh - yang memperkenalkan konsep "Server X" dan "Klien X".
Lalu ada nomenklatur yang "merasakan" jalan yang salah bagi pendatang baru: Mesin lokal Anda menjalankan "X Server" yang menyediakan layanan "display a GUI", sedangkan mesin jarak jauh adalah "Klien X" yang menggunakan layanan tersebut. pada mesin Anda untuk menampilkan GUI.
Nah, itulah gambaran singkatnya; setelah Anda menyelesaikannya, memahami artikel / posting forum apa pun tentang topik tersebut akan menjadi jauh lebih mudah.
Sunting: Untuk menjawab dua komentar pertama OP.
Ya, "X11" hanyalah sebuah protokol, dan Xorg / XFree86 adalah dua implementasi. Pada level dasarnya, X11 hanya tentang menggambar garis dan titik, yang tidak terlalu berguna jika Anda ingin melakukan GUI.
Di atas protokol X11, orang menerapkan banyak hal, dan cukup sulit untuk melakukan perbandingan 1: 1 dengan Windows karena Microsoft tidak pernah repot untuk benar-benar memisahkan hal-hal. Saya juga bukan pengembang tipe GUI, yaitu pengalaman saya yang sebenarnya dengan kedua sistem minimal.
Di bagian bawah, "manajer jendela" menyediakan jendela (menangani batas, menutup / memperkecil / memaksimalkan tombol, mengubah ukuran dll), dan menawarkan "real estat" di dalam jendela ke set alat widget. Ada banyak window manager, beberapa meniru sistem lain (Windows, MacOS, AmigaOS, apa pun), dan mereka sebagian besar transparan dipertukarkan ke sistem yang tersisa.
"Toolset widget" menawarkan tombol, bilah geser, bidang teks, dll. Untuk membangun GUI Anda. Inilah yang Anda (sebagai pengembang aplikasi) benar-benar dapatkan untuk "melihat", bijaksana API, dan apa yang menentukan sebagian besar "tampilan & rasa" dari aplikasi Anda.
"Desktop" membangun sejumlah aplikasi di atas kombinasi widget toolset / window manager tertentu, untuk memberikan tampilan & nuansa yang konsisten. Anda tidak perlu repot dengan ini kecuali Anda benar-benar ingin mengembangkan desktop itu sendiri.
Desktop "Gnome" menggunakan widget toolset "GTK +" di atas window manager "Metacity".
Desktop "KDE" menggunakan widget toolset "Qt" di atas window manager "KWin".
Perhatikan bahwa terutama keduanya, GTK + dan Qt, telah berkembang jauh melampaui "alat widget" sederhana menjadi "kerangka pengembangan aplikasi". Jika Anda ingin mengembangkan aplikasi GUI untuk Linux, secara efektif Anda harus memilih yang mana dari dua yang ingin Anda gunakan. Ada lebih banyak pilihan, jika Anda menginginkan aplikasi yang lebih "ringan" (tidak memerlukan dependensi perpustakaan besar), tetapi saat ini sebagian besar sistem memiliki GTK + dan Qt libs yang sudah terpasang.
Sangat mungkin untuk menggunakan aplikasi Qt pada desktop Gnome atau aplikasi GTK + pada desktop KDE (tidak selalu seperti itu), jadi Anda harus sedikit khawatir tentang kompatibilitas. Diberi pilihan antara dua aplikasi dengan fungsionalitas yang sebanding, orang biasanya akan lebih suka aplikasi menggunakan widget "asli" dari desktop pilihan mereka, tapi saya tidak khawatir tentang itu.
Poin-poin penting lainnya, yang lebih penting dalam pilihan "widget toolset": Istilah lisensi, dukungan untuk bahasa pilihan Anda, kompatibilitas lintas platform.
Post Scriptum : Kembali beberapa tahun kemudian, saya telah mengambil beberapa pengalaman pemrograman GUI saya sendiri, dan menyadari satu hal yang hilang dalam penjelasan di atas jika Anda mencari saran "jalan yang harus dituju": wxWidgets . Ini adalah kerangka kerja yang dibangun di atas apa pun yang Anda gunakan secara asli, dan memungkinkan pengembangan GUI portabel secara transparan , tanpa mengorbankan kinerja atau memasang ikatan lisensi. API C ++. Ini jalan yang saya pilih untuk kebutuhan GUI saya, dan saya merasa harus disebutkan untuk kelengkapannya.