asynchronous dbus with C++ co-routines
Main Track,
sdbusplus generates ergonomic and compile-time type-checked dbus bindings built atop sd-bus. This library is heavily used within the OpenBMC project to provide all IPC between its many userspace processes. This talk will give an overview of how OpenBMC leverages dbus, how sdbusplus facilitates its usage, as well as an introduction on our approach for asynchronous programming with C++ co-routines.
sdbusplus generates ergonomic and compile-time type-checked dbus bindings built atop the systemd dbus implementation: sd-bus. This library is heavily used within the OpenBMC project where it is used to facilitate all IPC between its many userspace processes.
Recently the sdbusplus library and binding generators have been enhanced to support asynchronous programming using C++ co-routines and based on the upcoming C++26 'standard executors' model and implementation. This implementation yields a much clearer coding approach than traditional callback-style asynchronous libraries such as Boost::ASIO for async-heavy dbus clients. The talk will give an introduction to C++ co-routines, the stdexec model, and the sdbusplus implementation.
Additionally, the talk will give an overview on how OpenBMC leverages dbus to facilitate IPC. The OpenBMC code stack is a collection of domain specific microservices that communicate over dbus. The interfaces are documented in a YAML format, which is consumed by the sdbusplus binding generator, and yield compile-time compliance checking of both dbus server and client implementations for the OpenBMC stack. This process is akin to microservice protocol binding generators, such as gRPC or Thrift, but appropriate for inter-process communication on Linux using the existing dbus-broker implementation.