The purpose is rather to support file formats that can offer block
device functionality, without having to (re)write their support
directly in kernel. AFAICT, vnd(4) does not support sparse files,
and qcow/raw formats are sparse. The quickest way to expose those
through a vnd(4) like interface is probably qemu-dm + pud(4).
but why do they need to be exposed as a vnd-like interface, if the
tool which will read them is already a userland process ? this
tool could read the filesystem image by itself, isn't it ?