Site Home Page The UML Wiki UML Community Site The UML roadmap What it's good for Case Studies Kernel Capabilities Downloading it Running it Compiling Installation Skas Mode Incremental Patches Test Suite Host memory use Building filesystems Troubles User Contributions Related Links The ToDo list Projects Diary Thanks Contacts
Tutorials The HOWTO (html) The HOWTO (text) Host file access Device inputs Sharing filesystems Creating filesystems Resizing filesystems Virtual Networking Management Console Kernel Debugging UML Honeypots gprof and gcov Running X Diagnosing problems Configuration Installing Slackware Porting UML IO memory emulation UML on 2G/2G hosts Adding a UML system call Running nested UMLs
How you can help Overview Documentation Utilities Kernel bugs Kernel projects
Screenshots A virtual network An X session
Transcripts A login session A debugging session Slackware installation
Reference Kernel switches Slackware README
Papers ALS 2000 paper (html) ALS 2000 paper (TeX) ALS 2000 slides LCA 2001 slides OLS 2001 paper (html) OLS 2001 paper (TeX) ALS 2001 paper (html) ALS 2001 paper (TeX) UML security (html) LCA 2002 (html) WVU 2002 (html) Security Roundtable (html) OLS 2002 slides LWE 2005 slides
Fun and Games Kernel Hangman Disaster of the Month

### What are people using it for?

Virtual hosting

> UML can run basically anything that the host can, so it's possible to split a physical system into a bunch of independent virtual machines. Some examples:
> - David Coulson is running an entire network of UMLs, the public face of which is usermodelinux.org, which is running in one of them. He has written an paper on his adventures here. He also has a nice UML monitoring and control daemon which we intend to steal and use for umlcoop.org. Information about that can be found here.
> - I've mirrored this site and the UML downloads in a UML running on a UML server set up by Bill Stearns.
> - There are a number of commercial UML hosting providers now. These are the ones that I'm aware of:
>   - kspei.com
>   - vd-server.de
>   - LinuxVDS.com
>   - Bytemark Hosting
>   - Rimu Hosting
>   - memset
>   - Linode.com
>   - tummy.com, ltd. Hosting Services
>   - jvds.com
>   - TekTonic Network Solutions
>   - Pigs Can Fly Computing
>   - Exodus Internet Services
>   - Redwood Virtual
>   - Virtual-Server.NET
>   - Edis
>   - usermodelinux.de
>   - The Packardt Imaging
>   - meisterwerk
>   - Coherent Hosting
>   - Mythic Beasts
>   - debian.co.jp
>   - Easylinehost
>   - Server-Ranch.ch
>   - Quantact
>   - VPSLAND.com
>   - ISPBrasil
>   - eTecc.net
>   - BudgetDedicated.com
>   - Giga Codes Web-Solutions

Kernel development and debugging

> This kernel allows developers to write and debug code using the normal process-level tools, like gdb, gprof, and gcov. Also, developers who are away from their normal environment can carry on development, using a UML virtual machine as their kernel testing box. There is more information here on building this kernel from source and debugging it, plus a debugging session transcript.

> The eXtreme Programming methodology says that testing should be run frequently, and automatically. This can be hard to do with kernel code, but UML makes this just another set of processes. The Linux FreeSWAN team is using FreeSWAN enabled User-Mode-Linux to do nightly testing of IPsec and DNSsec code. This is run nightly, the results of which is regularly published.

Process debugging

> Perhaps surprisingly, UML is also occasionally useful for debugging user-level processes. Ever get a odd error from a system call and have no idea why it's happening, either because there are a dozen reasons that errno could be returned and the documentation doesn't list the one you're hitting or, according to the documentation, the errno is completely inexplicable? Well, fire up UML, set a breakpoint on the system call in question, run your program, and you'll see very quickly why it's failing.

Safely playing with the latest kernels

> Since the user-mode kernel is not running directly on the hardware, it has no access to it unless you provide it. So, if the kernel contains any nasty bugs, like file corruption bugs, it can't hurt any data that you care about.

Trying out new distributions

> Its filesystems are contained in files in the underlying filesystem, so any time you want to boot a new distribution, you only need to dedicate a file to it, not an entire disk partition. The project download page has a number of ready-to-go root filesystems loaded with various distributions, including SuSE, Slackware, Debian, and Red Hat.

Education

> UML is a great teaching tool, especially in courses where students need a dedicated machine in order to get the most out of it. I know that UML is being used to teach OS development, network administration, and more general system administration. These are all cases where having a virtual machine to practice on is far more convenient for everyone than using physical boxes.

> I know of a number of universities which are running courses on OS internals and networking using UMLs. There is also a company offering Linux system administration courses inside UMLs. Also see the O'Reilly and usermodelinux.org stories on this.

Experimental development

> The kernel runs in a virtual machine that can be configured in ways that your physical machine can't. It can have more memory, more devices, and, soon, more processors. So you can do development and testing of hardware capabilities even when you don't have the relevant hardware.

Poking around inside a running system

> Since you have a full OS running outside UML, it's pretty easy for the terminally curious to find ways of looking inside this kernel that are impossible for a native kernel.

As a secure sandbox or jail

> Processes inside the user-mode kernel have no access to the hosting machine or to the outside world that's not explicitly provided. So, a malicious application running inside it can do no harm to anything that matters.

Virtual networking

> UML virtual machines are networkable, to each other, to the host, and to other physical machines. So, UML can be used to set up a virtual network that allows setting up and testing of experimental services. See the networking tutorial and virtual network screenshot for more information.

As a test environment

> Testing of some types of software requires booting up a machine. With UML, this can be very easily automated. There is a small test harness available , consisting of a small perl module implementing a UML object which provides methods to boot a virtual machine, log in to it, run commands, and shut it down.

Disaster recovery practice

> Do you know what you would do if your machine suddenly didn't boot one day? With UML, you can set up virtual disasters and practice recovering from them. This doesn't have to be serious business - it can also be fun. Ever wonder what happens when you run

> > `UML# rm -rf /`

> but been afraid to try it? Now you can with impunity.

A Linux environment for other operating systems

> This is more a potential use, since UML only runs on Linux right now. But once it's ported to another OS, it is a completely authentic Linux environment - it will run any Linux executable. This would be an interesting shortcut for an OS vendor looking for Linux binary compatibility.
> See the projects page for more information on porting UML to other operating systems.

It doesn't need to be good for anything. It's fun!

Hosted at