- D-Bus
-
"DBus" redirects here. For other uses, see Dbus (disambiguation).
D-Bus Developer(s) Red Hat and the community Stable release 1.4.12[1] / June 10, 2011 Operating system Cross-platform Type Inter-process communication License GNU General Public License or Academic Free License 2.1[2] Website www.freedesktop.org/wiki/Software/dbus In computing, D-Bus (Desktop Bus) is a simple inter-process communication (IPC) open-source system for software applications to communicate with one another. Heavily influenced by KDE2–3's DCOP system, D-Bus has replaced DCOP in the KDE 4 release. An implementation of D-Bus supports most POSIX operating systems, and a port for Windows exists. It is used by Qt 4 and GNOME. In GNOME it has gradually replaced most parts of the earlier Bonobo mechanism.
Red Hat operates as the primary developer of D-Bus as part of the freedesktop.org project.
Contents
Design
D-Bus allows programs to register with it in order to offer services. It also allows client programs to check for the availability of services. Programs can also register as waiting for events of the kernel, as in the case of hot-swapping hardware.
D-Bus functionality runs as a daemon: typically
dbus-daemon
. Users can run several instances of it, each called a channel. Most systems implement a privileged system channel, plus a private channel for each logged-in user. The private channels are required because the system channel has access restrictions.The purpose of the private channel is to provide unrestricted communication among any applications of the user.
Currently, D-Bus works over Unix sockets, but work is being done to create a 'peer-to-peer' socket in the Linux kernel able to route messages between applications, leaving the daemon as a top-level manager.[3] The main advantage of this new approach is that it improves speed by halving the number of memory-copy operations.
Architecture
D-Bus has three architectural layers:[4]
libdbus
- a library that allows two applications to connect to each other and exchange messagesdbus-daemon
- a message-bus daemon executable, built onlibdbus
, that multiple applications can connect to. The daemon can route messages from one application to zero or more applications, thereby implementing the publish/subscribe paradigm.- wrapper libraries based on particular application frameworks
The design of D-Bus addresses two specific cases:
- communication between desktop applications in the same desktop session; to allow integration of the desktop session as a whole, and address issues of process lifecycle
- communication between the desktop session and the operating system, where the operating system would typically include the kernel and any system daemons or processes
Mechanisms
Each application using D-Bus contains objects that usually map to GObject, QObject, C++ objects, or Python objects. Each D-bus object operates as an instance rather than as a type. Messages received over a D-Bus connection get routed to a specific object, not to the application as a whole. In this way, D-Bus resembles software componentry, as it appears to users as if they are interacting with an object across the IPC connection, whether or not there is an object on the other side.
To allow messages to specify their destination object, the system needs a way to refer to an object. Many programming languages refer to this as a pointer or reference. However, these references are implemented as memory addresses relative to the address space of the application, and thus can't be passed from one application to another.
To solve this, D-Bus introduces a name for each object. The name looks like a filesystem path, for example an object could have the name /org/kde/kspread/sheets/3/cells/4/5. D-Bus encourages human-readable paths, but developers are free to create an object named /com/mycompany/c5yo817y0c1y1c5b if it makes sense for their application.
The D-Bus objects' names are namespaced to keep different code modules separated. Namespaces are generally prefixed with the developer's reversed domain name components (e.g. /org/kde).
See also
- Remote procedure call
- CORBA Common Object Request Broker Architecture, cross language cross platform object model
- GNOME Bonobo deprecated GNOME cross language Object Model
- KDE DCOP deprecated KDE interprocess and software componentry communication system
- KDE KPart KDE component framework
- XPCOM Mozilla applications cross Platform Component Object Model
- COM Microsoft Windows only cross language Object Model
- DCOM Distributed COM, extension making COM able to work in networks
- Common Language Infrastructure current .Net cross language cross platform Object Model
- Java Remote Method Invocation (Java RMI)
- Foreign function interface
References
- ^ "D-Bus 1.4.12 Release announcement". 2011-06-10. http://lists.freedesktop.org/archives/dbus/2011-June/014448.html. Retrieved 26 June 2011.
- ^ Havoc's Blog July, 2007
- ^ http://alban.apinc.org/blog/2010/09/15/d-bus-in-the-kernel-faster/
- ^ "Get on the D-BUS". Linux Journal. http://www.linuxjournal.com/article/7744. Retrieved 2008-01-23.
External links
- D-Bus at the Freedesktop.org home page
- Introduction to D-Bus on the Freedesktop.org wiki
Projects hosted by freedesktop.org Components Avahi · Compiz · Create Project · D-Bus · DRI · GTK-Qt (moved) · HAL (deprecated) · nouveau · PackageKit · Portland Project · systemd · Wayland · X.Org ServerLibraries Frameworks See also Libre Graphics MeetingInter-process communication in computing Methods File · Memory-mapped file · Message passing · Message queue and mailbox · Named pipe · Anonymous pipe · Pipe · Semaphore · Shared memory · Signal · Sockets : Internet and Unix domainSelected protocols
and standardsLibraries
and frameworksChannel · D-BusCategories:- Inter-process communication
- Freedesktop.org
- GNOME
- KDE Platform
- Free network-related software
- C++ libraries
Wikimedia Foundation. 2010.