À propos du projet

La conteneurisation est un paquet Swift d'Apple qui permet aux applications d'exécuter des conteneurs Linux sur macOS. Il est construit sur le Virtualization.framework d'Apple sur Apple silicon et expose un ensemble d'API pour le cycle de vie complet des conteneurs. Les capacités principales incluent la gestion des images OCI et l'interaction avec les registres distants, la création et le remplissage de systèmes de fichiers ext4, l'interaction avec la famille de sockets Netlink, la construction d'un noyau Linux optimisé pour des temps de démarrage rapides, le lancement de machines virtuelles légères et la gestion de l'environnement d'exécution, le lancement et l'interaction avec des processus conteneurisés, et l'utilisation de Rosetta 2 pour exécuter des conteneurs linux/amd64 sur Apple silicon. Sur le plan de la conception, chaque conteneur Linux s'exécute dans sa propre machine virtuelle légère. Les clients peuvent attribuer des adresses IP dédiées par conteneur, éliminant ainsi le besoin de redirection de ports individuelle. Les conteneurs atteignent des temps de démarrage inférieurs à la seconde grâce à une configuration de noyau Linux optimisée et à un système de fichiers racine minimal avec un système d'init léger. Le sous-projet vminitd est un petit système d'init lancé comme processus initial dans la VM ; il expose une API gRPC sur vsock pour configurer l'environnement d'exécution et lancer des processus conteneurisés, et il transmet les E/S, les signaux et les événements au processus appelant. Le projet abstrait le VMM derrière les protocoles VirtualMachineManager / VirtualMachineInstance et fournit deux backends. Le backend macOS utilise directement Virtualization.framework (VZVirtualMachineManager) sans binaires supplémentaires requis. Le backend Linux utilise cloud-hypervisor avec KVM (CHVirtualMachineManager), exécutant un sous-processus cloud-hypervisor par VM contrôlé via son API REST sur UDS, avec virtio-blk pour le stockage en bloc, virtio-fs (un virtiofsd par partage) pour les répertoires partagés, TAP pour la mise en réseau, et le vsock hybride de cloud-hypervisor pour atteindre le même contrat vminitd que le chemin macOS. Le backend Linux nécessite cloud-hypervisor et virtiofsd sur l'hôte, un accès KVM et une configuration réseau TAP/bridge/NAT pré-établie. Les exigences pour construire le paquet sont un Mac avec Apple silicon, macOS 26 et Xcode 26 ; les versions plus anciennes de macOS ne sont pas prises en charge. L'init invité Linux (vminitd/vmexec) est compilé en binaire statique dans un conteneur Linux plutôt que croisé sur le Mac, donc aucun outil Swift ni SDK Linux statique n'est nécessaire sur l'hôte — l'interface CLI apple/container est utilisée à la place. L'exécutable cctl sert de terrain de jeu pour explorer l'API, avec des commandes pour manipuler les images OCI, se connecter aux registres, créer des blocs de système de fichiers racine et exécuter des conteneurs Linux simples. Un noyau Linux est requis pour lancer des VM légères sur macOS. Le dépôt inclut une configuration de noyau optimisée dans le répertoire kernel/ avec un environnement de construction conteneurisé pour le compiler. La configuration est minimale pour prendre en charge des temps de démarrage rapides et un environnement léger, et Containerization fournit des API de première classe pour utiliser différentes configurations et versions de noyau par conteneur. Les noyaux fournis par l'utilisateur sont pris en charge, avec une fonctionnalité testée à partir de la version 6.14.9 du noyau. Les noyaux pré-construits doivent avoir les pilotes VIRTIO compilés dans le noyau (pas seulement en tant que modules) ; le projet Kata Containers fournit un noyau approprié. Flux de travail de construction et de test : installez le Xcode recommandé, définissez le répertoire de développement actif, installez l'interface CLI apple/container, puis exécutez `make all` pour construire et `make test integration` pour exécuter les tests. Un noyau est requis pour les tests d'intégration ; `make fetch-default-kernel` récupère un noyau par défaut. Les interfaces Protobuf peuvent être régénérées avec `make protos`, un hook de pré-commit peut être installé avec `make pre-commit`, et la documentation de l'API peut être générée localement avec `make docs` et `make serve-docs`. Le projet est à la version 0.1.0, la première version officielle. La stabilité de la source n'est garantie que dans les versions mineures (par exemple, entre 0.1.1 et 0.1.2) ; les consommateurs qui souhaitent éviter des mises à jour potentiellement cassantes peuvent épingler les dépendances avec .upToNextMinorVersion(from: "0.1.0"). Les contributions sont les bienvenues via le fichier CONTRIBUTING.md.