QEMU: internal APIs and conflicting world views

How abstractions inside QEMU (don't) work together

QEMU is an open source machine emulator and virtualizer written in C. Over time it has evolved multiple interfaces to interact with the outside world, and multiple internal APIs and abstractions to model and keep track of data. The talk will be a review of some of the challenges and trade-offs involved in making those abstractions work together.

Over time, QEMU has evolved multiple interfaces to interact with the outside world (command-line interface, configuration files, its monitor protocol), and multiple internal APIs and abstractions to model and keep track of data (including configuration, device hierarchy, device state, etc).

Understanding the goals and limitations of each of those abstractions and finding their way through the long list of acronyms (qdev, QOM, QAPI, QMP, VMState, QemuOpts, QObject, etc) can be intimidating to developers not familiar to QEMU. Sometimes each of them have conflicting world views, different goals and constraints, and interaction between them generate interesting challenges to developers working on QEMU. The talk will be a review of some of the challenges and trade-offs involved in making those abstractions work together.

The target audience are developers that want to get more familiar with QEMU internal APIs, or see what are the lessons learned (or not learned) from them.