Brussels / 1 & 2 February 2020


Uplift your Linux systems programming skills with systemd and D-Bus

Practical examples and best practices on how to leverage systemd and D-Bus in Go

Systemd is a de-facto standard process manager in all mainstream Linux distributions for almost a decade. D-Bus is most widely used inter-process communication on a local host. It's used in many core apps on Linux Desktop.

Yet both systemd and D-Bus are undervalued. Very often, programs that are only intended to run on Linux attempt to re-implement (with bugs) what systemd and D-Bus already provide (for example: watchdog function, reliable process termination, notifying another program about some event, coordination between multiple processes).

The goal of this talk is to shift perspective on systemd and D-Bus (using concrete practical examples in Go), and show how basic building block these systems provide can be re-used in software you write for modern Linux system.

This is an exploratory talk. Then intent is to look at systemd and D-Bus from a different angle.

Most of current tutorials about systemd focused on operating a service like apache, nginx or redis. D-Bus tutorials are very abstract, basic and lack any concrete useful use-cases.

I plan to present few recent additions to systemd, such as portable services and resource control. As well as re-introduce few existing concepts, like sd-notify, watchdogs and transient units.

On D-Bus I plan to show how to use bus abstraction and few neat features, like passing file descriptors and receiving notifications.

The focus is on how to not re-invent things that systemd and D-Bus do much better.

Examples are given as a few simple Golang programs, with full source available on github.

The indented audience is anyone who write and operate Go code on Linux. Preferred experience of the audience: basic knowledge of Linux and Golang, familiarity with systemd and D-Bus concepts would be useful as well.


Photo of Leonid Vasilyev Leonid Vasilyev