[HN Gopher] Linux VM without VM software - User Mode Linux
___________________________________________________________________
Linux VM without VM software - User Mode Linux
Author : arunc
Score : 131 points
Date : 2025-10-27 22:30 UTC (1 days ago)
(HTM) web link (popovicu.com)
(TXT) w3m dump (popovicu.com)
| Havoc wrote:
| Interesting
|
| That's giving very firecracker vibes
| mbac32768 wrote:
| > 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!
| steeleduncan wrote:
| Do you know why people stopped? It would seem to be a
| potentially useful middle ground between docker containers and
| KVM VMs
| saagarjha wrote:
| It's slow for many of the things people want to use it for.
| stevekemp wrote:
| Performance, mostly.
|
| I worked for a hosting company that sold UML-based virtual
| machines, while we trialed Xen as the successor, before
| moving to use KVM instead.
|
| But also KVM supported things like live-migration and virtio
| drivers which made custom interfaces and portability easier
| to deal with.
| dspillett wrote:
| _> Do you know why people stopped?_
|
| They didn't entirely. It is still maintained, developed even.
|
| _> It would seem to be a potentially useful middle ground
| between docker containers and KVM VMs_
|
| Back in the day I actually used it that way for running "VM"s
| and some firms even sold VPS accounts based on UML. Back then
| other virtualisation options were not nearly as mature as
| they soon became, or cost proper money (IIRC VMWare was good
| by that point but there were no free or reliable OSS options
| yet), and UML offered better isolation (a full environment
| including its own root) than simply chrooting a process tree
| (fuller containers were not a thing back then either, so all
| users fully existed on the host and you couldn't give out
| root access net.).
|
| These days things like KVM and more advanced containerisation
| solve the problems most people want UML for and do so much
| more efficiently (UML performs badly, compared to other
| options, where there is a lot of kernel interaction,
| including any filesystem or network access).
|
| UML is still very useful for its original intent though:
| testing and debugging certain kernel level items like
| filesystems (FUSE is competition here in many, but not all,
| cases), network drivers & filters, and so forth. When things
| go wrong you can trace into it in ways you can not (as
| easily) with VMS and containers.
| dgl wrote:
| 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.
| g-mork wrote:
| Stopped making sense for the mass hosting use case, but it is
| still wildly useful for setting up and tearing down during
| dev work, especially when hacking on the kernel itself, which
| you can trivially attach GDB to
| ale42 wrote:
| 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?
| ayende wrote:
| Probably avoid zero write optimizations. This force actual
| allocation of disk space for the data, instead of pretending to
| do so.
| ale42 wrote:
| So to make future performance more predictable?
| ErroneousBosh wrote:
| 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.
| dspillett wrote:
| 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!
| rwmj wrote:
| 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=tree
| c0deR3D wrote:
| 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.
| t-8ch wrote:
| SMP has been implemented recently and is queued for the next
| release.
| Deeg9rie9usi wrote:
| 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.
| spwa4 wrote:
| 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)
| hrimfaxi wrote:
| > 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.
| spwa4 wrote:
| My point is that VM software, especially older software and
| emulation software, doesn't require virtualization or root
| privileges. And yes, this is confusing because QEmu _became_
| virtualization software (just like VirtualBox did). Neither
| originally used hardware virtualization for anything. Dosbox
| still doesn 't.
|
| Hell I wish someone made something that could build
| dockerfiles and immediately start them as VMs in emulation
| using just the normal socket api to emulate network.
| regularfry wrote:
| 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.
| badosu wrote:
| 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/
___________________________________________________________________
(page generated 2025-10-28 23:02 UTC)