Exécution de binaires Intel non Apple sur un Mac M1

illustrations illustrations illustrations illustrations illustrations illustrations illustrations
post-thumb

Publié le 17 février 2022 par Andrew Owen (6 minutes)

Depuis fin 2018, je me suis mis à développer sur Apple Silicon. Vous pouvez lire à ce sujet un article précédent. Mais c’est en utilisant un iPad, et les seules constructions natives que je peux faire s’appuient sur une application qui n’est plus disponible. Ce que la plupart des gens pensent du développement sur Apple Silicon, ce sont les Macs M1. Et c’est ce que je fais depuis mai 2021.

Lorsqu’Apple a abandonné le support 32 bits dans macOS, j’ai eu le sentiment que les Mac ARM ne seraient pas loin derrière, car contrairement à Intel, les puces d’Apple n’ont pas de mode 32 bits. C’est la quatrième fois qu’Apple change d’architecture dans ses gammes d’ordinateurs. Lorsqu’elle est passée du 6502 au 65C816 avec l’Apple IIGS, elle a développé une implémentation partielle du système sur puce (SoC) de l’Apple II. Elle a ensuite créé une carte basée sur ce système pour le Mac, qui était équipé d’un processeur MC68000.

Lorsque les Mac sont passés aux processeurs PowerPC, ils étaient suffisamment rapides pour émuler le jeu d’instructions MC68000. Le passage de PowerPC à Intel dépendait d’un logiciel de traduction d’instructions juste à temps (JIT) sous licence de Transitive (une société issue d’un projet de recherche de l’université de Manchester, en Angleterre). Transitive prenait en charge une pléthore d’architectures, jusqu’à ce qu’IBM rachète la société pour y ajouter la prise en charge de l’exécution des binaires Linux Intel sur ses machines Linux PowerPC. Pour l’anecdote, j’ai brièvement utilisé Transitive pour faire tourner la version SPARC de FrameMaker sur la version x64 de Solaris.

Apple a baptisé cette technologie Rosetta et l’a conservée pendant un certain temps, mais a fini par abandonner la prise en charge de l’exécution de binaires PowerPC sur macOS. Aujourd’hui, nous avons Rosetta 2, et je me demande si Apple n’a pas obtenu une licence d’IBM pour cette technologie. Cela permet aux binaires Intel de macOS de fonctionner sur les processeurs ARM d’Apple. Le problème, c’est que je suis presque certain qu’un jour, comme elle l’a fait avec Rosetta, Apple sortira une version de macOS qui supprimera la prise en charge de Rosetta 2. Nous y reviendrons plus tard.

Le développement ne se résume pas au codage. Il est parfois nécessaire d’exécuter une application, par exemple pour créer une ressource. Comme macOS sur les processeurs ARM n’en est qu’à ses débuts, les applications natives ne sont pas toujours disponibles, mais pour l’instant, Rosetta 2 vous permet d’exécuter la plupart de vos anciennes applications macOS Intel 64 bits. Mais qu’en est-il si vous avez besoin d’exécuter des applications Linux ou Windows? Vous pouvez virtualiser ARM Linux et ARM Windows sur un Mac ARM avec les offres commerciales Parallels ou VMware Fusion (à l’heure où nous écrivons ces lignes, il n’existe pas de version native de VirtualBox).

S’il existe une version ARM de l’application que vous souhaitez, c’est parfait. Si ce n’est pas le cas? Eh bien, Windows 11 on ARM dispose d’une émulation X64. Mais vous ne pouvez pas acheter Windows 11 ARM auprès de Microsoft. Il n’est disponible que pour les OEM. Vous devrez donc utiliser l’édition preview. Elle ne peut pas être mise à niveau, donc si vous avez besoin d’une mise à niveau, vous devrez la réinstaller. Microsoft n’a pas l’intention d’accorder une licence pour Windows on ARM. Il n’est pas certain qu’il sera toujours possible d’installer la version preview. Vous préférez peut-être vous en tenir à Windows 10. Et si vous avez besoin d’exécuter un binaire Linux Intel? La réponse est QEMU, un “émulateur de machine et virtualiseur générique et open source”.

