Meta porte le cadre Android Cuttlefish sur les Mac à puce Apple
Reality Labs de Meta a porté Cuttlefish, le cadre de périphériques virtuels d'AOSP, sur macOS et sur puce Apple. Les changements touchent le chemin vhost-user de QEMU, le suivi mémoire de HVF, l'affichage natif Cocoa, la compilation et la signature. Le résultat est diffusé en branche QEMU et en correctifs.
Meta apporte Cuttlefish aux Mac à puce Apple
Le 13 novembre 2026, le blog d'ingénierie de Meta a décrit comment Reality Labs a porté Cuttlefish, le cadre de périphériques virtuels du projet Android Open Source Project, pour qu'il s'exécute nativement sous macOS et sur puce Apple. L'article est signé Hadrien Zalek, Joe Knox, Alex Chong et Marcel Apfelbaum. Reality Labs conçoit des produits comme des lunettes dotées d'IA, et utilise des émulateurs pour étendre le développement et les tests sans dépendre de matériel physique rare. Il faut le préciser : il ne s'agit pas d'une version officielle de Google ou d'AOSP. Meta la diffuse sous la forme d'une branche de QEMU et d'un ensemble de correctifs, et indique chercher encore comment proposer ces changements en amont.
Pourquoi Meta voulait une seule plateforme
Tester un logiciel pour des appareils Android qui ne sont pas des téléphones dépend de la fidélité avec laquelle un appareil virtuel reproduit le comportement logiciel du produit réel. Un émulateur léger comme Goldfish règle une partie du problème, mais les écarts avec l'appareil réel peuvent cacher des défauts jusqu'à tard dans le développement. Cuttlefish démarre les mêmes images système que le matériel réel et exécute une pile logicielle réaliste sur du matériel virtuel, ce qui le rapproche davantage d'un appareil physique. Le problème : Cuttlefish ne fonctionnait que sous Linux, alors que les développeurs d'applications et de bibliothèques de Meta travaillent sur des Mac à puce Apple. Meta devait donc maintenir Goldfish et Cuttlefish côte à côte. L'article explique que cela gaspillait des ressources de calcul, déroutait les développeurs, ralentissait l'équipe de l'émulateur et obligeait chaque outil à gérer deux plateformes. Il note aussi qu'AOSP trace la même frontière : Goldfish pour les développeurs d'applications, Cuttlefish pour ceux de la plateforme.
Les trois lacunes sous macOS
Cuttlefish est la couche d'orchestration. Le composant qui exécute réellement le système invité est un moniteur de machine virtuelle. Sous Linux, Cuttlefish utilise normalement crosvm, et prenait autrefois en charge QEMU comme solution de rechange, mais cette intégration était devenue inactive. Pour obtenir une prise en charge native sur puce Apple, Meta a ressuscité le support de QEMU. De nombreux périphériques virtuels de Cuttlefish utilisent des services vhost-user, c'est-à-dire des processus distincts qui fournissent des périphériques virtio à QEMU par un socket. Une grande partie de cette conception supposait Linux. Trois hypothèses ne tiennent plus sous macOS : le mécanisme vhost-user était réservé à Linux et ne pouvait ni se compiler ni s'exécuter, l'hyperviseur d'Apple impose des limites de ressources que QEMU n'attendait pas, et les chemins natifs d'affichage, de compilation et de signature n'existaient pas.
Ce que Meta a modifié
Le changement le plus important concerne le chemin vhost-user de QEMU. Les frontaux, libvhost-user et les services de la section contrib, comme vhost-user-blk, étaient réservés à Linux. Meta a assoupli ces restrictions de compilation pour qu'ils se construisent aussi sous macOS, ce qui permet aux services de périphériques de Cuttlefish de passer la main à QEMU sur un Mac comme sous Linux. Sur puce Apple, QEMU accélère par Hypervisor.framework, appelé HVF, et non par KVM. Le service HVF ne suivait pas assez de régions mémoire pour les grandes configurations de Cuttlefish, et Meta a donc augmenté le nombre d'emplacements de suivi.
Pour l'affichage, Meta est passée à l'affichage natif Cocoa de QEMU, au lieu de s'appuyer sur l'interface WebRTC. Les changements comprennent la prise en charge du format de pixels BGRA pour supprimer les artefacts visuels, la conversion des clics de souris en saisie tactile, et une option de géométrie personnalisée par l'indicateur -g. Meta a aussi activé les structures instables de Rutabaga nécessaires pour correspondre à l'ABI graphique côté Rust dans les configurations gfxstream et rutabaga. Vient enfin le travail de compilation et de paquetage : prise en charge de la compilation Darwin, compilation de QEMU pour arm64 sous macOS, correctifs de chaîne d'outils, droit JIT, signature du code et notarisation. Côté Cuttlefish, Meta a ajouté la prise en charge d'un hôte macOS pour que l'orchestration se compile et s'exécute sur un Mac.
Les bénéfices annoncés par Meta
En passant à une seule plateforme, Meta affirme avoir réduit la maintenance, diminué les besoins d'infrastructure, supprimé des outils redondants, amélioré la fidélité et garanti que les développeurs exécutent les mêmes appareils virtuels que l'intégration continue. Une plateforme unique a aussi facilité la prise en charge de l'appairage Bluetooth, du Wi-Fi, du cellulaire, des graphismes en trois dimensions, des tests de mise à jour à distance, de Fastboot et des instantanés pour l'intégration continue et le développement. Ce sont les propres affirmations de Meta. L'article ne donne aucun test de performance, aucun chiffre de coût ni aucun score de fidélité mesuré. Meta ajoute que le même appareil virtuel est partagé avec les développeurs externes qui travaillent pour son écosystème, si bien que les équipes tierces testent sur la plateforme que Meta utilise pour valider son propre système.
L'article avance aussi un argument sur les agents d'IA. À mesure que les agents jouent un rôle plus grand dans le développement Android, vérifier l'exécution du code compte autant que le générer. Les appareils virtuels permettent aux ingénieurs et aux agents automatisés de travailler en même temps dans des environnements isolés, de réinitialiser l'état instantanément et de répéter les essais sans partager de matériel physique.
Où le trouver, et ce qui manque
Meta distribue ce travail en deux parties. Le dépôt qemu-wearables est une branche de QEMU maintenue par Meta, qui porte ses commits. Le dépôt cuttlefish-wearables est un ensemble de fichiers de correctifs, avec les instructions pour modifier Android et AOSP. Les deux se trouvent sous facebookincubator sur GitHub et contiennent les consignes de compilation et d'application des correctifs. Meta remercie les communautés de QEMU et de Cuttlefish, et en particulier l'implémentation vsock-user de Stefano Garzarella, qui a directement rendu possible l'intégration sous macOS.
Il faut se méfier de l'expression « prise en charge complète ». L'article décrit un portage qui fonctionne pour l'usage interne de Meta, partagé sous forme de branche et de correctifs. Il ne dit pas que les changements sont intégrés à QEMU ou à AOSP, et il ne liste ni fonctions absentes ni défauts connus. Tant que l'amont ne les accepte pas, quiconque adopte cette solution doit appliquer les correctifs, recompiler et maintenir ce travail à jour.
Sources
FAQ
Qu'est-ce que Cuttlefish, et pourquoi Meta l'a-t-elle porté sur Mac ?
Cuttlefish est le cadre de périphériques virtuels du projet Android Open Source Project. Il démarre les mêmes images système que le matériel réel, donc il reste plus proche d'un appareil physique que l'émulateur léger Goldfish. Il ne fonctionnait que sous Linux, alors que les développeurs de Meta utilisent des Mac à puce Apple. Le portage évite de maintenir deux plateformes.
Est-ce une version officielle amont de Google/AOSP, déjà intégrée à QEMU ou à AOSP ?
Non, dans les deux cas. Meta partage le travail dans deux dépôts GitHub : qemu-wearables, une branche de QEMU qu'elle maintient, et cuttlefish-wearables, un ensemble de correctifs pour Android et AOSP. Meta indique chercher encore comment contribuer en amont. Les adopteurs doivent donc appliquer les correctifs et compiler eux-mêmes.
Qu'est-ce que Meta a modifié pour faire fonctionner Cuttlefish sous macOS ?
Meta a apporté trois types de changements. Elle a levé la restriction à Linux du mécanisme vhost-user dans QEMU, augmenté le nombre d'emplacements de suivi des régions mémoire du service HVF, et adopté l'affichage natif Cocoa. Elle a aussi ajouté la compilation arm64, le droit JIT, la signature du code et la notarisation.