D-Bus
# D-Bus

En informática, D-Bus (Desktop Bus) es un sistema de comunicación entre procesos (IPC) y una llamada a procedimiento remoto (RPC) , para aplicaciones de software con el fin de comunicarse entre sí. D-Bus fue desarrollado como parte del proyecto freedesktop.org, el cual fue fundado por Havoc Pennington de Red Hat para normalizar los servicios proporcionados por los entornos de escritorio de Linux como GNOME y KDE.

## Arquitectura

D-Bus es un mecanismo de comunicación entre procesos (IPC) consistente en tres capas:

* Una biblioteca, libdbus, que permite a dos aplicaciones conectarse e intercambiar mensajes.
* Un demonio ejecutable que funciona como bus de mensajes, construido sobre libdbus, al cual pueden conectarse varias aplicaciones. El demonio puede encaminar mensajes desde una aplicación a ninguna o más aplicaciones.
* Bibliotecas adaptadas (wrappers en inglés) para su uso en frameworks concretos.

Los dos principales puntos de uso de D-Bus son los siguientes:

* Comunicación entre aplicaciones de escritorio en la misma sesión, facilitando la integración de aplicaciones dentro de un mismo entorno de escritorio y el tratamiento de asuntos relativos al ciclo de vida de procesos.
* Comunicación entre el sistema operativo y la sesión de escritorio, incluyendo dentro del sistema operativo al núcleo y algunos demonios o procesos.

## Funcionamiento de D-Bus

Toda aplicación que utilice D-Bus contiene objetos, normalmente definidos (aunque no es necesario) como GObject, QObject, objetos C++ u objetos Python. Cuando se recibe un mensaje a través de una conexión D-Bus, este se envía a un objeto específico, no globalmente a la aplicación. De esta forma, D-Bus se apoya en componentes software, y de cara al usuario parece como si un objeto fuera serializado a través de la conexión IPC, sin importar si existe o no un objeto al otro lado de la comunicación.

Para permitir la especificación de destino a los mensajes, debe existir un medio para indicar esa referencia. En muchos lenguajes de programación, esto recibe el nombre de puntero o referencia. Sin embargo, estas referencias se implementan como direcciones de memoria relativas al espacio de direcciones de la aplicación, lo cual no puede intercambiarse de una aplicación a otra.

Para resolver esto, D-Bus introduce un nombre para cada objeto. Dicho nombre se muestra como una ruta del sistema de ficheros. Por ejemplo, un objeto podría llamarse /org/kde/kspread/sheets/3/cells/4/5. Resulta aconsejable utilizar rutas fácilmente inteligibles por humanos, si bien los desarrolladores son libres de crear objetos con nombres como /com/mycompany/c5yo817y0c1y1c5b si así lo desean.

Los nombres de objetos D-Bus se aglutinan en espacios de nombres para asegurar que módulos distintos de código se mantengan separados. Los espacios de nombres generalmente están prefijados en función de los componentes utilizados por los propios programadores (por ejemplo, /org/kde).

