Schi Heil と叫ぶために

hiroakiuno's blog

DirectFB とウィンドウシステムの関係を整理してみよう

組み込み GUI 環境の設計と実装という本を読み始めた。

組み込みGUI(ウィンドウ・システム)環境の設計と実装

組み込みGUI(ウィンドウ・システム)環境の設計と実装

X の設定や Tips ではなく、ウィンドウの制御とは何かという根本的なところを詳しくなりたいと思って本屋を物色していたところ見つけた。内容は X や GTK+ を使わずに独自のウィンドウシステムでアプリを作るという実装方法を中心とした内容で面白い。

本はまだ途中だが、本の具体的な実装の話とは別に、一般にウィンドウシステムとかツールキットと呼ばれているものがそれぞれ何をどこまでやっているのかを自分なりに整理してみようと思いたった。思い立ったのだが「ウィンドウシステムとツールキットの関係を整理してみよう」で書き始めたところ、やりだすと次から次へとあれは何だとかこれとどう違うんだという疑問が出てきて、どんどんハードルが上がってきて全然終わらないので、とりあえず第一弾としてウィンドウシステムとは何かと、Linux の Frame Buffer の上に位置すると理解している DirectFB がどうやらウィンドウシステムの方も意識しているようで、まずその辺りをまとめてみようというのが今回のエントリ。

ということで、まずはウィンドウシステムの定義から。

ウィンドウシステム - Wikipedia

GUI (さらに言えばデスクトップ環境)のコンポーネントであり、ウィンドウマネージャの実装をサポートし、グラフィックハードウェアやポインティングデバイス(マウスなど)やキーボードの基本的なサポートを提供する。

同じページの具体例の部分に着目すると、

例えば、マウスカーソルを描画するのはウィンドウシステムである。

(中略)

プログラマから見れば、ウィンドウシステムはフォントのレンダリングや線の描画などグラフィカルなプリミティブを実装しており、上位のグラフィカルインタフェースにグラフィックスハードウェアを抽象化したインタフェースを提供する。

あと、先の本の最初で「ウィンドウ・システムの登場と意義」という見出しで X Window System について書いているところを抜粋すると、

描画機能の上にウィンドウという一つのジョブとリンクした概念を取り込み、これを管理するウィンドウ管理、ウィンドウを複数重ねて表示させるための領域管理、ウィンドウの上下管理、オペレーターが操作したいウィンドウに入力デバイス(キーボード、マウス等)を論理的につなげる管理など、様々な機構が X ウィンドウ上で実現されました。

組み込みGUI(ウィンドウ・システム)環境の設計と実装 (p.15)

定義はこんな感じだが、比較で理解したいので少し脱線してウィンドウシステムとウィンドウマネージャー(統合デスクトップ環境)の違いも整理してみよう。また同じ Wikipedia のページで恐縮だが、

ウィンドウシステム - Wikipedia

ウィンドウシステムという用語は、ウィンドウマネージャやアプリケーションが分担しているグラフィカルインタフェースも指す場合がある。オペレーティングシステムによってはそれらの境界線があいまいだが、厳密に言えば個々のウィンドウ自体はウィンドウシステムに含まれない。

(中略)

X Window System は階層化されており、それ自体はGUIのルック・アンド・フィールや振る舞いを規定せず、ウィンドウマネージャやウィジェット・ツールキットやデスクトップ環境に任せている。

ウィンドウを作る道具を提供するのがウインドウシステムの役割であって、ウィンドウ制御自体はそのメモリの確保とかも含めてウィンドウシステムを使うクライアント側の責務と整理できるだろう。そしてそのクライアントがウィンドウマネージャーだったり統合デスクトップ環境になる。ちなみに、さらに脱線してウィンドウマネージャーと統合デスクトップ環境の違いだが、こちらはいくらでも見つかりそうだが、手元の Debian 本の説明が分かりやすかったので引用すると、

ウィンドウマネージャーが管理できるのはウィンドウ枠やタイトルバー部分などの見栄えや操作だけで、アプリケーションそのものの見栄えや操作方法には関与しません。

Windows や MacOS では、その作者である Microsoft 社や Apple 社が、ボタンやメニューバーなどのウィンドウ部品を用意しており、この部品を組み合わせたアプリケーションでは見栄えや操作感が統一されます。

このように見栄えや操作が統一された環境を UNIX の世界では「統合デスクトップ環境」と呼んでいます。

Debian GNU/Linux徹底入門第3版 Sarge対応

とある。WindowMaker や Sawfish だけを使っていたときよりも、GNOMEKDE でそれを使うほうが、ウィンドウ枠だけでなく、メニューとか設定画面とかも含めてルック・アンド・フィールが統一され、変な言い方だがより Windows ぽくなると感じる。違いはその印象通りだろう。

話を DirectFB に戻す。DirectFB とは

DirectFB is a thin library that provides hardware graphics acceleration, input device handling and abstraction, integrated windowing system with support for translucent windows and multiple display layers, not only on top of the Linux Framebuffer Device.

directfb.org | Main

定義を読むと(直接そうは書いていないが) DirectFB の FB は Linux Frame Buffer の FB だと分かる。X の設定にもビデオカードと直接通信するか、カーネルのフレームバッファを用いるのかの選択があるが、ビデオカードへのアクセスはフレームバッファを使うのが最近の OS の流れのようだ。

ビデオカードの上に、Frame Buffer があって、その上に Frame Buffer を簡単に使えるライブラリを作ろうというのが、元々の DirectFB だったが、そこにウィンドウシステム的な考え方も追加されてきたのが現在の DirectFB のよう。

DirectFBはLinuxのFramebufferを簡単に使えるようにしてしまえっ!というライブラリだったはず。それが今ではGPUのアクセラレート機能が使えたり、独自のWindowシステムを入れたりと謎な拡張をしています。FusionSoundという音源用ライブラリーまであるみたいですね。

2006-05-21 - togeの日記

それなりにトレンドのようで例えば LinuxTV は DirectFB を用いているらしい。

組み込み系では Window System が使いたいとなっても X の移植というのはあまりない。なぜなら X はサーバークライアントをベースに作っているので無駄が多くなる。組み込み系で別の機器の表示をこっちに表示するなんてことは少ないないだろうから、だったらもっとコンパクトなものがほしい、ハードウェアを直接操作することで X のオーバーヘッドをなくし、軽いウィンドウシステムもあればベターというのが組み込み系における DirectFB の存在の理解。で、DirectFB で足りない部分を GTK+ が補って、GTK+ on DirectFB とか Qt on DirectFB とツールキットの話に向かうのだが、とりあえず今日はここまで。


組み込みGUI(ウィンドウ・システム)環境の設計と実装

組み込みGUI(ウィンドウ・システム)環境の設計と実装