Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Some links on this page are affiliate links: if you buy through them we may earn a commission, at no extra cost to you.

kdbus was a proposal to move D-Bus-style message delivery into the Linux kernel. It aimed to reduce message-passing overhead and improve integration with Linux credentials, namespaces, and system startup. It was developed and tested outside the mainline kernel, but never merged. Today, kdbus is a historical project—not a Linux feature to enable or install.

The Linux Foundation’s January 2014 article, “kdbus details,” captured the proposal while it was still being explored. Its claims about planned testing and possible upstream submission describe that moment, not the current state of Linux.

What kdbus was supposed to do

The name is commonly understood as “kernel D-Bus.” The shorthand “D-Bus in the kernel” is useful, but incomplete: kdbus proposed changing where message routing and delivery happened while retaining D-Bus-facing concepts and compatibility goals. It was not simply a new name for the D-Bus protocol, nor an alternative userspace daemon.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

The proposal grew out of efforts to provide fast, reliable, secure local messaging. An earlier Linux Foundation account of AF_BUS and D-Bus in the Linux kernel described goals including point-to-point messaging, multicast, and a compatibility layer for D-Bus users. The kdbus proposal aimed to reduce work done by a userspace broker, avoid some message-copying overhead, expose kernel-known information such as credentials more directly, and make bus-like communication useful earlier in boot or later in shutdown.

Those were design goals, not proof of a universal speedup or a solved security problem. Any performance benefit would have depended on factors such as message sizes, traffic patterns, participant count, scheduling, and the specific implementation being compared.

How ordinary D-Bus works

D-Bus is a protocol and message-bus architecture, not one particular daemon. Applications connect to a bus, which tracks connections and names and routes messages. A client can own a well-known name so other programs can find a service. Messages include method calls and their replies, signals sent to interested listeners, and errors. D-Bus also supports service activation, in which a service can be started when a request for it arrives.

Linux systems commonly have a system bus for system-wide services and user or session buses for user applications. Local D-Bus transports normally use Unix-domain sockets. The D-Bus specification defines concepts such as names, object paths, interfaces, methods, signals, transports, and activation. dbus-daemon is the reference implementation, but applications may use other libraries and implementations; D-Bus itself is not synonymous with that daemon.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

What kdbus would have changed

In a conventional bus arrangement, a broker in userspace receives and routes messages. kdbus proposed kernel-mediated routing and buffer handling instead. This diagram shows the intended contrast, not every implementation detail:

Traditional D-Bus:  Client A → userspace bus broker → Client B
Proposed kdbus:     Client A → kernel-mediated bus → Client B
                                      └─ routing and kernel-visible context
Area Traditional D-Bus model Proposed kdbus direction
Routing A userspace broker routes messages between connections. Routing would be mediated by a kernel IPC interface.
Message handling Clients and broker handle buffers and forwarding in userspace. The proposal sought more direct kernel-managed delivery and fewer copies in relevant paths.
Credentials and process context Checks and integration involve the broker and operating-system interfaces. The kernel could provide closer access to credentials and context such as namespaces.
Startup lifecycle A usable bus depends on the required userspace infrastructure being available. One goal was to make bus-style communication available earlier in startup and during shutdown.

Closer kernel integration could also make policy enforcement and auditing more directly aware of operating-system state. That should be read as an intended advantage, not a guarantee that kdbus would have made every system more secure. Kernel placement changes the trust boundary and implementation responsibilities; it does not make security automatic.

Why systemd cared

Systemd uses D-Bus for service management and system integration. A bus available early in boot, and closely tied to process lifecycle and namespaces, was therefore attractive. The 2014 Linux Foundation article said kdbus was being integrated and tested with systemd and that a hackfest was planned to address remaining issues. Those were project updates from 2014, not evidence that present-day systemd requires or uses kdbus.

Systemd can work with D-Bus without a kdbus kernel subsystem. The current D-Bus specification documents systemd-related activation and transport arrangements; they should not be confused with kdbus.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

kdbus and Android Binder were not interchangeable

The Linux Foundation article offered a memorable shorthand: Binder is more synchronous and CPU-oriented, while D-Bus is more asynchronous and queue- or memory-oriented. In broad terms, Binder commonly follows a caller-to-callee request-and-response model in which the caller waits, whereas D-Bus routes queued messages through a bus and supports more decoupled communication.

