IncludeOS — это включаемая минимальная одноядерная операционная система для сервисов C++, работающих в облаке и на реальном аппаратном обеспечении. Запуск программы с помощью #include <os>
буквально включит крошечную операционную систему в ваш сервис во время компоновки.
IncludeOS — это бесплатное программное обеспечение, «без каких-либо гарантий или ограничений».
Примечание. IncludeOS находится в активной разработке. Публичный API не следует считать стабильным.
Более длинный список функций и ограничений можно найти на нашем сайте документации.
Для сборки и загрузки сервисов IncludeOS вам потребуются nix и Linux. Nix автоматически загрузит и установит правильные версии всех необходимых библиотек и компиляторов.
Чтобы ускорить локальную сборку, мы также рекомендуем настроить nix с поддержкой ccache, но это не является обязательным требованием. Чтобы использовать ccache, можно добавить --arg withCcache true
к большинству команд nix-build
и nix-shell
показанных ниже.
IncludeOS в настоящее время не может быть построен на macOS или Windows.
Минимальный «привет, мир» IncludeOS выглядит как обычная программа на C++:
# include < iostream >
int main (){
std::cout << " Hello world n " ;
}
Полный сервис «Hello world» с рабочим процессом nix доступен в репозитории hello world. Репозиторий также можно использовать в качестве отправной точки для разработки собственного сервиса IncludeOS.
Более сложные примеры сервисов см. в интеграционных тестах (в разделе ./IncludeOS/test/*/integration).
Чтобы собрать IncludeOS, запустите
$ nix-build
Это позволит собрать набор инструментов и все библиотеки ядра IncludeOS.
Обратите внимание, что для завершения первой сборки потребуется некоторое время, поскольку цепочка инструментов IncludeOS перестраивается из исходного кода. Сюда входят clang, llvm, libcxx, musl и так далее. На данный момент для этих файлов нет доступного двоичного кэша Nix. Последующие сборки будут выполняться намного быстрее, если цепочка инструментов будет кэширована в локальном хранилище nix.
После внесения изменений в ядро снова запустите nix-build
чтобы получить новые двоичные файлы. Если вы повторяете изменения в одном разделе ядра, вы можете значительно ускорить сборку, используя ccache. Все команды nix-build
и nix-shell
в этом разделе поддерживают необязательный параметр --arg withCcache true
.
Не всегда практично пересобирать все ядро во время разработки. Вы можете получить оболочку разработки с предварительно настроенной средой, shell.nix
:
$ nix-shell
Будут показаны дальнейшие инструкции по дополнительной настройке сети виртуальных машин или переопределению пути сборки при запуске оболочки.
По умолчанию оболочка также собирает unikernel из example.nix
. Пример unikernel можно загрузить из оболочки:
$ nix-shell
[...]
nix$ boot hello_includeos.elf.bin
Если вы хотите создать другой unikernel, чем в примере, это можно указать с помощью параметра --argstr unikernel [path]
. В основном это используется для интеграционных тестов. Например, чтобы создать и запустить stacktrace-test:
$ nix-shell --argstr unikernel ./test/kernel/integration/stacktrace
[...]
nix$ ls -l kernel *
kernel_stacktrace
nix$ boot kernel_stacktrace
[...]
Calling os::print_backtrace ()
symtab or strtab is empty, indicating image may be stripped
[0] 0x000000000025dcd2 + 0x000: 0x25dcd2
[1] 0x000000000021097d + 0x000: 0x21097d
[2] 0x00000000002b370a + 0x000: 0x2b370a
[3] 0x0000000000210eea + 0x000: 0x210eea
We reached the end.
Чтобы создать и запустить тестовую виртуальную машину с помощью одной команды:
$ nix-shell --argstr unikernel ./test/kernel/integration/stacktrace --run ./test.py
Вы можете запустить все интеграционные тесты с помощью скрипта ./test.sh
. Тесты будут выполняться локально в среде nix. Мы рекомендуем вручную убедиться, что все тесты пройдены локально, прежде чем отправлять новый запрос на запрос в IncludeOS, чтобы сэкономить время на проверку.
Отдельные тесты можно запускать напрямую с помощью nix-shell
. См. test.sh
для более подробной информации.
IncludeOS разрабатывается на GitHub. Создайте свою собственную вилку и отправьте нам запрос на включение. Пожалуйста, прочтите Руководство по участию в IncludeOS.
Мы хотим максимально придерживаться основных рекомендаций ISO C++. Если вы обнаружите в IncludeOS код, который не соответствует требованиям, сообщите нам об этом в системе отслеживания проблем — или, что еще лучше, исправьте его в своей собственной вилке и отправьте нам запрос на включение.
Если вы обнаружите проблему безопасности в IncludeOS, избегайте общедоступного средства отслеживания проблем. Вместо этого отправьте электронное письмо по адресу [email protected]. Для получения дополнительной информации и шифрования обратитесь к документации.