Windows дає вам єдину реалізацію одного робочого столу поверх єдиної реалізації єдиного API / рамки, все це зроблено Microsoft.
У системах Unix ви отримуєте API / фреймворк (X11 / X Window System), для якого існують кілька реалізацій (Xorg, Xfree86), поверх яких ви отримуєте різні API / рамки більш високого рівня (GTK +, Qt, ... ) тому що сирий X11 настільки примітивний, поверх якого ви отримуєте різні настільні комп’ютери (Gnome, KDE, ...), які роблять різні люди.
Більше того, система X11 була розроблена з нуля з віддаленими графічними інтерфейсами, тобто локальною машиною, що відображає графічний інтерфейс віддалено запущеної програми, яка представляє поняття "сервер X" і "X клієнт".
Потім з'являється номенклатура, яка "відчуває" неправильний шлях для новачків: на вашій локальній машині працює "X-сервер", що надає послугу "відображення графічного інтерфейсу", тоді як віддалений апарат - "Клієнт X", використовуючи послуги на вашій машині для відображення графічного інтерфейсу.
Ну, це швидкий огляд; Як тільки ви це розібралися, розуміння будь-яких статей / дописів на форумі з цього питання повинно стати набагато простішим.
Редагувати: відповісти на два перші коментарі ОП.
Так, "X11" - це просто протокол, а Xorg / XFree86 - це дві реалізації. На своєму базовому рівні X11 стосується лише малювання ліній та крапок, що не дуже корисно, якщо ви хочете зробити графічний інтерфейс.
Крім протоколу X11, люди реалізували багато речей, і порівняння 1: 1 з Windows досить складно, оскільки Microsoft ніколи не намагався реально тримати речі окремо. Також я не є розробником типу GUI, тобто мій фактичний досвід роботи з будь-якою системою мінімальний.
У нижній частині "менеджер вікон" надає вікно (обробка меж, закриття / мінімізація / максимізація кнопок, зміна розміру тощо) та пропонує набір інструментів віджетів "нерухомість" у вікні. Є багато менеджерів вікон, деякі імітують інші системи (Windows, MacOS, AmigaOS, що завгодно), і вони здебільшого є взаємозамінними прозорими для решти системи.
"Набір інструментів віджетів" пропонує вам кнопки, повзунки, текстові поля тощо, на яких можна побудувати свій графічний інтерфейс. Це те, що ви (як розробник програми) насправді добираєтесь до "бачення", API розумного, і те, що визначає більшість "вигляду і відчуття" вашої програми.
"Робочий стіл" будує ряд програм на основі певної комбінації інструментів віджетів / вікон, щоб забезпечити послідовний вигляд та відчуття. Вам не доведеться турбуватися з цим, якщо ви насправді не хочете розробити сам робочий стіл.
На робочому столі "Gnome" використовується набір інструментів віджетів "GTK +" вгорі вікна-менеджера "Metacity".
На робочому столі "KDE" використовується набір інструментів віджетів "Qt" у верхній частині вікна "KWin".
Зауважте, що особливо ці два, GTK + та Qt, переросли далеко за рамки простих "наборів інструментів віджетів" у "рамки розробки додатків". Якщо ви хочете розробити програми для графічного інтерфейсу для Linux, вам потрібно вибрати, який із цих двох ви хочете використовувати. Є більше варіантів, якщо ви хочете більш "легкий" додаток (не потребує великих залежностей від бібліотеки), але сьогодні у більшості систем все одно встановлені GTK + та Qt libs.
Цілком можливо використовувати програми Qt на робочому столі Gnome або GTK + додатки на робочому столі KDE (це не завжди було так), тому вам доведеться мало хвилюватися про сумісність. Зважаючи на вибір між двома програмами порівнянної функціональності, люди зазвичай віддають перевагу додатку, використовуючи "рідні" віджети свого робочого столу, але я б не турбувався про це.
Інші, важливіші пункти відбору "набору інструментів віджетів": Умови ліцензування, підтримка вашої мови вибору, сумісність між платформами.
Post Scriptum : Повернувшись через кілька років, я зібрав власний досвід програмування графічного інтерфейсу, і зрозумів, що одне не вистачає у вищезазначеному поясненні, якщо ви шукаєте поради "в який шлях": wxWidgets . Це рамка, яка ґрунтується на всьому, що ви використовуєте в оригінальному режимі, і дозволяє прозоро переносити розроблений графічний інтерфейс, не приносячи шкоди продуктивності та не додаючи жодних рядків ліцензійного зв’язку. API C ++. Це шлях, який я вибрав для моїх потреб у графічному інтерфейсі, і я вважав, що його слід згадати для повноти.