IncludeOS es un sistema operativo unikernel mínimo e incluible para servicios C++ que se ejecutan en la nube y en HW real. Iniciar un programa con #include <os>
incluirá literalmente un pequeño sistema operativo en su servicio durante el tiempo de enlace.
IncludeOS es un software gratuito, "sin garantías ni restricciones de ningún tipo".
Nota: IncludeOS está en desarrollo activo. La API pública no debe considerarse estable.
Puede encontrar una lista más larga de características y limitaciones en nuestro sitio de documentación.
Para crear e iniciar los servicios de IncludeOS necesitará nix y Linux. Nix descargará y configurará automáticamente las versiones correctas de todas las bibliotecas y compiladores necesarios.
Para acelerar las compilaciones locales, también recomendamos configurar nix con soporte ccache, pero esto no es un requisito. Para usar ccache, se puede agregar --arg withCcache true
a la mayoría de los comandos nix-build
y nix-shell
que se muestran a continuación.
Actualmente, IncludeOS no se puede compilar en macOS o Windows.
Un "hola mundo" mínimo de IncludeOS parece un programa C++ normal:
# include < iostream >
int main (){
std::cout << " Hello world n " ;
}
Un servicio completo "Hola mundo" con un flujo de trabajo nix funcional está disponible en el repositorio de hola mundo. El repositorio también se puede utilizar como punto de partida para desarrollar su propio servicio IncludeOS.
Para ver ejemplos de servicios más avanzados, consulte las pruebas de integración (en ./IncludeOS/test/*/integration).
Para construir IncludeOS, ejecute
$ nix-build
Esto construirá la cadena de herramientas y todas las bibliotecas del kernel de IncludeOS.
Tenga en cuenta que la primera compilación tardará algún tiempo en completarse, ya que la cadena de herramientas de IncludeOS se reconstruye a partir del código fuente. Esto incluye clang, llvm, libcxx, musl, etc. No hay ningún caché binario Nix disponible para estos archivos en este momento. Las compilaciones posteriores serán mucho más rápidas cuando la cadena de herramientas se haya almacenado en caché en el almacén nix local.
Después de realizar cambios en el kernel, ejecute nix-build
nuevamente para obtener nuevos binarios. Si está iterando cambios en una sección del kernel, puede acelerar significativamente la compilación utilizando ccache. Todos los comandos nix-build
y nix-shell
de esta sección admiten el parámetro opcional --arg withCcache true
.
No siempre es práctico reconstruir todo el kernel durante el desarrollo. Puede obtener un shell de desarrollo con un entorno preconfigurado usando shell.nix
:
$ nix-shell
Se mostrarán más instrucciones para configurar opcionalmente la red de VM o anular la ruta de compilación al iniciar el shell.
De forma predeterminada, el shell también construirá el unikernel desde example.nix
. El unikernel de ejemplo se puede iniciar desde el shell:
$ nix-shell
[...]
nix$ boot hello_includeos.elf.bin
Si desea crear un unikernel diferente al del ejemplo, puede especificarlo con el parámetro --argstr unikernel [path]
. Esto se utiliza principalmente para pruebas de integración. Por ejemplo, para compilar y ejecutar la prueba de seguimiento de pila:
$ 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.
Para compilar y ejecutar la máquina virtual de prueba como un solo comando:
$ nix-shell --argstr unikernel ./test/kernel/integration/stacktrace --run ./test.py
Puede ejecutar todas las pruebas de integración utilizando el script ./test.sh
. Las pruebas se ejecutarán localmente en el entorno nix. Recomendamos verificar manualmente que todas las pruebas pasen localmente antes de enviar un nuevo PR a IncludeOS para ahorrar tiempo de revisión.
Las pruebas individuales se pueden ejecutar directamente con nix-shell
. Consulte test.sh
para obtener más detalles.
IncludeOS se está desarrollando en GitHub. Crea tu propia bifurcación y envíanos una solicitud de extracción. Lea las Pautas para contribuir a IncludeOS.
Queremos cumplir en la medida de lo posible con las directrices básicas de ISO C++. Cuando encuentre un código en IncludeOS que no se cumpla, infórmenos en el rastreador de problemas o, mejor aún, corríjalo en su propia bifurcación y envíenos una solicitud de extracción.
Si descubre un problema de seguridad en IncludeOS, evite el rastreador de problemas público. En su lugar, envíe un correo electrónico a [email protected]. Para obtener más información y cifrado, consulte la documentación.