NetworkManagerは、D-BUSおよびHardware Abstraction Layer (HAL)テクノロジを利用しています。D-BUSは、NetworkManagerデーモン、NetworkManagerの各部分、およびHAL間の通信に内部利用され、既存と新しいハードウェアを認識する機能を提供します。外部では、D-BUSはさまざまな状態変更に関する情報のブロードキャストに使用されます。
D-BUSは、C言語で記述されているプロセス間通信(IPC)用のシステムです。アプリケーション同士の通信を可能にします。D-BUSは、2002年にHavoc Pennington、Alex LarssonおよびAnders Carlssonによって、デスクトップのメッセージングプラットフォームの規格を標準化することを目的としたfreedesktop.orgプロジェクトの一部として開発されました。
D-BUSは、同じデスクトップセッションでのデスクトップアプリケーション間の通信と、デスクトップセッションとオペレーティングシステム間の通信という、2つの特殊な場合を想定して設計されました。
D-BUSは、簡潔で明瞭なアーキテクチャです。次の3つの層で構成されています。
最低レベルのライブラリで、アプリケーション同士の接続、およびメッセージの交換に使用されます。1対1通信のみをサポートしています。
複数のアプリケーションの接続を可能にする実行可能プログラムです。このデーモンは、メッセージを1つのアプリケーションからゼロ以上のアプリケーションにルーティングします。
バインディングとしても知られるラッパーライブラリは、標準の低レベルライブラリのD-BUSをラップし、開発者により良い環境を提供します。ラッパーライブラリには、libdbus-qtおよびlibdbus-glibなどがあります。
D-BUSは、メッセージバスシステムなので、バイトストリームではなくメッセージを送信します。メッセージには、タイプ識別情報のあるヘッダ、およびデータなどの本文が含まれます。メッセージは、バイナリ形式です。エラーメッセージまたはイベントの通知など、さまざまな組み込み型メッセージがあります。メッセージタイプに関する情報は、そのメッセージのヘッダ内に格納されます。ヘッダには、メッセージのパスおよびインタフェースに関する情報も含まれます。
バスデーモンは、メッセージのサーバとして機能し、通常、複数のインスタンスを持ちます。最初のインスタンスはグローバルなもので、一般的に、httpdまたはsendmailなどの従来のデーモンと類似しています。このインスタンスは、セキュリティ上の制限を多く持ち、システム全体の通信に使用されます。その他のインスタンスは、ユーザログインセッションごとに1つずつ作成されます。これらのインスタンスは、そのユーザセッションでのアプリケーション間の通信に使用されます。
通信が確立し開始される前に、アプリケーションは認証される必要があります。このため、SASLベースの簡単なプレーンテキストによるプロトコルが使用されます。正しいメッセージを正しいアプリケーションに送信するため、特別な形式のアドレスおよびメッセージバス名が使用されます。このことは、各通信が、少なくとも1つの名前を持つことを意味します。通信が切断されると、その通信のすべての名前が削除されます。
中核である低レベルのD-BUS APIは、C言語で記述されており、アプリケーションフレームワークの開発を目的としていません。D-BUSは、この目的を満たすためのさまざまな言語バインディングを提供しています。次のようなものを選択できます。
GLib
Qt
Python
.NET
Java
Perl
C++
Ruby