Apple a récemment fait un pas significatif vers l'amélioration de l'expérience de développement Linux sur macOS avec le lancement discret d'un nouvel outil baptisé "Container" sur GitHub. Cette initiative marque un tournant pour les développeurs utilisant des machines Mac mais nécessitant un environnement de développement Linux, offrant une alternative native aux solutions existantes comme Docker ou Podman. Malgré ses innovations, "Container" présente certaines limitations. Des problèmes d'accès aux services sur localhost ont été signalés, ainsi que des particularités potentielles dans la gestion de la mémoire, en particulier sur les versions antérieures de macOS. Bien que conçu pour le futur macOS 26 Tahoe, son fonctionnement actuel sous macOS 15 Sequoia peut rencontrer des restrictions, et la prise en charge complète du "memory ballooning" est encore en développement.Contexte : Linux sur macOS, un défi de longue date
Historiquement, macOS repose sur le noyau XNU, qui ne prend pas nativement en charge les primitives de conteneurisation (cgroups, namespaces) comme le fait Linux. Les développeurs intéressés par les environnements conteneurisés sous macOS ont dû recourir à des machines virtuelles (QEMU, VirtualBox, Docker Desktop, Colima ou Lima) pour faire tourner des conteneurs Linux dans une VM. Bien que ces solutions fonctionnent, elles introduisent une couche de virtualisation supplémentaire, avec un impact sur les performances, l’UX (montage de volumes, accès au réseau…) et parfois des limitations (disks, CPU partagés).
Apple, discrètement, semble vouloir changer la donne.
Container exécute des images OCI standard, mais n'utilise pas une seule VM Linux partagée. Au lieu de cela, il crée une petite machine virtuelle Linux pour chaque conteneur que vous démarrez. Cela semble lourd au premier abord, mais les VM sont légères et démarrent rapidement. Chacune est isolée, ce qui, selon Apple, améliore à la fois la sécurité et la confidentialité. Les développeurs peuvent exécuter localement des charges de travail conteneurisées grâce à la prise en charge native de macOS et sans avoir besoin d'installer des plateformes de conteneurs tierces.
Les conteneurs, pour mémoire, sont des paquets compacts qui contiennent une application et tout ce dont elle a besoin pour fonctionner. Les développeurs les utilisent pour garantir la cohérence entre le développement, les tests et la production. Ils sont largement utilisés dans les pipelines de CI et les environnements de serveur, car ils peuvent être déplacés d'une machine à l'autre sans interruption.
L'approche d'Apple avec Container reprend cette idée, mais remplace le modèle de VM partagée par des machines virtuelles minimales séparées. Elle s'appuie fortement sur les technologies Apple telles que le framework de virtualisation pour le lancement de machines virtuelles Linux, vmnet pour la mise en réseau, XPC pour la communication entre les processus et launchd pour le contrôle des services. L'outil prend même en charge Keychain pour le stockage des informations d'identification et utilise la journalisation macOS pour les diagnostics.
En quoi est-il différent de Docker ?
Alors que Docker s'appuie sur les primitives de conteneurisation intégrées à Linux (comme les espaces de noms et les cgroups), Container d'Apple utilise le cadre Virtulization.framework pour exécuter des conteneurs dans des micro-VM entièrement séparés. Cela signifie des limites de sécurité plus fortes, mais avec un surcoût de démarrage supplémentaire par rapport aux conteneurs Linux natifs.
Docker utilise une architecture basée sur des démons avec des systèmes de fichiers en couches et une configuration réseau complexe. Le conteneur d'Apple se concentre sur des composants plus simples et composables. Il n'y a pas de démon central, pas d'analyse de fichiers Docker ni de systèmes de fichiers superposés. Tout est géré à l'aide des API Swift et des commandes shell de la CLI.
Une approche native de la conteneurisation Linux
Contrairement aux approches traditionnelles qui reposent souvent sur une seule machine virtuelle Linux partagée, "Container" d'Apple propose une méthode plus intégrée et sécurisée. Chaque conteneur est exécuté dans une machine virtuelle Linux légère et dédiée, ce qui garantit une meilleure isolation et une sécurité accrue. Cette architecture minimise la surface d'attaque et simplifie la maintenance en utilisant un système de fichiers minimal.
L'outil tire parti des frameworks existants de macOS,...
La fin de cet article est réservée aux abonnés. Soutenez le Club Developpez.com en prenant un abonnement pour que nous puissions continuer à vous proposer des publications.