Xウィンドウシステムに関連してよく目にする用語に、Xウィンドウマネージャ、Xサーバ、デスクトップ環境、GTK+などがあります。
「これら一体何なの?」Linuxを触り始めた頃は、わからないことだらけでした。
今回、これらの用語を解説したいと思います。正確で漏れのない解説ではなく、初心者に分かりやすい解説をめざしています。より詳しい解説は、各用語ごとにウィキペディアへのリンクを張っていますのでそちらを参照してください。
(注意、筆者の主観が多分に混じっているため、間違っていたらごめんなさい。そして、ご指摘を歓迎します)
「GUI・CUI」
まず最初にGUI(グラフィカル・ユーザ・インターフェース)とCUI(キャラクタユーザインタフェース)の違いをざっくり説明します。
・CUIは、キーボードとディスプレイしか制御できない上に、アルファベット文字と一般記号しか扱えない。
・GUIは、好きな図形や絵や文字が表示でき、マウスポインターなど使って直感的な操作ができる。
古いパソコンはCUIしか備えていませんでした。1960代にコンピュータの使い勝手をよくするためにGUIという考え方が登場しました。
主観的には、GUIが普及し始めたのは1990年代、そして、1995年のWindows95で爆発的にGUIが普及したと感じています。
「ウィンドウシステム」
GUIを実現するための仕組みやソフトウェアの総称。特定の資料やソフトウェアを指しているものではありません。(Linuxで使われているウィンドウシステムの代表格は、X Window Systemです)
「ディスプレイサーバ」
ウィンドウシステムと重複する用語とも取れますが、ウィンドウシステムが仕組みや資料など全体を指す用語に対して、ディスプレイサーバはその実装(ソフトウェア)を指す用語です。
ディスプレイサーバも特定の実装(ソフトウェア)を指すものではなく総称です。(Linuxで使われているディスプレイサーバの代表格は、X.Org Serverです。その他に有望なWayland、マイナーだが開発中のMir、開発終了のXFree86があります)
「ウィンドウマネージャ」
ウィキペディアによると、
"ウィンドウシステムとウインドウマネージャを明確に区別して設計されていないシステムもあれば、ウィンドウシステムとウインドウマネージャを明確に区別して設計されているシステムもある"
とあります。
Linuxでは、後者で明確に区別して設計されています。
この用語も総称です。(Linuxで使われているウィンドウマネージャの代表格は、Xウィンドウマネージャです)
「X Window System(Xウィンドウシステム)」
ウィキペディアによると、
"X Window Systemとは、ビットマップディスプレイ上でウィンドウシステムを提供する表示プロトコルである。リファレンス実装として X.Org Server があり、標準ツールキットとプロトコルを提供し、Unix系オペレーティングシステム (OS) やOpenVMSなどでのグラフィカルユーザインタフェース (GUI) を構築するのに使われる。他の多くの汎用OSにも移植されている。"
となっています。
X Window Systemとは、仕組みや方法をまとめた資料。と、私は解釈しました。
なので、X Window Systemというソフトウェアは存在しないのですが、それでは解りづらいということでリファレンス実装のソフトウェア(X.Org Server)が作成されました。元々はリファレンス実装なのですが、他にXウィンドシステムに準拠したソフトウェアが存在しなかったために(以前はXFree86があったが)、このリファレンス実装(X.Org Server)が事実上の標準になっていると考えると納得がいきます。(狭義では、https://www.x.org/releases/X11R7.7/doc/ の Protocol specifications: 部分。広義では、このURL全体)
LinuxのGUI = X Window System は、あながち間違いではありませんが、Linuxをより深く知ろうとするならば、
・X.Org Server
・Xウィンドウマネージャ
・ウィジェット。ツールキット
・アプリのGUI機能
などのソフトウェアが連携してLinuxのGUIが成り立っていることを意識し、それぞれの役割を理解するべきです。
なお、開発元は、"X Window System"の他に、別名として"X"や"X11"を使うことを求めています。
「X.Org Server(Xサーバ)」
X Window Systemに準拠したディスプレイサーバ(キーボート、マウスなどからの入力と、ディスプレイへの表示を行うソフトウェア)。
アプリ(ブラウザやオフィースソフトなど)が直接ハードウェアを制御してGUIを実現することもできるのですが、そうしてしまうと、他のアプリがキーボートやマウス、ディスプレイを使えなくなります。そうならないようにX.Org Serverがハードウェアとアプリ間を仲介します。
画像や図形をディスプレイに表示するための機能(グラフィックコンテキスト)をアプリに提供するのもX.Org Serverの役割です。ちなみに音(audio)やプリンタはX.Org Serverは関与しません。
※名称は、"X.Org Server"の他に、"XServer"、"X.Orgサーバー"、"Xサーバー"と表記されている場合を見かけます。また"Xサーバ"と語尾に"ー"が付かないのは"プリンタ"や"メモリ"と同じ表記ゆれです。
「XFree86」
X Window Systemに準拠したディスプレイサーバ。X.Org Serverと似た機能を提供していましたが、今ではメンテナンスが終了しています。なのでX Window Systemに準拠したGUIはX.Org Serverのみとなっています。
「Wayland」
Waylandは、X.Org Serverを置き換える存在です。
X.Org Serverが準拠しているX Window System(X11プロトコル)は、初版リリースが1987年とかなり古く、近年のGPUや高解像度などにそぐわなくなってきています。
そこでWaylandはプロトコルを一新しグラフィクス周りの高速化を図っています。X.Org Serverの全ての機能を置き換えるというわけではありません。
「Mir」
Waylandに押され、重要性は感じませんが時折耳にするディスプレイサーバです。
下記の記事が詳しいです。
第652回 キミはMirを憶えているか
「Xウィンドウマネージャ」
Xウィンドウマネージャっているの?を参照してください。
「ウィジェット・ツールキット」
アプリにはボタンやスクロールバー、テキスト入力など、さまざまな部品が使われていますが、これらを一から作るのは、とても手間です。
ウィジェット・ツールキットは、それら部品がまとめられたライブラリ(プログラム)です。
GTK+(GNOME)や Qt(KDE)が有名ですが、アプリを作成するのに必ずいるという訳ではなく、プログラマーの手間を軽減するためのものに過ぎません。
「Xディスプレイマネージャ」
パソコンの電源を入れ、しばらくするとグラフィカルなログインの画面が表示されます。そのログインの画面がXディスプレイマネージャです。
Xディスプレイマネージャが無い場合、パソコンの電源を入れた後に、tty画面を起動して、"startx"を入力しないといけなくなりますが、無くても全然困らないものです。
「デスクトップ環境」
デスクトップ環境は、いろいろなGUIソフトウェアをまとめたソフトウェアスイートですが、デスクトップ環境≒(ニアリーイコール)Xウィンドウマネージャと考えてもあながち間違いではありません。なぜなら、例えば私の場合、デスクトップ環境にXfceを使ってるのでXウィンドウマネージャはxfwm4になります。このxfwm4を変えることはありませんが、ファイルマネージャ(Thunar)以外は、GNOMEのテキストエディタ(gedit)、GNOMEの端末を使っています。どのデスクトップ環境を選んでもXウィンドウマネージャ以外は簡単に自由に選択できます。そして、ウィジェット・ツールキットも、必要に応じてGTK+(GNOME)やQt(KDE)など自由にインストールできます。
団体と、主な提供物
X.Org Foundation
・X Window System(資料)
・X.Org Server(ソフトウェア)
・Xlib(ライブラリ)
freedesktop.org (旧名称: X Desktop Group(XDG))
・ICCCM(Inter-Client Communication Conventions Manual)(資料)
・EWMH(Extended Window Manager Hints)(資料)
・X clipboard explanation(資料)
・DnD(a drag-and-drop specification)(資料)
GNOME
・Mutter(Xウィンドウマネージャ)
・GTK+(ウィジェット・ツールキット)
KDE
・KWin(Xウィンドウマネージャ)
・Qt(ウィジェット・ツールキット)
The Linux kernel(Linuxカーネル)
・DRM(ドライバ)
・KMS(ドライバ)
まとめ
LinuxのGUIは解りにくいと感じます。なぜなら、複数の団体があり、似たようなソフトウェアがあり、過去の使わなくなった機能から実験的な機能まで、こんがらがってあるからです。Linuxに馴染みの薄いと混乱してしまいます。
ここで紹介した用語はLinuxのGUIの一部ですし、説明が主観的です。それでも、筆者の記憶の整理と、読者の知識の整理に役立つのではないかと考えます。