Введение

Программное обеспечение для виртуализации

User Mode Linux (UML) — это система виртуализации для операционной системы Linux, основанная на архитектурном переносе ядра Linux на собственный интерфейс системных вызовов, что позволяет нескольким виртуальным операционным системам на базе ядра Linux (известным как гостевые системы) работать как приложение в обычной системе Linux (известной как хост-система). Ядро Linux, скомпилированное для архитектуры um, может быть запущено как процесс под другим ядром Linux, полностью в пользовательском пространстве, не затрагивая конфигурацию или стабильность хост-среды. Этот метод предоставляет пользователю возможность запускать множество виртуальных машин Linux на одном аппаратном обеспечении, обеспечивая некоторую изоляцию, как правило, без изменения конфигурации или стабильности хост-среды, поскольку каждая гостевая система является обычным приложением, работающим как процесс в пользовательском пространстве.

Приложения

Многое становится возможным благодаря использованию UML. Можно запускать сетевые службы из среды UML, оставаясь полностью изолированным от основной системы Linux, в которой эта среда работает. Администраторы могут использовать UML для создания ловушек (honeypots), позволяющих тестировать безопасность своих компьютеров или сети. UML может использоваться для тестирования и отладки нового программного обеспечения, не оказывая негативного влияния на хост-систему. UML также подходит для обучения и научных исследований, предоставляя реалистичную сетевую среду Linux с высоким уровнем безопасности. В средах UML версии ядра хост-системы и гостевой системы не обязательно должны совпадать, поэтому вполне возможно протестировать самую новую (bleeding edge) версию Linux в пользовательском режиме на системе с гораздо более старым ядром. UML также позволяет выполнять отладку ядра на одной машине, в то время как для других инструментов отладки ядра (таких как kgdb) требуется две машины, соединенные нулевым модемом. Некоторые провайдеры веб-хостинга предлагают виртуальные серверы на базе UML по более низким ценам, чем настоящие выделенные серверы. Каждый клиент имеет права root-пользователя на системе, которая кажется ему собственной, хотя на самом деле один физический компьютер используется несколькими пользователями. libguestfs поддерживает бэкенд UML с версии 1.24 как альтернативу использованию QEMU или KVM.

Интеграция в ядро Linux

Гостевое приложение UML (бинарный файл ELF Linux) изначально было доступно в виде патча для некоторых версий ядра выше 2.2.x, и хост с любой версией ядра выше 2.2.x легко поддерживал его в режиме потоков (то есть, не SKAS). Начиная с Linux 2.6.0, оно интегрировано в основное дерево исходного кода ядра. Реализован метод запуска отдельного адресного пространства ядра (SKAS), который не требует внесения изменений в ядро хоста. Это повышает производительность и безопасность по сравнению со старым подходом Traced Thread, при котором процессы, работающие в UML, с точки зрения хоста используют одно и то же адресное пространство, что приводит к отсутствию защиты памяти внутри UML со стороны блока управления памятью. В отличие от текущей реализации UML с использованием SKAS, некорректное или вредоносное программное обеспечение внутри UML, работающего на хосте без SKAS, могло бы получить доступ к памяти других процессов UML или даже к памяти ядра UML.

Сравнение с другими технологиями

Пользовательский режим Linux обычно считается менее производительным, чем некоторые конкурирующие технологии, такие как Xen и OpenVZ. Дальнейшая работа над добавлением поддержки виртуализации x86 в UML может уменьшить это отставание. Часто называемым преимуществом Xen (конкурирующей технологии) является поддержка локального хранилища потоков (TLS). Теперь эта функция также поддерживается в последних ядрах UML. Xen ориентирован на виртуализацию всей машины, поэтому все системы, работающие на машине Xen, фактически являются виртуальными машинами. В UML хост-машина не виртуализируется, и только гостевые системы являются полноценными виртуальными машинами. Это позволяет гостям UML получать прямой доступ к файловым системам и оборудованию хоста, где обычно монтируют каталог хоста (например, →).

Поддерживаемые платформы

UML изначально разрабатывался для набора команд x86, но также был портирован и на другие архитектуры, включая IA-64 и PowerPC.