IncludeOS adalah sistem operasi unikernel minimal yang disertakan untuk layanan C++ yang berjalan di cloud dan di HW nyata. Memulai program dengan #include <os>
benar-benar akan memasukkan sistem operasi kecil ke dalam layanan Anda selama waktu tautan.
IncludeOS adalah perangkat lunak gratis, dengan "tidak ada jaminan atau batasan apa pun".
Catatan: IncludeOS sedang dalam pengembangan aktif. API publik tidak boleh dianggap stabil.
Daftar fitur dan batasan yang lebih panjang dapat ditemukan di situs dokumentasi kami.
Untuk membangun dan mem-boot layanan IncludeOS Anda memerlukan nix dan Linux. Nix akan secara otomatis mengunduh dan mengatur versi yang benar dari semua perpustakaan dan kompiler yang diperlukan.
Untuk mempercepat pembangunan lokal kami juga merekomendasikan konfigurasi nix dengan dukungan ccache tetapi ini bukan keharusan. Untuk menggunakan ccache, --arg withCcache true
dapat ditambahkan ke sebagian besar perintah nix-build
dan nix-shell
yang ditunjukkan di bawah.
IncludeOS saat ini tidak dapat dibangun di MacOS atau Windows.
IncludeOS minimal "hello world" terlihat seperti program C++ biasa:
# include < iostream >
int main (){
std::cout << " Hello world n " ;
}
Layanan lengkap "Hello world" dengan alur kerja nix yang berfungsi tersedia di repo hello world. Repositori ini juga dapat digunakan sebagai titik awal untuk mengembangkan layanan IncludeOS Anda sendiri.
Untuk contoh layanan lebih lanjut, lihat pengujian integrasi (di bawah ./IncludeOS/test/*/integration).
Untuk membangun IncludeOS, jalankan
$ nix-build
Ini akan membangun rantai alat dan semua pustaka kernel IncludeOS.
Perhatikan bahwa pembangunan pertama akan memerlukan waktu untuk diselesaikan, karena rantai alat IncludeOS dibangun kembali dari kode sumber. Ini termasuk clang, llvm, libcxx, musl dan sebagainya. Tidak ada cache biner nix yang tersedia untuk file-file ini saat ini. Pembangunan selanjutnya akan berjalan lebih cepat ketika rantai alat telah di-cache di nix-store lokal.
Setelah melakukan perubahan pada kernel, jalankan nix-build
lagi untuk mendapatkan binari baru. Jika Anda mengulangi perubahan pada satu bagian kernel, Anda dapat mempercepat pembangunan secara signifikan dengan menggunakan ccache. Semua perintah nix-build
dan nix-shell
di bagian ini mendukung parameter opsional --arg withCcache true
.
Tidak selalu praktis untuk membangun kembali seluruh kernel selama pengembangan. Anda bisa mendapatkan shell pengembangan dengan lingkungan yang telah dikonfigurasi sebelumnya menggunakan shell.nix
:
$ nix-shell
Petunjuk lebih lanjut akan ditampilkan untuk mengonfigurasi jaringan VM secara opsional atau mengganti jalur build saat memulai shell.
Secara default shell juga akan membangun unikernel dari example.nix
. Contoh unikernel dapat di-boot dari dalam shell:
$ nix-shell
[...]
nix$ boot hello_includeos.elf.bin
Jika Anda ingin membuat unikernel yang berbeda dari contoh, ini dapat ditentukan dengan parameter --argstr unikernel [path]
. Ini terutama digunakan untuk tes integrasi. Misalnya, untuk membuat dan menjalankan pengujian stacktrace:
$ 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.
Untuk membangun dan menjalankan VM pengujian sebagai satu perintah:
$ nix-shell --argstr unikernel ./test/kernel/integration/stacktrace --run ./test.py
Anda dapat menjalankan semua pengujian integrasi menggunakan skrip ./test.sh
. Pengujian akan dijalankan secara lokal di lingkungan nix. Kami menyarankan untuk memverifikasi secara manual bahwa semua tes lulus secara lokal sebelum mengirimkan PR baru ke IncludeOS untuk menghemat waktu peninjauan.
Tes individual dapat dijalankan dengan nix-shell
secara langsung. Lihat test.sh
untuk lebih jelasnya.
IncludeOS sedang dikembangkan di GitHub. Buat fork Anda sendiri dan kirimkan permintaan tarik kepada kami. Silakan baca Pedoman Berkontribusi pada IncludeOS.
Kami ingin sebisa mungkin mematuhi Pedoman Inti ISO C++. Jika Anda menemukan kode di IncludeOS yang tidak sesuai, beri tahu kami di pelacak masalah - atau lebih baik lagi, perbaiki di fork Anda sendiri dan kirimkan permintaan tarik kepada kami.
Jika Anda menemukan masalah keamanan di IncludeOS, harap hindari pelacak masalah publik. Alih-alih, kirim email ke [email protected]. Untuk informasi lebih lanjut dan enkripsi silakan merujuk ke dokumentasi.