Contexte et retour d'expérience
Justin Cormack, co‑fondateur de MirageOS, rappelle que les premiers projets d'unikernel, notamment MirageOS et Unikernel Systems, souffraient d'une friction technique importante. En 2015, les développeurs devaient réimplémenter des piles TCP/HTTPS et extraire des pilotes NetBSD pour les faire tourner en espace utilisateur, faute de bibliothèques de stockage intégrées. Cette pénurie de composants a longtemps limité l'adoption.
Le dialogue récent entre Geoffrey Huntley et Cormack montre que l'IA générative a réduit ce coût de développement. En quelques heures, un agent IA a réécrit mkfs.xfs en Rust, reproduisant exactement la sortie de l'outil original grâce à des tests comparatifs sur plusieurs tailles de blocs. Le processus s'est appuyé sur un oracle (l'outil NetBSD) pour valider chaque format de disque, illustrant comment l'IA peut automatiser le portage de bibliothèques système.
Architecture des unikernels modernes
Unikernel signifie que l'application inclut directement le code du système d'exploitation, éliminant tout userland. Ainsi, aucune commande fork ou exec n'est possible, ce qui réduit l'surface d'attaque. L'article souligne que, contrairement aux conteneurs Linux où un interpréteur ou un shell persiste souvent, un unikernel ne possède ni shell ni interpréteur, forçant l'attaquant à viser le code source même.
Pour les besoins de stockage, les auteurs recommandent une architecture « S3 pour tout » : un stockage objet S3 comme source principale, complété par un cache NVMe local et un algorithme de remplacement (LRU ou autre). Cette approche accepte une latence accrue en échange d'une capacité « infini » et d'un accès multi‑utilisateur, compatible avec les modèles de déploiement cloud actuels.
Rôle de Nix dans la chaîne de construction
Le texte décrit l'utilisation de Nix et de NixOS pour automatiser les tests d'intégration. Les machine tests de NixOS permettent de déployer un groupe de machines virtuelles, de vérifier les règles réseau et d'observer le comportement de l'application unikernel. En cas de rupture en amont ou de problème de chaîne d'approvisionnement, un overlay Nix peut remplacer la dépendance défectueuse sans modifier le reste du système.
Cette modularité s'étend aux bibliothèques tierces : l'absence d'un client Stripe en OCaml, par exemple, n'est plus bloquante. L'équipe a simplement fait tourner un agent IA qui a traduit le SDK Go en code OCaml, démontrant que le « portage de logiciels » devient une boucle automatisée lorsqu'un oracle fiable existe.
Implications sécuritaires et limites
La réduction de la surface d'attaque est un avantage concret, mais l'article rappelle que les vulnérabilités liées à la mémoire ou aux gadgets restent présentes. Un unikernel ne supprime pas les bugs de sécurité du code applicatif ; il élimine simplement les vecteurs d'exécution supplémentaires comme les shells ou les interprètes.
Enfin, le texte indique que l'adoption massive dépend encore de la disponibilité d'outils de support (ex. : drivers, bibliothèques de stockage) et d'une culture qui accepte de remplacer le modèle « OS + application » par le modèle « application = OS ». Sans ces prérequis, le gain de productivité offert par l'IA risque de rester limité à des projets pilotes.