À propos de l’environnement de traduction Rosetta d’Apple
(developer.apple.com)-
Rosetta est le processus de traduction qui permet d’exécuter sur Apple Silicon des apps construites avec des instructions x86_64.
-
Pour l’utilisateur, Rosetta est invisible. Quand un exécutable ne contient que des instructions Intel, macOS lance automatiquement Rosetta et démarre la traduction.
-
Une fois la traduction terminée, le système exécute le binaire traduit à la place de l’original. Ce temps de traduction s’ajoute au lancement, ce qui peut ralentir le démarrage ou le fonctionnement de l’app.
-
Le système privilégie l’exécution des instructions arm64 de l’app. Quand un binaire contient à la fois arm64 et x86_64, l’utilisateur peut forcer l’exécution via Rosetta, par exemple si un plugin donné ne prend pas en charge arm64.
-
Le système empêche de mélanger du code arm64 et x86_64 au sein d’un même processus. Rosetta s’applique de manière globale, y compris aux modules de code chargés dynamiquement.
Éléments qui ne peuvent pas être traduits
- Les apps qui incluent des compilateurs JIT sont bien traduites, mais les éléments ci-dessous ne le sont pas.
→ Extensions du noyau
→ Machines virtuelles qui virtualisent une plateforme matérielle x86_64
- Rosetta traduit toutes les instructions x86_64, mais ne prend pas en charge les fonctionnalités récentes ou spécifiques au processeur comme AVX, AVX2 ou AVX512.
→ Si votre code contient de telles fonctions, il faut vérifier qu’elles sont réellement disponibles avant de les appeler, par exemple avec la fonction sysctlbyname.
- Pour vérifier si un binaire s’exécute après traduction par Rosetta, on peut passer l’indicateur
sysctl.proc_translatedà la fonctionsysctlbyname.
1 commentaires
Comme il s’agit d’un document officiel et qu’il est bien structuré, j’en ai fait une brève traduction et je la partage ici.
Il est important de noter que Rosetta n’est pas de l’« emulation », mais de la « translation ».