IncludeOS は、クラウドおよび実際の HW で実行される C++ サービス用の、インクルード可能な最小限のユニカーネル オペレーティング システムです。 #include <os>
を使用してプログラムを開始すると、リンク時に文字通り小さなオペレーティング システムがサービスに組み込まれます。
IncludeOS はフリー ソフトウェアであり、「いかなる種類の保証や制限もありません」。
注: IncludeOS は現在開発中です。パブリック API は安定しているとは考えられません。
機能と制限の詳細なリストについては、ドキュメント サイトをご覧ください。
IncludeOS サービスを構築して起動するには、nix と Linux が必要です。 Nix は、必要なすべてのライブラリとコンパイラの正しいバージョンを自動的にダウンロードしてセットアップします。
ローカル ビルドを高速化するために、ccache サポートを使用して nix を構成することもお勧めしますが、これは必須ではありません。 ccache を使用するには、以下に示すほとんどのnix-build
およびnix-shell
コマンドに--arg withCcache true
追加できます。
現在、IncludeOS は macOS または Windows 上に構築できません。
最小限の IncludeOS の「hello world」は、通常の C++ プログラムのように見えます。
# include < iostream >
int main (){
std::cout << " Hello world n " ;
}
動作する nix ワークフローを備えた完全な「Hello world」サービスは、hello world リポジトリで利用できます。このリポジトリは、独自の IncludeOS サービスを開発するための開始点として使用することもできます。
より高度なサービスの例については、統合テスト (./IncludeOS/test/*/integration の下) を参照してください。
IncludeOS をビルドするには、次を実行します。
$ nix-build
これにより、ツールチェーンとすべての IncludeOS カーネル ライブラリが構築されます。
IncludeOS ツールチェーンはソース コードから再構築されるため、最初のビルドが完了するまでに時間がかかることに注意してください。これには、clang、llvm、libcxx、musl などが含まれます。現時点では、これらのファイルに使用できる nix バイナリ キャッシュはありません。ツールチェーンがローカルの nix-store にキャッシュされている場合、後続のビルドははるかに高速になります。
カーネルに変更を加えた後、 nix-build
再度実行して新しいバイナリを取得します。カーネルの 1 つのセクションで変更を繰り返す場合は、ccache を使用することでビルドを大幅に高速化できます。このセクションのすべてのnix-build
およびnix-shell
コマンドは、オプションのパラメーター--arg withCcache true
をサポートしています。
開発中にカーネル全体を再構築することは必ずしも現実的ではありません。 shell.nix
を使用して、事前構成された環境を備えた開発シェルを取得できます。
$ nix-shell
オプションで VM ネットワークを構成したり、シェルの起動時にビルド パスをオーバーライドしたりするための詳細な手順が表示されます。
デフォルトでは、シェルはexample.nix
からユニカーネルも構築します。サンプルのユニカーネルはシェル内から起動できます。
$ nix-shell
[...]
nix$ boot hello_includeos.elf.bin
例とは異なるユニカーネルを構築する場合は、 --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.
単一のコマンドとしてテスト VM を構築して実行するには、次の手順を実行します。
$ nix-shell --argstr unikernel ./test/kernel/integration/stacktrace --run ./test.py
スクリプト./test.sh
使用してすべての統合テストを実行できます。テストは nix 環境でローカルに実行されます。レビュー時間を節約するために、新しい PR を IncludeOS に送信する前に、すべてのテストがローカルで合格することを手動で検証することをお勧めします。
個々のテストはnix-shell
を使用して直接実行できます。詳細については、 test.sh
参照してください。
IncludeOS は GitHub 上で開発されています。独自のフォークを作成し、プル リクエストを送信してください。 IncludeOS への貢献に関するガイドラインをお読みください。
私たちは ISO C++ コア ガイドラインに可能な限り準拠したいと考えています。 IncludeOS で準拠していないコードを見つけた場合は、問題トラッカーでお知らせください。あるいは、独自のフォークで修正してプルリクエストを送信してください。
IncludeOS でセキュリティ問題を発見した場合は、公開されている問題トラッカーを使用しないでください。代わりに、[email protected] に電子メールを送信してください。詳細と暗号化については、ドキュメントを参照してください。