User Mode Linux
UMLのカーネルは、基本的にUML向けにコンパイルされたカーネルに、プログラムローダをくっつけた形に構築されており、Linux上で実行することで、プロセスの中で独立したLinuxが動作する構造となっている。ホストOSもLinuxであることが前提である。サポートしている CPU は x86-32 と x86-64。
UML上で動作するゲストプロセスはデバッガなどで使われる ptrace を使い、システムコールやシグナルを横取りし、それをホスト側に投げ、システムコールやシグナルを成立させている。ゲストプロセスのシステムコールは ptrace で横取りした際、EAX レジスタを書き換えて getpid() に置き換え無害化したうえで、UML 内からシステムコールを実行し、戻り値を EAX レジスタに設定して、ptrace でゲストプロセスを再開させる。本来1往復だったシステムコールのコンテキストスイッチは4往復になる。Linux は mmap で MAP_FIXED を使うと、ユーザーモードからでも固定番地にメモリを確保できるが、それを利用して特定の番地にメモリを割り振っている。UML 自体は CPU の特権命令を一切使ってない。
UMLカーネルは、ディスク資源、メモリ、ネットワークなどホストの資源を一部間借りすることができる。UML 用のデバイスドライバが作られている。特にディスクは、実際のディスクではなく、イメージファイルをディスクにみせかけることができるようになっている上、本来のイメージファイルに差分ファイルを組み合わせることで、イメージファイルに書き込みを行わずに利用することも可能となっている。そのため、単一イメージを複数のUMLで共有することも可能である。