That contrast is only a teaching aid, not a complete technical classification. The systems differ in APIs, object models, scheduling, memory handling, trust assumptions, process lifecycle, and deployment environment. The article did not present kdbus as a drop-in Binder replacement: adapting it to behave more like Binder would have required substantial Android-side work. See the original comparison for the historical discussion.

Why kdbus never became part of Linux

kdbus did not enter the mainline Linux kernel. In January 2016, Phoronix reported that it was absent from Linux 4.5, had been sent back for redesign, and had lost visible development momentum in the repositories then associated with it. That reporting helps explain the project’s trajectory, but it does not establish one universally accepted reason for the outcome. It is more accurate to say that the proposal did not achieve upstream acceptance and did not become a supported mainline subsystem.

Consequently, modern Linux users should not expect a standard kdbus kernel module or follow instructions to load one. The 2014 Linux Foundation article is useful for understanding the proposal’s ambitions, not as current setup documentation.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

What followed: BUS1 and dbus-broker

BUS1 was a later, more general kernel IPC design effort associated with developers who had worked on kdbus. It is related historical work, not simply kdbus under a new version number. Reporting in 2026 described renewed BUS1 activity, including a Rust-based effort, while also noting that BUS1 had not become part of mainline Linux. That is an emerging development, not evidence that kdbus returned or that BUS1 is an established Linux subsystem. See LWN’s 2026 reporting and Phoronix’s coverage of the Rust-based effort.

dbus-broker is different: it is a userspace implementation of a D-Bus message broker. It aims to provide a fast, reliable broker compatible with the D-Bus specification; it does not move the bus into the kernel. Its Linux kernel requirements support facilities used by the userspace program, not a kdbus-like kernel bus. The project documents integration through systemd units, but whether and how it is used depends on the distribution. Its repository listed release 37, dated June 16, 2025, as the latest release in the supplied snapshot; that release detail may have changed.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

What to use on Linux now

For ordinary desktop or server IPC, use the D-Bus implementation and packages supported by your distribution. For application development, choose an API that fits your stack: sd-bus for systemd-oriented C applications, GDBus for GLib applications, or libdbus when direct use of the reference API is needed. A distribution may use dbus-daemon, dbus-broker, or a particular combination; do not assume every Linux system has the same default. The D-Bus project’s implementation overview recommends distribution packages when in doubt.

If the need is high-throughput or low-level IPC rather than service discovery and a shared message bus, choose by workload. Unix-domain sockets are a familiar general-purpose option. Shared memory paired with an event mechanism can suit large data transfers but requires careful synchronization and lifecycle management. Pipes, eventfd, and related primitives work well for notification and control paths, not as a full service bus. Android Binder fits Android’s own process and object model; it is not a general D-Bus substitute. Varlink may suit narrowly scoped local RPC APIs, but is not a drop-in D-Bus replacement.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Check which bus is running

These commands inspect the current D-Bus environment; none detects or enables kdbus:

busctl --system list
busctl --user list
busctl --system status
busctl --user status

busctl comes with systemd tooling, so availability depends on the installed systemd package. To inspect likely service units:

systemctl status dbus.service
systemctl status dbus-broker.service

One or both units may be absent, aliased, or configured differently by the distribution. Do not manually replace a system bus based on these commands alone. Check your distribution’s documentation and service configuration first. The usual system-bus socket path on Linux is /run/dbus/system_bus_socket, though builds and configurations can differ:

ls -l /run/dbus/system_bus_socket

That path is documented in the D-Bus specification. A KDE class called KDBusService is also unrelated to kdbus; it is a KDE helper for registering applications with D-Bus, as documented in the KDE API reference.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Frequently Asked Questions

Is kdbus part of the mainline Linux kernel?

No. kdbus was proposed and tested outside the mainline kernel, but it was never merged. It is not a standard kernel feature to enable today.

Is dbus-broker the same as kdbus?

No. dbus-broker is a userspace D-Bus broker. kdbus proposed kernel-mediated message routing.

Is BUS1 just a renamed kdbus?

No. BUS1 was a related later kernel IPC design effort with broader aims. It should not be described as kdbus renamed or as an established mainline subsystem.

Does systemd require kdbus?

No. Systemd uses D-Bus-related userspace mechanisms without requiring kdbus.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.