The NetBSD rumpkernel allows for running individual drivers in userspace, while UML and vkernel are both geared towards running full kernels. UML and vkernel both look pretty similar to me though.
That's true, but that just means that rump kernels took the microkernel approach and make you do it piecemeal; I still think it counts as a different side of the same coin.