В рамках проекта IncludeOS, развивается ядро для обособленного запуска C++-приложений

Университетский колледж Осло и Акерсхуса открыл исходные тексты исследовательского проекта IncludeOS, в рамках которого развивается специализированное ядро (unikernel), позволяющие запускать приложения, написанные на языке С++, непосредственно поверх гипервизора, без применения дополнительных прослоек и окружения операционной системы. Код открыт под лиценизей Apache 2.0.

IncludeOS минимально необходимое самодостаточное окружение, которое взаимодействует непосредственно с гипервизором и предоставляет загрузчик, ядро, минимальный набор библиотек и модулей, достаточный для выполнения кода на языке С++, написанный с использованием стандартной библиотеки классов. Окружение компонуется с предназначенным для выполнения приложением и оформляется в виде загрузочного образа виртуальной машины, образуя готовый облачный сервис. Из систем виртуализации, в которых могут работать подобные окружения, поддерживаются KVM/Linux, VirtualBox и Bochs.

0_1449089238.png

Суммарный размер библиотек и компонентов операционной системы составляет всего 693 Кб. Нагрузка на CPU при работе экспериментального DNS-сервера, построенного на базе IncludeOS, оценивается в 5–20% по сравнению с запуском того же исполняемого файла в обычной гостевой системе. Поддерживается сборка для IncludeOS программ, написанным с использованием спецификаций C++11/14, и пригодных для компиляции с использованием Сlang 3.6 с libc++ от проекта LLVM, или программ на языке Си, которые могут быть собраны с библиотекой newlib от компании Red Hat. Для организации сетевого взаимодействия применяется драйвер Virtio, DHCP-клиент и собственный TCP/IP-стек, который предоставляет набор возможностей, достаточный для работы HTTP- и DNS-серверов.

Предназначенное для выполнения в окружении IncludeOS приложение создаётся с соблюдением определённых требований, например, применяется напоминающая по стилю Node.js неблокирующая система callback-вызовов, вместо main указывается OS: start. Программа компилируется при помощи утилиты vmbuild в один исполняемый файл, который объединяет в себе ядро, загрузчик и само приложение. Данный исполняемый файл можно запустить поверх гипервизора как отдельное виртуальное окружение. Программа выполняется с на нулевом кольце защиты процессора (ring 0) в едином адресном пространстве.

IncludeOS пока позиционируется как рабочий прототип и не поддерживает все запланированные возможности, например, сетевой стек не поддерживает IPv6, а набор библиотек не включает средств для запуска многопоточных программ. Из планов на будущее отмечается поддержка TLS, RESTful API, поддержка интеграции БД SQLite и MongoDB, возможность использования модулей и подготовка пакетного менеджера, поддержка IPv6 и доведение IPv4-стека до полноценного вида.

©  OpenNet