Представлен первый экспериментальный выпуск проекта libOS (HermitCore), развивающего специализированное ядро (unikernel), предоставляющее runtime для сборки самодостаточных приложений, способных работать без дополнительных прослоек поверх гипервизора. При сборке приложение связывается с библиотекой, которая самостоятельно реализует всю необходимую функциональность, не привязываясь к ядру ОС и системным библиотекам. Код проекта распространяется под лицензией BSD.
Изначально проект начал развиваться на языке Си, но затем было решено переписать ядро на языке Rust. Ожидается, что использование Rust позволит повысить безопасность работы с памятью, упростить сопровождение кодовой базы и сделать ядро более расширяемым.
В настоящее время основной код уже переписан, но реализация на Rust ещё немного отстаёт по функциональности от версии на языке Си. IP-стек и гипервизор на базе KVM API (uhyve) прока остаются на языке Си. Не входящие в ядро сопутствующие компоненты для поддержки языков программирования продолжают развиваться на языках C, C++, Go и Fortran.
Проектом также развивается вспомогательная прослойка, названная proxy, которая позволяет запускать собранные с libOS приложения как в виртуальной машине или поверх оборудования x86_64, так и в существующем окружении Linux, как обычные программы для Linux (например, с целью тестирования). Proxy позволяет выбрать тип виртуальной машины (поддерживаются KVM и QEMU), размер выделяемой памяти и число vCPU, а также настроить параметры сетевого доступа. Для организации сетевого взаимодействия на стороне хоста требуется настроить tap-интерфейс.
В форме unikernel могут быть собраны приложения на языках C/C++, Fortran и Go, поддерживаются библиотеки Pthreads, OpenMP и iRCCE. Для кросс-компиляции приложений используется GCC. Работа протестирована в дистрибутиве Ubuntu 18.04, для которого подготовлены готовые пакеты для сборки приложений в форме unikernel. Для остальных систем предложен образ для Docker («docker pull rwthos/hermitcore-rs»).
Для установки в Ubuntu 18.04 можно выполнить:
$ echo "deb [trusted=yes] https://dl.bintray.com/hermitcore/ubuntu bionic main" | sudo tee -a /etc/apt/sources.list $ sudo apt-get -qq update $ sudo apt-get install binutils-hermit newlib-hermit pte-hermit-rs gcc-hermit libhermit-rs
Далее можно собрать и запустить набор тестов stream при помощи QEMU или KVM:
HERMIT_ISLE=qemu HERMIT_KVM=0 /opt/hermit/bin/proxy /opt/hermit/x86_64-hermit/extra/benchmarks/stream HERMIT_ISLE=uhyve /opt/hermit/bin/proxy /opt/hermit/x86_64-hermit/extra/benchmarks/stream