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 中的程式碼不符合要求時,請在問題追蹤器中告知我們 - 或者更好的是,在您自己的 fork 中修復它並向我們發送拉取請求。
如果您在 IncludeOS 中發現安全性問題,請避免使用公共問題追蹤器。請發送電子郵件至 [email protected]。如需更多資訊和加密,請參閱文件。