QEMU est notoirement difficile à configurer, mais sur Mac, il existe une version packagée appelée UTM (Universal Turing Machine?). Elle est disponible en téléchargement gratuit depuis le site web ou en téléchargement payant avec mises à jour automatiques depuis l’app store. Il est livré avec une galerie de machines préconfigurées, qui, au moment de la rédaction de ce document, comprennent ArchLinux/ARM, Debian 10/ARM, macOS 9/PPC, ReactOS/x64, Solaris 9/SPARC, Ubuntu 14.04/x64, Ubuntu 20.04/ARM, Windows XP/x64, Windows 7/x64, Windows 10/ARM et Windows 11/ARM.

Vous remarquerez que la version x64 d’Ubuntu est beaucoup plus ancienne que la version ARM. La raison en est que l’émulation x64 est lente. J’avais l’habitude d’utiliser SoftWindows 95, émulant un processeur x86 sur un Mac PowerPC, et cela peut être plus lent. C’est pourquoi, si vous virtualisez un système d’exploitation non ARM, vous voudrez la version la plus légère disponible.

J’ai quelques outils que j’utilisais sous WINE sur macOS (jusqu’à ce qu’Apple abandonne le support 32 bits). Codweavers travaille sans relâche pour que les applications Windows 32 bits et 64 bits fonctionnent sur macOS avec Crossover, sa version commerciale de WINE, mais il n’en est encore qu’à ses débuts. Cela m’a amené à essayer ReactOS avec UTM. Il s’agit d’un projet visant à créer un système d’exploitation entièrement open source compatible avec les binaires Windows. Mais dans son état actuel, je le considérerais comme pré-alpha. J’ai donc dû trouver une autre solution.

Après avoir essayé plusieurs options, j’ai opté pour Lubuntu 18.04 (car la version 19.04 ne prend plus en charge les 32 bits). Il s’agit essentiellement d’une version allégée d’Ubuntu. J’ai choisi la version 32 bits parce que les applications Windows dont j’ai besoin sont toutes 32 bits, et que cela simplifie l’installation de WINE. La version 32 bits

Comme pour toute VM, l’étape critique pour la rendre utilisable est l’installation des outils invités, dans ce cas SPICE. Une fois l’outil installé et configuré, vous pouvez configurer des dossiers partagés et vous n’avez plus besoin de capturer la souris. Je me suis contenté d’installer spice-vdagent avec apt. Après avoir activé le partage de répertoire dans les paramètres de la VM, vous pouvez cliquer sur l’icône de dossier dans la VM en cours d’exécution pour définir le répertoire partagé.

L’autre VM que j’utilise assez souvent est la dernière version d’Ubuntu/ARM. Je l’utilise généralement pour exécuter des outils de ligne de commande qui n’ont pas encore été intégrés à macOS ou à homebrew. Mais j’ai installé l’environnement de bureau complet, et je n’ai pas l’impression qu’il y a du laggy. La seule application manquante est Chrome, mais Chromium est disponible et fonctionne tout aussi bien pour la synchronisation avec votre compte Google.

Lorsque j’ai écrit cet article, la prise en charge du réseau était quelque peu défaillante dans QEMU. Il semble que ce problème ait été résolu. J’utilise toujours Parallels Desktop 17, mais les frais de mise à jour annuelle signifient que je l’utilise sur la version précédente de macOS. VMware a sorti Fusion 13, avec des fonctionnalités équivalentes. Il propose également un lecteur Fusion 13. Si je pouvais migrer ma VM Parallels vers Fusion, cela pourrait être la meilleure solution pour ne pas payer une redevance annuelle pour utiliser Windows 11. Mais Fusion 13 ne peut pas importer les VM ARM. J’ai également découvert que vous pouvez activer Windows 11 ARM dans une VM si vous disposez d’une clé de licence de développeur.

Mise à jour

Dans macOS Ventura, il est maintenant possible d’utiliser Rosetta 2 avec UTM. Mais c’est compliqué, c’est pourquoi j’ai écrit un [article] séparé (../running-intel-binaries-in-debian-arm-with-rosetta/ “Running Intel binaries in Debian ARM with Rosetta”) à ce sujet.

À partir de février 2023, Parallels est un distributeur sous licence pour Micorsoft Windows 11 ARM Pro et Enterprise. Vous pouvez en savoir plus ici.