O Windows oferece uma única implementação de uma única área de trabalho, além de uma única implementação de uma única API / estrutura, tudo feito pela Microsoft.
Nos sistemas Unix, você obtém uma API / estrutura (X11 / X Window System) para a qual existem várias implementações (Xorg, Xfree86), além das quais você obtém várias API / estruturas de "nível superior" (GTK +, Qt, ... ) porque o X11 bruto é muito primitivo, além de vários desktops (Gnome, KDE, ...), todos feitos por pessoas diferentes.
Além disso, o sistema X11 foi projetado desde o início com GUIs remotas - isto é, uma máquina lokal que exibe a GUI de um aplicativo em execução remota - que introduz os conceitos de "X Server" e "X Client".
Depois, há uma nomenclatura que "parece" o caminho errado para os recém-chegados: sua máquina local está executando o "X Server" fornecendo o serviço "exibir uma GUI", enquanto a máquina remota é o "X Client" fazendo uso dos serviços na sua máquina para exibir a GUI.
Bem, essa é a visão geral rápida; Depois que você resolver isso, entender todos os artigos / postagens do fórum sobre o assunto deve ficar muito mais fácil.
Editar: para responder aos dois primeiros comentários do OP.
Sim, "X11" é apenas um protocolo e Xorg / XFree86 são duas implementações. No nível básico, o X11 trata apenas de desenhar linhas e pontos, o que não é muito útil se você deseja fazer uma GUI.
Além do protocolo X11, as pessoas implementaram muitas coisas, e é muito difícil fazer uma comparação 1: 1 com o Windows porque a Microsoft nunca se preocupou em manter as coisas separadas. Também não sou um desenvolvedor do tipo GUI, ou seja, minha experiência real com qualquer um dos sistemas é mínima.
Na parte inferior, um "gerenciador de janelas" fornece uma janela (manipulando bordas, botões de fechar / minimizar / maximizar, redimensionar etc.) e oferece o "imóvel" dentro da janela para o conjunto de ferramentas do widget. Existem muitos gerenciadores de janelas, alguns simulando outros sistemas (Windows, MacOS, AmigaOS, o que for), e eles são na sua maioria intercambiáveis e transparentes com o sistema restante.
O "conjunto de ferramentas do widget" oferece botões, controles deslizantes, campos de texto etc. nos quais você pode criar sua GUI. É isso que você (como desenvolvedor de aplicativos) realmente consegue "ver", em termos de API, e o que decide a maior parte da "aparência e aparência" do seu aplicativo.
Uma "área de trabalho" cria vários aplicativos sobre uma certa combinação de conjunto de ferramentas de widget / gerenciador de janelas, para fornecer uma aparência consistente. Você não precisa se preocupar com isso, a menos que realmente queira desenvolver a própria área de trabalho.
A área de trabalho "Gnome" usa o conjunto de ferramentas do widget "GTK +" na parte superior do gerenciador de janelas "Metacity".
A área de trabalho "KDE" usa o conjunto de ferramentas do widget "Qt" na parte superior do gerenciador de janelas "KWin".
Observe que especialmente os dois, GTK + e Qt, evoluíram muito além dos simples "conjuntos de ferramentas de widget" em "estruturas de desenvolvimento de aplicativos". Se você deseja desenvolver aplicativos da GUI para Linux, efetivamente precisa escolher qual desses dois deseja usar. Existem mais opções, se você quiser um aplicativo mais "leve" (sem precisar das grandes dependências da biblioteca), mas hoje a maioria dos sistemas possui bibliotecas GTK + e Qt já instaladas de qualquer maneira.
É perfeitamente possível usar aplicativos Qt em um desktop Gnome ou aplicativos GTK + em um desktop KDE (nem sempre foi assim), então você precisa se preocupar um pouco com a compatibilidade. Dada a escolha entre dois aplicativos de funcionalidade comparável, as pessoas geralmente preferem o aplicativo usando os widgets "nativos" da área de trabalho de sua escolha, mas não me preocupo com isso.
Outros pontos de referência mais importantes na escolha do "conjunto de ferramentas do widget": termos de licenciamento, suporte para o seu idioma preferido, compatibilidade entre plataformas.
Post Scriptum : Voltando vários anos depois, adquiri minha própria experiência de programação em GUI e percebo que uma coisa está faltando na explicação acima, se você está procurando um conselho "para onde ir": wxWidgets . Essa é uma estrutura que se baseia em tudo o que você está usando de forma nativa e permite o desenvolvimento transparente de uma GUI portátil , sem sacrificar o desempenho ou sem anexar nenhuma sequência de licença. API C ++. É o caminho que escolhi para as minhas necessidades de GUI e achei que deveria ser mencionado por completo.