- Containerization est un outil open source basé sur Swift qui permet d’exécuter des conteneurs Linux sur macOS
- Il fonctionne sur les Mac équipés d’Apple Silicon et s’appuie sur Virtualization.framework pour isoler chaque conteneur dans une machine virtuelle légère
- Il inclut diverses fonctionnalités comme la gestion des images OCI, l’intégration avec des registres distants, la création de systèmes de fichiers ext4 et le contrôle de l’environnement des conteneurs
- Il peut aussi prendre en charge l’exécution de processus x86_64 sur Apple Silicon grâce à Rosetta 2
- Il améliore la flexibilité et les performances pour les développeurs grâce à un démarrage quasi instantané, un environnement léger et la personnalisation de la version du noyau
Aperçu du projet
- Containerization est un package Swift qui aide les applications à utiliser des conteneurs Linux
- Il est implémenté en Swift et fonctionne sur les Mac Apple Silicon en utilisant Virtualization.framework
- L’API fournit les fonctions suivantes
- gestion des images OCI
- intégration avec des registres de conteneurs distants
- création et déploiement de systèmes de fichiers ext4
- interaction avec la famille de sockets Netlink
- fourniture d’un noyau Linux optimisé pour un démarrage rapide
- création et gestion de machines virtuelles légères
- contrôle de l’environnement d’exécution des machines virtuelles
- création et contrôle de processus conteneurisés
- exécution de processus x86_64 sur Apple Silicon à l’aide de Rosetta 2
- La documentation de l’API est disponible sur une page officielle distincte
Conception et architecture
- Chaque conteneur Linux s’exécute dans une machine virtuelle indépendante
- Une adresse IP dédiée peut être attribuée à chaque conteneur, ce qui simplifie la gestion réseau sans avoir recours au port forwarding
- Grâce à une configuration de noyau optimisée et à un système de fichiers racine léger, le démarrage du conteneur en moins d’une seconde est possible
- vminitd est un sous-projet de Containerization, un système init léger qui agit comme processus initial dans la machine virtuelle
- Il configure l’environnement d’exécution via une API gRPC et prend en charge l’exploitation et l’administration des processus du conteneur
- Il transmet les entrées/sorties, les signaux et les événements au processus appelant
Exigences
- Un appareil Mac Apple Silicon est requis
- Pour construire le package, il faut
- macOS 15 ou ultérieur et Xcode 26 Beta
- ou macOS 26 Beta 1 ou ultérieur
- En cas d’utilisation avec macOS 15, les fonctionnalités suivantes sont limitées
- mise en réseau de conteneurs non isolés : la communication entre conteneurs sur le même réseau vmnet n’est pas possible
Exemples d’utilisation
- Un exécutable cctl est fourni : il sert de playground pour expérimenter diverses fonctions de l’API
- Exemples de commandes principales
- manipulation des images OCI
- connexion à un registre de conteneurs
- création de blocs de système de fichiers racine
- exécution d’un conteneur Linux simple
Configuration du noyau Linux
- Un noyau Linux est nécessaire pour exécuter des machines virtuelles légères dédiées aux conteneurs
- La configuration de noyau optimisée fournie par Containerization se trouve dans le répertoire
kernel
- Cette configuration n’inclut que le strict minimum afin d’offrir un démarrage rapide et un environnement léger
- Une API permet, selon les besoins, de définir différemment la configuration du noyau et sa version pour chaque conteneur
- Il est possible de tester différentes versions et configurations du noyau
- Il est possible d’utiliser des noyaux précompilés comme vmlinux.container fournis par le projet Kata Containers
- Toutefois, les pilotes VIRTIO doivent être intégrés directement au noyau (
compiled-in)
Résumé du processus de développement et de test
- Il faut préparer l’environnement, notamment Swift et le Static Linux SDK
- Le code source peut être compilé et testé (
make all, make test integration, etc.)
- Une image du noyau est nécessaire pour exécuter les tests d’intégration
- La configuration des dépendances prend en charge des versions spécifiques liées à gRPC/Protobuf
- La génération automatique de la documentation de l’API et un aperçu local sont inclus
Contribution open source et état du projet
- Les contributions sont les bienvenues
- La version 0.1.0 est la première version officielle, et la stabilité du code source n’est garantie qu’à l’intérieur du périmètre d’une version mineure
- Cette politique pourra évoluer dans de futures versions mineures
Résumé
- Containerization est un package Swift innovant qui permet aux développeurs de gérer, exécuter et développer des conteneurs Linux sur macOS dans un environnement optimisé
- En faisant tourner chaque conteneur dans une machine virtuelle dédiée et légère, il apporte des avantages en matière d’isolation, de performances, de réseau et de personnalisation du noyau
- C’est une solution adaptée aux développeurs qui veulent étendre les environnements de conteneurs open source à une expérience native sur macOS
1 commentaires
Avis Hacker News
Je partage ce qui me semble être l’aspect le plus surprenant et intéressant
Avis selon lequel il n’y a pas tant lieu que ça d’être surpris par la participation d’Apple à la communauté open source
Mention du fait que Swift et ses frameworks associés reçoivent eux aussi de nombreuses contributions de la communauté open source
Comme ce projet touche à Linux, certains estiment qu’en raison du copyleft de Linux (licence open source forte), Apple n’avait de toute façon pas d’autre choix que d’adopter une approche collaborative
Recommandation de la vidéo associée, la présentation WWDC 2025 (https://developer.apple.com/videos/play/wwdc2025/346/)
Chaque conteneur est isolé dans une VM Linux légère
On peut le lancer directement en téléchargeant l’outil
container(https://github.com/apple/container/releases), macOS 26 requisCette soumission concerne https://github.com/apple/containerization, et non le projet
containercontainerizationsert à déployer des apps avec un sidecar de conteneur, ce qui en fait une annonce plus intéressanteÀ l’inverse,
containervise à fournir aux développeurs un environnement du type'docker run ...'Pour
container, un fil HN séparé est indiqué (https://news.ycombinator.com/item?id=44229239)À noter que cela fonctionne aussi sur macOS 15, même si certaines fonctions réseau peuvent être limitées
Le communiqué de presse et la session WWDC mentionnent que l’outil CLI se trouve sur https://github.com/apple/container
Comme j’aime beaucoup ce type d’outils, j’espérais qu’il serait inclus par défaut dans la dernière Xcode Beta, mais ce n’est pas encore le cas
Un paquet précompilé est en préparation pour le moment, et l’avancement peut être suivi dans l’issue publique (https://github.com/apple/container/issues/54)
Exactement une minute après ce commentaire, partage de la sortie du paquet précompilé (https://github.com/apple/container/releases/tag/0.1.0)
La discussion associée se poursuit dans un fil HN distinct (https://news.ycombinator.com/item?id=44229239)
Je me demande ce que Docker en pense
J’imagine qu’une part importante des utilisateurs de Docker for Desktop utilise un Mac
Avis selon lequel ce changement facilite au contraire énormément le développement de Docker Desktop
Il n’est désormais plus nécessaire de configurer une VM Linux séparée, ce qui réduit la difficulté de développement
Malgré cela, beaucoup d’utilisateurs continueront probablement à préférer Docker Desktop pour son CLI familier, Docker Compose et les diverses UX propriétaires de Docker
Changer de runtime de conteneur n’est pas quelque chose de simple
Supposition que, du point de vue de Docker, cela doit provoquer un sentiment proche de celui qu’ils ont face à podman
Comme Docker Desktop est un logiciel commercial closed source et que ce projet est un logiciel libre, certains y voient une bonne nouvelle du point de vue des utilisateurs
Je me demande si cette technologie peut servir à intégrer des conteneurs Linux dans des apps macOS
Par exemple, cela pourrait être nécessaire pour permettre à un outil comme GPT d’accéder à un environnement Linux sans commande CLI en root
Si le fait que cela ne fonctionne que sur macOS 26 ne pose pas problème, on peut déjà l’utiliser immédiatement à cette fin
Sinon, c’est aussi possible en utilisant directement
Virtualization.framework, mais cela demande davantage de travailConviction que cette technologie a précisément été conçue pour ce type d’usage
Le fait que chaque conteneur s’exécute dans sa propre VM isolée, avec isolement complet et attribution d’une IP distincte, est intéressant, mais ce type d’architecture n’est pas familier sur Linux ou Windows
Si, dans l’équipe de développement, ne serait-ce qu’une seule personne n’utilise pas de Mac, le modèle de développement local s’effondre
Conclusion : il sera difficile de remplacer Docker/Compose
Deux des trois grands OS desktop permettent désormais officiellement d’exécuter des VM Linux pour faire tourner des applications nativement Linux
À voir cette évolution, on peut soutenir que Linux a de fait gagné
L’API des appels système Linux occupe maintenant presque partout la place d’API universelle
Réponse selon laquelle le simple fait qu’il faille désormais développer normalement des applications Linux sur deux grands OS non-Linux ne suffit pas à parler de "victoire de Linux"
Témoignage selon lequel la réalité de Linux sur desktop reste encore instable et difficile à recommander
Retour honnête : même en installant Fedora/Ubuntu chaque année sur des PC ou portables récents, on ne ressent toujours pas une vraie utilisabilité ni une vraie stabilité
Point de vue inverse : en fournissant sur les deux autres plateformes un moyen d’utiliser Linux sans quitter leur écosystème, cela ralentit encore davantage la progression de la part de marché de Linux sur le desktop
Mise en avant du fait qu’il n’existe toujours pas de solution vraiment satisfaisante pour le graphisme, l’audio et le GUI
Question : "Si le seul joueur de la partie, c’est toi, est-ce vraiment une victoire ?"
Plaisanterie sur le fait que, pour les utilisateurs ordinaires de Windows ou de Mac, Linux est un nom qu’ils ne connaissent même pas
Avis selon lequel le simple fait d’avoir "macOS avec Linux" est en soi marquant
Je me demande s’ils ont aussi optimisé la gestion mémoire, notamment pour éviter que les VM n’utilisent plus de mémoire que nécessaire
Je ne sais pas exactement à quelle étape cela se produit, mais j’ai l’impression que les builds sont très lents
J’ai essayé d’augmenter davantage les ressources CPU/mémoire avec les options
-cet-m, mais l’effet reste limitéPartage d’une expérience passée avec un Mac Apple Silicon + Rancher Desktop, où cela prétendait construire des images x86, mais où ces images ne fonctionnaient pas correctement sur du vrai matériel x86
Dans la courte démo (https://developer.apple.com/videos/play/wwdc2025/346), le fait que la VM puisse démarrer en quelques centaines de millisecondes est impressionnant
Cela repose sur
Virtualization.framework, une technologie également utilisée de manière optionnelle par Docker Desktop/Colima/UTM, entre autresOn se demande quel est le surcoût mémoire quand plusieurs conteneurs tournent en parallèle
kernel config, https://github.com/apple/containerization/…), à un système de fichiers racine minimal et à un système d’init léger