Illustration : Flock
Le prochain macOS, alias Golden Gate, fournira plusieurs améliorations à sa virtualisation. Parmi elles, le très demandé accès aux périphériques USB ou encore les images disque en calques.
macOS expose aujourd’hui deux couches de virtualisation. La couche basse, Hypervisor.framework, donne un accès quasi brut aux extensions de virtualisation matérielle du processeur (VT-x sur Intel, EL2 sur Apple Silicon) sans imposer de modèle de périphériques. Tout éditeur tiers peut choisir de construire une solution de virtualisation basée sur cet hyperviseur.
La couche haute, Virtualization.framework, fournit au contraire un ensemble complet et prêt à l’emploi de périphériques virtuels (disque, réseau, GPU paravirtualisé, etc.), pensé pour des applications qui veulent créer rapidement des VM macOS ou Linux sans réinventer tout le modèle matériel.
C’est sur cette seconde couche que les améliorations ont été annoncées durant une session technique de la dernière WWDC, même si ces informations étaient restées discrètes jusqu’ici. Les annonces autour de l’intelligence artificielle ont largement éclipsé le reste.
Enfin un accès aux périphériques USB
C’est la fonctionnalité la plus demandée par les utilisateurs de machines virtuelles. La prise en charge du stockage externe et d’autres périphériques USB connectés au Mac hôte fonctionne de façon simple : lorsqu’un périphérique compatible est branché pendant qu’une VM tourne, une icône apparaît dans la barre des menus pour autoriser l’affectation à la machine virtuelle. Si cette approbation est donnée, le périphérique devient accessible dans la VM presque immédiatement. Un fonctionnement que l’on retrouve dans de nombreux clients de virtualisation, comme Fusion et Workstation chez VMware ou VirtualBox chez Oracle, et que l’on nomme communément le « passthrough USB ».
Côté API, Apple expose cette fonctionnalité via le framework Accessory Access. Ce dernier permet de faire transiter directement des accessoires USB vers les machines virtuelles et donne à l’utilisateur un contrôle explicite sur les périphériques physiques transmis, comme des disques externes. L’entitlement associé est com.apple.developer.accessory-access.usb. Un entitlement est une paire clé-valeur signée numériquement qui accorde à une application une autorisation spécifique au-delà de ce que permet par défaut la sandbox de macOS ou iOS, comme l’explique Apple dans sa documentation.
Ce fonctionnement répond à un principe de moindre privilège très classique : par défaut, une application sandboxée (confinée) n’a accès qu’à son propre conteneur et ne peut pas, par exemple, lire des fichiers arbitraires sur le disque, ouvrir une connexion réseau brute ou accéder à des périphériques matériels.
Des images disque en calques
Voilà un autre changement important dans macOS 27. Jusqu’à présent, chaque VM reposait sur une image disque unique et autonome, au format brut ou ASIF (Apple Sparse Image Format, inauguré avec macOS 26). L’introduction de DiskImageKit change la donne car il permet de construire une pile d’images où les écritures vont dans une couche de superposition (overlay) sans modifier la couche de base. Il prend également en charge les images disque brutes.
Comme l’indique Apple, l’architecture distingue plusieurs types de couches : la couche de base peut être dans n’importe quel format pris en charge par DiskImageKit, tandis que les couches supérieures sont toujours au format ASIF et peuvent être soit des couches de cache, soit des couches de superposition. Une couche de cache fait ce qu’est toujours censé faire un cache : améliorer les performances. Dans le cas présent, elles peuvent être mises en place lorsque les couches sous-jacentes résident sur un support lent comme un système de fichiers réseau distant, en stockant une copie des données lues depuis les couches inférieures.
Concrètement, la couche de base contient un socle en lecture seule – comme le volume Système de macOS – qui peut être partagé entre plusieurs VM et stocké sur un support plus lent comme un disque dur. Au-dessus se greffe une couche de superposition en lecture-écriture qui stocke les fichiers additionnels et les modifications apportées aux données de la couche de base. On est clairement dans le fonctionnement général des instantanés (snapshots).
Ainsi, au lieu d’avoir plusieurs gros fichiers de 60 Go, on peut n’avoir qu’une seule base de 50 Go et autant de couches de superposition que nécessaire pour gérer les modifications, comme le pointe notamment MacGeneration. Un fonctionnement plus souple qui peut entrainer des gains conséquents sur le stockage. À noter que sur le site Eclectic Light, certains commentaires soulignent des carences dans l’implémentation actuelle. Par exemple, l’absence de mécanisme pour aplatir (« flatten ») les couches de superposition et les fusionner dans l’image de base.
Du provisionnage automatique pour les invités
Depuis que macOS fournit des capacités de virtualisation, la création du compte administrateur exige de passer manuellement par l’assistant de configuration à chaque nouvelle VM. Mais la nouvelle API VZMacGuestProvisioningOptions permet de définir des identifiants et d’activer des fonctions comme la connexion automatique et SSH dès le premier démarrage.
Le mécanisme technique consiste à construire un objet VZMacGuestProvisioningOptions, à l’attacher à un objet VZMacOSVirtualMachineStartOptions via sa propriété de « guest provisioning » (provisionnage d’invité), puis à démarrer la VM avec ces options. Au premier démarrage, ces paramètres sont automatiquement transmis à l’assistant de configuration, qui crée l’utilisateur avec les identifiants indiqués et active la connexion automatique et l’accès distant si demandé. D’après la documentation d’Apple, cela inclut le nom complet, le nom court, le mot de passe, l’activation ou non de la connexion automatique au démarrage, et l’activation de SSH. Cela ne fonctionne toutefois qu’au premier démarrage de la machine virtuelle.
Autres capacités
Plusieurs autres apports sont mentionnés dans la vidéo dédiée. Par exemple, il est possible désormais de configurer des topologies réseau complexes en intégrant le framework vmnet à Virtualization, pour définir précisément comment plusieurs machines virtuelles interagissent entre elles et avec l’hôte, avec également de la redirection de port.
On note aussi le framework Virtualization, qui permet d’implémenter ses propres périphériques Virtio (protocole standard de l’industrie pour la paravirtualisation), autorisant une communication personnalisée entre l’application hôte et les VM Linux. L’ajout devrait se montrer particulièrement utile pour les scénarios sensibles aux performances, nécessitant une communication à faible latence et fort débit, via la nouvelle classe VZCustomVirtioDevice. Ce point est abordé dans la dernière partie de la vidéo d’Apple.
Ces nouveautés requièrent la préversion de macOS 27 pour les tester. Le système n’est pour l’instant disponible qu’en bêta pour les développeurs (la troisième est sortie ce 6 juillet), mais la bêta publique est prévue pour ce mois-ci, probablement aux alentours du 20 juillet, en même temps que la bêta 4 pour les développeurs.
