libdbus

The reference implementation. The API is low-level and designed to be used in bindings. The developers recommend that you use a higher-level library or binding instead.

Distribution support: Everything. All Linux distros, all BSD ports distributions, Homebrew.

Used by too many things to list. Here are some highlights:

  • User applications: Firefox, Chromium, Steam
  • System services: jack2, Pulseaudio, libvirt, BlueZ

According to 1, it’s not that hard and is practical to use even though it’s low level.

Lennart Poettering says in 2 that its API is hard to use, but that it provides useful building blocks, it is robust and safe, and it is portable to many operating systems. He recommends it in cases where you need portability to multiple operating systems and you don’t already use Glib even though it will require manual work.

GDbus

An original implementation that’s part of GLib. It’s intended to be used by GTK apps.

Distribution support: Everything.

Used by: GNOME and XFCE applications, playerctl, lxcfs (switched from libnih; 3 explains why)

Lennart Poettering says in 2 that the API is expressive and easy to use if you use it to expose GObject objects. It works well with code that uses GLib-style programming.

QtDbus

A higher-level binding for libdbus. It’s included in Qt. It’s actually a C++ library, not C. As far as I know there are no C bindings for Qt.

Distribution support: Everything.

Used by: KDE and LXQt applications

sd-bus

Part of the libsystemd shared library. It’s a new D-Bus implementation intended to be smaller and faster.

Distribution support: Linux distros that include systemd. That means no Alpine, Void, Slackware, BSD, or macOS.

Used by: systemd, cmus

According to Lennart Poettering in 2, sd-bus was designed to a low-level library that is easy to use, unlike libdbus. He also says that it’s much faster than libdbus or GDbus. It is not designed with portability in mind. Instead, it focuses on being the best Linux-specific D-Bus implementation.

eldbus

Another binding for libdbus. It’s part of EFL, the libraries from the Enlightenment Desktop.

Distribution support: Most Linux distros (It’s not in a few less popular distros such as Solus, Slackware, and CRUX), FreeBSD (but not OpenBSD or NetBSD), and macOS.

Used by: Enlightenment applications

libnih-dbus

libnih is an independent, generic C library. It includes a module called libnih-dbus that provides a libdbus binding. It also exposes an API that can be used to build a D-Bus daemon.

Distribution support: Most Linux distros. Ubuntu LTS versions. Not packaged in any BSD or macOS.

Used by: startup (formerly called Upstart)

Even though it’s a somewhat obscure library, it is packaged in the majority of Linux distributions because a handful of Canonical projects have used it (e.g. CGManager and Upstart, now spun off to a community project called startup). lxcfs is a Canonical project that used to use it, but it switched to Glib’s GDbus in 2015. Ubuntu subsequently removed libnih from its non-LTS repos since there are no other packages that require it.