

Join the discussion
Write your take first — we'll ask for email only when you're ready to publish.
- Hacker News
- Wait until you realise QEmu (and dosbox) can do this too, while running windows or Dune II, as can old versions of virtualbox (not sure about new versions)by spwa4
- > Today, we’ll explore how you can start an unconventional VM by running a Linux kernel as a process within the Linux kernel itself. This approach doesn’t require installing virtualization software like QEMU, nor does it need root privileges, which opens up some intriguing possibilities.
That was addressed in the first few sentences.
by hrimfaxi - Interesting
That’s giving very firecracker vibes
by Havoc - Had been using this quite some time ago, it is sad that it has only 1-CPU support, preventing some SMP bugs from emerging.
Wonder if it's hard to make it SMP, if too many places use something like #ifdef CONFIG_ARCH_IS_UM to tell whether it is single CPU, it might be hard.
by c0deR3D - SMP has been implemented recently and is queued for the next release.by t-8ch
- I've often thought that if only UML would build on Darwin, we'd have a MacOS container solution that didn't need virtualisation. That involves two big unsolved problems though: building UML on not-linux, and building UML on not-x86.by regularfry
- It was great. I remember trying it about twenty years ago. The very first time I fired it up, I just typed "linux" at a prompt, and a kernel booted - right there in the terminal.
And then panicked, because it had no root. But hey, I've got a root filesystem right here!
So the second time I typed "linux root=/dev/hda1" (because we had parallel ATA drives back then).
It booted, mounted root, and of course that was the root filesystem the host was booted off.
Anyway it recovered after a power cycle and I didn't need to reinstall, and most importantly I learned not to do THAT again, which is often the important thing to learn.
- In supernested, which is a script to see how far you can nest KVM, we do in fact mount the root disk in a VM, but using a snapshot so it's safe(-ish). http://git.annexia.org/?p=supernested.git;a=treeby rwmj
- I used that very method to rescue a machine after the contents of /boot were damaged. Booting from a live CD and building a UML kernel (on another drive, there wasn't enough RAM to do it there & I didn't want to mount any of the main partitions just-in-case) allowed me to boot from the main root and rebuild initrd & friends easily. I felt proper clever!by dspillett
- Why do they initialize a disk image with /dev/urandom instead of /dev/zero? Given it's not an encrypted disk container, I don't see any valid reason to do so, but perhaps I'm not seeing something?by ale42
- Probably avoid zero write optimizations. This force actual allocation of disk space for the data, instead of pretending to do so.by ayende
- I was fascinated when I first learned of [FreeBSD Jails], I wonder if right before containerization became a thing the concept was developed further for its requirements (could it have been?) it would have offered a more efficient containerization platform.
FreeBSD Jails: https://docs.freebsd.org/en/books/handbook/jails/
by badosu - Jails are entirely different conceptually from UML; they share the host kernel and are roughly analogous to containers/namespaces. UML is an entirely separate kernel, running as user mode process.by eqvinox
- In case you wonder how UML is currently used: https://netdevconf.info/0x14/pub/slides/8/UML%20Time%20Trave...
It's testing. Using timetravel mode you can skip sleeps and speedup your unit tests massively.
by Deeg9rie9usi - …unless your tests are syscall heavy, then it can be 10-100× slower :(. It also doesn't support SMP. I really wish for a better version of this, we could really use it, especially since the "time stops while CPU is in use" part also means your tests won't randomly fail if the host is heavily loaded and things take longer. Unfortunately, doing something about it is outside my area of expertise.by eqvinox
- > In this setup, UML is essentially a userspace process that cleverly employs concepts like files and sockets to launch a new Linux kernel instance capable of running its own processes. The exact mapping of these processes to the host — specifically, how the CPU is virtualized — is something I’m not entirely clear on, and I’d welcome insights in the comments. One could envision an implementation where guest threads and processes map to host counterparts but with restricted system visibility, akin to containers, yet still operating within a nested Linux kernel.
At least in the first generation of UML, the guest processes are in fact host processes. The guest kernel (a userland process) essentially runs them under ptrace() and catches all of the system calls made by the guest process and rewires them so they do operations inside of the guest kernel. They otherwise run like host processes on host CPU, though.
Completing the illusion, however, the guest kernel also skillfully rewires the guest ptrace() calls so you can still use strace or gdb inside of the guest!
It's good enough that you can go deeper and run UML inside of UML.
> What’s the real-world utility here? Is UML suitable for running isolated workloads? My educated guess is: probably not for most production scenarios.
Back in the day there were hosts offering UML VMs for rent. This is actually how Linode got its start!
by mbac32768 - Do you know why people stopped? It would seem to be a potentially useful middle ground between docker containers and KVM VMsby steeleduncan
- The second generation was "skas" for Separate Kernel Address Space, some more background here: https://user-mode-linux.sourceforge.net/old/skas.html
The host kernel patch for skas was never merged, probably for good reason, but that and Xen/VM hardware support meant UML stopped making sense.
by dgl