[[diary/Kojima]]

・IPCがらみのメモ

もともとUNIXの世界では、それぞれのプロセスは独立していて他のプロセスのことなど知らずに、
与えられた入力を標準出力に書き出し、それをパイプでつなぐことでプロセス間の通信を行なっていた。

その次の、サーバ・クライアントモデルの場合、サーバとクライアントはそれぞれ独立した世界で動作しながら、
相互に情報をやりとりしないといけないので、名前付きパイプを使ったり、ソケットを使ったりしていた。

さらに時代が進み、GUI環境の世界になってくると、1対1のサーバ・クライアントモデルではやっていけなくなったので、
それぞれのデスクトップ環境ごとに、多対多のプロセス間でデータをやりとりする仕組みを考えることになった。

GNOMEは、CORBA(Common Object Request Broker Architecture)というOMG(Object Manegement Group)という
標準化団体が定めた汎用的なオブジェクト間通信モデルを採用し、ORbit2とBonoboというソフトウェアで実装していた。

一方、KDEはX11上のICE(Inter Client-communication)モデルの上に、DCOP(Desktop COmmunication Protocol)という仕組みを作って、
それをアプリケーション間の通信に利用していた。

こういうフリーソフトウェア間のデザインの齟齬を調整するために,
freedesktop.org が、Unix系のOS上で汎用的に使える機能をあれこれ提案、実装していて、
そこで提唱されたのがD-Busというメカニズム。

D-BusはDCOPのデザインを参考に設計されているそうだけど、システムバスとセッションバスという2種類のバスを用意して、
システム全体に影響する情報と、特定のアプリ間の連携に関する情報を分離できるようになっている。

もともとDCOPを用いていたKDEは、D-Busの考え方と親和性が高いので、KDE4では全面的にD-Busを採用するようになっている。
GNOME3はまだ調べていないのだけど、かってのORbit2/BonoboからD-Busを使った実装に移行しているのだろうか?
- もともとUNIXが生まれたCUIな世界では、「パイプ」が十分強力なプロセス間通信ツールだったけど、GUIな世界では、それぞれのプロセスが閉じた世界を持っている、というUnixの設計は時代遅れな印象。WindowsやMacOSは調べてないのだけど、その手のプロセス間通信の機能がカーネルレベルで用意されてたりするのだらうか? -- [[kojima]] &new{2011-11-16 (水) 23:07:54};
- そういう風に考えると、結局「統合デスクトップ環境」というのは、プロセス間通信をどうするかに帰着するような気すらする。 -- [[kojima]] &new{2011-11-16 (水) 23:11:12};
- こういうお話は、とてもおもしろいです。組み込みの世界でも似たような話で、永遠の初心者にはちょっとつらい世界になってます。 -- [[きゅうる村]] &new{2011-11-17 (木) 12:38:32};
- MS-Windowsでは脊髄反射的にOLE。そこで止まってしまった。まあこのあたりさわりたくないのでtwm,qvwm。ああ選べてよかった。 -- [[名倉]] &new{2011-11-17 (木) 13:12:37};

#comment

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS