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“hello world”看起来像一个常规的 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-store 中时,后续构建将会更快。
对内核进行更改后,再次运行nix-build
以获取新的二进制文件。如果您要迭代内核某一部分的更改,则可以使用 ccache 显着加快构建速度。本节中的所有nix-build
和nix-shell
命令都支持可选参数--arg withCcache true
。
在开发过程中重建整个内核并不总是可行的。您可以使用shell.nix
获得具有预配置环境的开发 shell:
$ nix-shell
将显示更多说明,用于在启动 shell 时选择配置虚拟机网络或覆盖构建路径。
默认情况下,shell 还将从example.nix
构建 unikernel。示例 unikernel 可以从 shell 内启动:
$ 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 提交新 PR 之前手动验证所有测试是否在本地通过,以节省审核时间。
单独的测试可以直接使用nix-shell
运行。有关更多详细信息,请参阅test.sh
IncludeOS 正在 GitHub 上开发。创建您自己的分叉并向我们发送拉取请求。请阅读 IncludeOS 贡献指南。
我们希望尽可能遵守 ISO C++ 核心指南。当您发现 IncludeOS 中的代码不符合要求时,请在问题跟踪器中告知我们 - 或者更好的是,在您自己的分支中修复它并向我们发送拉取请求。
如果您在 IncludeOS 中发现安全问题,请避免使用公共问题跟踪器。请发送电子邮件至 [email protected]。有关更多信息和加密,请参阅文档。