I think we have a different world view.
I see 'qemu -machine foo' as creating some useful variant of 'foo'
where 'foo' is a user visible concept like a PC, or a Beagle board, or
a pSeries machine.
If I went to Fry's an bought a PC, I'd expect to plug it in and for it
to have everything I needed including USB. If I'm cheap, maybe I want
to lower the amount of RAM or reuse the VGA card I bought for
Christmas to play Halo 15 with.
I see machine options as a way to customize that PC. Maybe I want to
not include USB by default because I have some religious opposition to
protocols that start with 'U'.
Machine configuration options are the QEMU equivalent of the drop-down
box where you select options when buying a laptop from Dell.
'-nodefault' is like buying a PC out of a back of an unmarked van on a
street corner. God knows why it doesn't come with a serial port.
Maybe that got broken while it was being stolen during a break in.
Maybe it's got a VGA card but no disk controller because they sold the
VGA card separately to make more money.
Entertaining imagery, but hardly a fair description of what -nodefaults
does. -nodefaults is shorthand for "deselect everything in the drop
down box". God knows why the drop down box has "disable serial port",
but it has. God knows why the drop down box is so ugly and hard to use,
but it is. Maybe we could happily do without the "deselect everything"
shorthand if the drop down box didn't suck so much, but it does.
What libvirt really wants is to buy the *components* of a PC and build
it from scratch. They want to separately buy the mother board, the
case, the graphics adapter, etc. libvirt is the 16-year kid with
pimples who spends Saturday night reading Newegg to find the new 750W
power supply that's water cooled and tricked out with LEDs that I'm
sure we all were at some point in our lives.
Again, entertaining imagery, but hardly a fair description of libvirt's
motivation.
Things libvirt really wants:
* Stable names. Many default devices don't get any. Yes, we can fix
that. Until we do, the only way to get names is to suppress default
devices and define them yourself.
* Expose QEMU features to its users. In particular, if a device is
optional in QEMU, libvirt wants to be able to control its "enable"
bit. As it is, -nodefaults is the only way that works the same for
all default devices, and for some of them it's the only way that works
at all.
So I guess this is the long way of saying, let's not provide an
interface from the back of an unmarked van. Let's either provide a
nice drop-down menu (-machine options) or provide a Newegg catalog
that has every component in it.
I doubt we're actually disagreeing on anything substantial.
I'm sure we can improve on -nodefaults. But let's not break its core
feature "disable all default devices that can be disabled" before we
actually provide a working alternative that satisfies the needs of its
users.