Notes:


UML is a port of the Linux kernel to the Linux system call interface. This is not a particularly obvious idea, but it has already been done, notably with the Linux/S390 port, which is a port of Linux to VM.
It's a complete Linux virtual machine, with all of the subsystems and structure that exists on the host. I have encountered people who have the idea that UML somehow doesn't have its own scheduler or VM system or something, and relies on the host for that functionality. This is not true. UML is the full Linux kernel, and uses the host kernel only for hardware emulation.