Windowsでは、単一のAPI /フレームワークの単一の実装に加えて、単一のデスクトップの単一の実装が提供され、すべてMicrosoftによって行われます。
Unixシステムでは、複数の実装(Xorg、Xfree86)が存在するAPI /フレームワーク(X11 / X Window System)を取得し、その上にさまざまな「より高いレベル」のAPI /フレームワーク(GTK +、Qtなど)を取得します。 )raw X11は非常に原始的であり、その上にさまざまなデスクトップ(Gnome、KDEなど)があり、すべて別の人が実行します。
さらに、X11システムは、リモートGUI(つまり、リモートで実行されているアプリケーションのGUIを表示するローカルマシン)を念頭に置いてゼロから設計されており、「Xサーバー」と「Xクライアント」の概念が導入されています。
次に、新参者に間違った方法を「感じる」という命名法があります。ローカルマシンは「Xサーバー」を実行しており、「GUIを表示」サービスを提供していますが、リモートマシンはサービスを利用する「Xクライアント」です。マシン上でGUIを表示します。
まあ、それは簡単な概要です。あなたがそれを整理したら、その主題に関する記事/フォーラム投稿を理解することははるかに簡単になるはずです。
編集: OPの最初の2つのコメントに回答します。
はい、「X11」は単なるプロトコルであり、Xorg / XFree86は2つの実装です。基本的なレベルでは、X11は線と点を描画することだけを目的としており、GUIを実行する場合にはそれほど役に立ちません。
X11プロトコルに加えて、人々は多くのものを実装しました。Microsoftが実際に物事を分離しておくことを決して気にしていないため、Windowsと1対1で比較することはかなり困難です。また、私はGUIタイプの開発者ではありません。つまり、どちらのシステムでも実際の経験は最小限です。
下部にある「ウィンドウマネージャー」は、ウィンドウ(ボーダーの処理、ボタンの閉じる/最小化/最大化、サイズ変更など)を提供し、ウィジェットツールセットにウィンドウ内の「不動産」を提供します。多くのウィンドウマネージャーがあり、一部は他のシステム(Windows、MacOS、AmigaOSなど)を模倣しており、ほとんどの場合、残りのシステムに対して透過的に互換性があります。
「ウィジェットツールセット」は、GUIを構築するためのボタン、スライダー、テキストフィールドなどを提供します。これは、(アプリケーション開発者として)あなたが実際に「見る」こと、APIに関して賢明なこと、そしてアプリケーションの「ルックアンドフィール」のほとんどを決定するものです。
「デスクトップ」は、一貫したルックアンドフィールを提供するために、特定のウィジェットツールセットとウィンドウマネージャーの組み合わせの上にいくつかのアプリケーションを構築します。実際にデスクトップ自体を開発する必要がない限り、これらを気にする必要はありません。
デスクトップ「Gnome」は、ウィンドウマネージャー「Metacity」の上にウィジェットツールセット「GTK +」を使用しています。
デスクトップ「KDE」は、ウィンドウマネージャー「KWin」の上にあるウィジェットツールセット「Qt」を使用します。
特にこれら2つ、GTK +とQtは、単純な「ウィジェットツールセット」から「アプリケーション開発フレームワーク」へとはるかに進化したことに注意してください。Linux用のGUIアプリを開発したい場合、効果的にこれらの2つのうちどちらを使用するかを選択する必要があります。もっと「軽量」なアプリが必要な場合(大きなライブラリの依存関係を必要としない)、もっと多くの選択肢がありますが、今日ほとんどのシステムにはGTK +とQtのライブラリがすでにインストールされています。
QtアプリをGnomeデスクトップで、またはGTK +アプリをKDEデスクトップで使用することは完全に可能です(常にそうであるとは限りません)。互換性についてはほとんど心配する必要はありません。同等の機能を持つ2つのアプリのどちらかを選択すると、通常は、選択したデスクトップの「ネイティブ」ウィジェットを使用するアプリが好まれますが、それについては心配しません。
「ウィジェットツールセット」の選択におけるその他のより重要な箇条書き:ライセンス条項、選択した言語のサポート、クロスプラットフォームの互換性。
ポストScriptumは:数年後に戻って来て、私は自分自身のいくつかのGUIプログラミングの経験をピックアップし、あなたがアドバイスを「どこへ行くどの方法」を探している場合は、1つの事は上記の説明に欠けて実現しました:wxWidgetsの。これは、ネイティブで使用しているものの上に構築するフレームワークであり、パフォーマンスを犠牲にしたり、licensind文字列をアタッチしたりすることなく、透過的に移植可能な GUI開発を可能にします。C ++ API。これはGUIのニーズに合わせて選択したパスであり、完全を期すために言及する必要があると感じました。