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
다시 실행하여 새 바이너리를 얻으세요. 커널의 한 섹션에서 변경 사항을 반복하는 경우 ccache를 사용하면 빌드 속도를 크게 높일 수 있습니다. 이 섹션의 모든 nix-build
및 nix-shell
명령은 선택적 매개 변수 --arg withCcache true
지원합니다.
개발 중에 전체 커널을 다시 빌드하는 것이 항상 실용적인 것은 아닙니다. shell.nix
사용하여 사전 구성된 환경으로 개발 셸을 얻을 수 있습니다.
$ nix-shell
선택적으로 VM 네트워킹을 구성하거나 셸을 시작할 때 빌드 경로를 재정의하는 방법에 대한 추가 지침이 표시됩니다.
기본적으로 쉘은 example.nix
에서 유니커널도 빌드합니다. 예제 unikernel은 셸 내에서 부팅할 수 있습니다.
$ 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]로 이메일을 보내세요. 자세한 내용 및 암호화에 대해서는 설명서를 참조하세요.