Выпуск libOS, unikernel на языке Rust для запуска приложений поверх гипервизора
Как сообщает opennet.ru Представлен первый экспериментальный выпуск проекта libOS (HermitCore), развивающего специализированное ядро (unikernel), предоставляющее runtime для сборки самодостаточных приложений, способных работать без дополнительных прослоек поверх гипервизора. При сборке приложение связывается с библиотекой, которая самостоятельно реализует всю необходимую функциональность, не привязываясь к ядру ОС и системным библиотекам. Код проекта распространяется под лицензией BSD.
Изначально проект начал развиваться на языке Си, но затем было решено переписать ядро на языке Rust. Ожидается, что использование Rust позволит повысить безопасность работы с памятью, упростить сопровождение кодовой базы и сделать ядро более расширяемым. Использование языка Rust также отличает от libOS от других реализаций unikernel (например, MirageOS, MiniPython, ClickOS, McKernel, HaLVM, IncludeOS, OSv и Xen Unikraft).
В настоящее время основной код уже переписан, но реализация на 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.