IncludeOS est un système d'exploitation unikernel minimal et incluable pour les services C++ exécutés dans le cloud et sur du matériel réel. Démarrer un programme avec #include <os>
inclura littéralement un petit système d'exploitation dans votre service pendant la durée de la liaison.
IncludeOS est un logiciel gratuit, sans « aucune garantie ni restriction d'aucune sorte ».
Remarque : IncludeOS est en cours de développement actif. L'API publique ne doit pas être considérée comme stable.
Une liste plus longue de fonctionnalités et de limitations peut être trouvée sur notre site de documentation.
Pour créer et démarrer les services IncludeOS, vous aurez besoin de nix et de Linux. Nix téléchargera et configurera automatiquement les versions correctes de toutes les bibliothèques et compilateurs requis.
Pour accélérer les builds locaux, nous vous recommandons également de configurer nix avec la prise en charge de ccache, mais ce n'est pas une obligation. Pour utiliser ccache, --arg withCcache true
peut être ajouté à la plupart des commandes nix-build
et nix-shell
présentées ci-dessous.
IncludeOS ne peut actuellement pas être construit sur macOS ou Windows.
Un "hello world" minimal d'IncludeOS ressemble à un programme C++ classique :
# include < iostream >
int main (){
std::cout << " Hello world n " ;
}
Un service complet « Hello world » avec un workflow nix fonctionnel est disponible dans le dépôt hello world. Le référentiel peut également être utilisé comme point de départ pour développer votre propre service IncludeOS.
Pour des exemples de services plus avancés, consultez les tests d'intégration (sous ./IncludeOS/test/*/integration).
Pour créer IncludeOS, exécutez
$ nix-build
Cela construira la chaîne d'outils et toutes les bibliothèques du noyau IncludeOS.
Notez que la première version prendra un certain temps, car la chaîne d'outils IncludeOS est reconstruite à partir du code source. Cela inclut clang, llvm, libcxx, musl, etc. Il n’existe actuellement aucun cache binaire nix disponible pour ces fichiers. Les versions ultérieures seront beaucoup plus rapides lorsque la chaîne d'outils aura été mise en cache dans le magasin nix local.
Après avoir apporté des modifications au noyau, exécutez à nouveau nix-build
pour obtenir de nouveaux binaires. Si vous effectuez une itération sur les modifications dans une section du noyau, vous pouvez accélérer considérablement la construction en utilisant ccache. Toutes les commandes nix-build
et nix-shell
de cette section prennent en charge le paramètre facultatif --arg withCcache true
.
Il n'est pas toujours pratique de reconstruire l'intégralité du noyau pendant le développement. Vous pouvez obtenir un shell de développement avec un environnement préconfiguré en utilisant shell.nix
:
$ nix-shell
Des instructions supplémentaires seront affichées pour éventuellement configurer la mise en réseau des VM ou remplacer le chemin de construction lors du démarrage du shell.
Par défaut, le shell construira également le noyau unique à partir de example.nix
. L'exemple d'unikernel peut être démarré à partir du shell :
$ nix-shell
[...]
nix$ boot hello_includeos.elf.bin
Si vous souhaitez créer un unikernel différent de celui de l'exemple, cela peut être spécifié avec le paramètre --argstr unikernel [path]
. Ceci est principalement utilisé pour les tests d’intégration. Par exemple, pour créer et exécuter le test 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.
Pour créer et exécuter la VM de test en une seule commande :
$ nix-shell --argstr unikernel ./test/kernel/integration/stacktrace --run ./test.py
Vous pouvez exécuter tous les tests d'intégration à l'aide du script ./test.sh
. Les tests s'exécuteront localement dans l'environnement nix. Nous vous recommandons de vérifier manuellement que tous les tests réussissent localement avant de soumettre un nouveau PR à IncludeOS pour gagner du temps de révision.
Des tests individuels peuvent être exécutés directement avec nix-shell
. Voir test.sh
pour plus de détails.
IncludeOS est en cours de développement sur GitHub. Créez votre propre fork et envoyez-nous une pull request. Veuillez lire les directives pour contribuer à IncludeOS.
Nous souhaitons adhérer autant que possible aux directives ISO C++ Core. Lorsque vous trouvez du code dans IncludeOS qui n'adhère pas, veuillez nous le faire savoir dans le suivi des problèmes - ou mieux encore, corrigez-le dans votre propre fork et envoyez-nous une pull-request.
Si vous découvrez un problème de sécurité dans IncludeOS, veuillez éviter le suivi des problèmes public. Envoyez plutôt un e-mail à [email protected]. Pour plus d’informations et le cryptage, veuillez vous référer à la documentation.