Hi, QEMU presents a command-line interface and QMP monitor for applications to interact with. Applications actually need API bindings in their programming language. Bindings avoid reimplementing code to spawn a QEMU process and interact with QMP. QEMU is kind of lazy and de facto relies on libvirt for API bindings.
Is it time for better QEMU APIs? 1. We have qapi-schema.json. Let's render to HTML and publish versioned documentation online. 2. scripts/qmp/ contains command-line tools for QMP communication. They could use some polish and then be shipped. 3. python/qemu/ contains Python modules for managing a QEMU process and QMP communication. This should be packaged in distros and available on PyPI. 4. Go and Rust bindings would also be useful. There is https://github.com/intel/govmm but I think it makes sense to keep it in qemu.git and provide an interface similar to our Python modules. 5. A jailer is needed to isolate the QEMU process and vhost-user device backends using seccomp, Linux namespaces, and maybe SELinux/AppArmor. We used to be able to rely on libvirt for QEMU security, but it's becoming a common task for any device backend and IMO should be its own launcher tool. 6. A configuration file format is sorely needed so that guest configuration can be persisted and easily launched. Today you have to create a shell script that executes a QEMU command-line, but this is suboptimal because sharing executable scripts is dangerous from a security perspective and is hard to parse or modify programmatically. In many of these areas we already have a partial solution. It just needs more work. I think it would be worth the effort and the mental shift to really providing APIs that are easy to use by applications. What do you think? Have I missed things that are needed? Have I included things that are unnecessary? Stefan