Today, you make no attempt to support older versions even if their
format is quite sane. Take ps2_kbd as an example.
The new format (v3) is:
VMSTATE_STRUCT(common, PS2KbdState, 0, vmstate_ps2_common, PS2State),
VMSTATE_INT32(scan_enabled, PS2KbdState),
VMSTATE_INT32(translate, PS2KbdState),
VMSTATE_INT32_V(scancode_set, PS2KbdState,3),
This is nice and should support v2 and v3.

No. I don't want any free-form C code in vmstate. That will kill quite
a few of the vmstate advantages. Imagine a tool dumping snapshot data.
What this tool should do when it finds such a FUNC field? It has
absolutely no idea what is in there ...