RUMP (NetBSD и Xen)

Несколько лет назад ребятам из проекта NetBSD, одержимым идеей создать самую портируемую ОС всех времен, пришла в голову мысль сделать на основе ядра NetBSD этакое мини-ядро, которое можно было бы запускать как обычный процесс в любой POSIX-совместимой ОС. Они взяли существующее ядро, вырезали из него драйверы, файловые системы, сетевой стек, механизм разделения памяти, планировщик процессов и вообще все, что только можно, а затем сделали так, чтобы ядро можно было запускать как обычный пользовательский процесс. В результате получилось минимальное ядро NetBSD, которое предоставляло API для драйверов, POSIX API и прочее (то есть лишь высокоуровневые абстракции, этакий слой совместимости).

Разработка получила имя RUMP (Runnable Userspace Meta-Programs — «работающие в пространстве пользователя метапрограммы») и позволила реализовать разные интересные вещи, такие, например, как запуск драйверов в пространстве пользователя (RUMP с интегрированным драйвером), запуск частей NetBSD в Linux (оформленное в виде Linux-модуля RUMP-ядро плюс нужные компоненты) или порт NetBSD в браузер (переписанное на JavaScript RUMP-ядро + автоматически конвертированные в тот же JS драйвера и другие
компоненты ОС).

RUMP-ядро

Портировав RUMP-ядро на гипервизор Xen, они получили этакую мини-ОС, способную запускать NetBSD-приложения (доступны порты приложений Memcached, Redis, nginx и MongoDB) в пространстве ядра, но при этом лишенную всего остального балласта. По сути, такой же фреймворк с POSIX API, как и OSv, но гораздо более гибкий в плане возможности формирования ядер с разной «начинкой».

Как и стандартное ядро NetBSD, RUMP-ядро можно скомпилировать, включив в него нужные компоненты, которые будут необходимы приложению. Нужен сетевой стек — правим конфиг и получаем его, не нужна файловая система — ОK, обойдемся tmpfs... В качестве примера разработчики подготовили образы с включенными в ядро библиотеками libc и libm для запуска стандартного POSIX-софта, а также образ с интегрированным интерпретатором Lua. Так же в ядро можно интегрировать виртуальную машину Java или интерпретатор Python, получив что-то вроде «Python поверх Xen/KVM».

Пока все эти разработки носят экспериментальный характер и не предназначены для повседневного использования, а в качестве гипервизора поддерживается только Xen, ну или ядро Linux, или браузер, если, конечно, тебя не смущает именование их гипервизорами.