Si certains attendent l'arrivée d'iOS 17.4 de pied ferme pour pouvoir profiter facilement d'émulateurs sur un iPhone, ils vont devoir tempérer leurs attentes : le fonctionnement de certains émulateurs (comme Dolphin, qui simule le GameCube et la Wii) pourrait empêcher leur arrivée sur les iPhone, même avec l'ouverture prônée par l'Union européenne.
Le problème serait différent de ce qui a bloqué l'arrivée de Dolphin sur Steam et — surtout — il pourrait toucher de nombreux émulateurs. En effet, les règles techniques d'iOS — toujours de la partie, même après l'ouverture liée au DMA — empêchent l'utilisation de compilation à la volée (JIT, pour Just-In-Time compilation) pour les applications, sauf s'il s'agit d'un navigateur. Et de nombreux émulateurs, dont Dolphin, intègrent cette solution. C'est une crainte qui a été mise en avant par le compte officiel de la version iOS sur X.
Nous allons tenter de faire une explication simple1 : une des fonctions de base d'un émulateur est de lire du code qui a été pensé pour un jeu d'instructions précis (par exemple du code PowerPC2 dans le cas de Dolphin) et de l'exécuter sur un autre jeu d'instructions (ARM64 pour les iPhone). La solution de base consiste à interpréter le code, c'est-à-dire traiter chaque instruction une à une. C'est une solution efficace, mais qui a le défaut d'être lente. Et quand vous voulez émuler une console du milieu des années 2000 sur un smartphone, vous ne pouvez pas vous permettre d'être lent.
Avec la compilation à la volée, le fonctionnement est le même que pour Rosetta 2 : le code est converti au lancement (et mis en cache) avant l'exécution, pour obtenir un résultat bien plus efficace3. Mais cette solution pose un problème : elle consiste littéralement à créer du code natif. Pour Apple, qui met en avant la sécurité des iPhone, c'est un énorme problème : il est impossible de vérifier que le code en question n'est pas malicieux et donc d'effectuer les tests de sécurité.
La notarisation sera bien obligatoire pour les applications iOS
Dans la pratique, c'est assez simple : les applications iOS (au sens large) ne peuvent tout simplement pas effectuer de compilation JIT pour cette raison. La seule exception vient des navigateurs, qui peuvent le faire pour le code JavaScript, avec de très grosses limites, mais Dolphin (ou n'importe quel autre émulateur) n'est pas un navigateur. La version compilable de Dolphin pour iOS souffre déjà du même problème : si vous n'avez pas un iPhone jailbreaké, vous ne pouvez pas profiter du JIT.
Dans la pratique, Dolphin ne devrait pas être la seule application touchée : de nombreux émulateurs reposent sur des solutions qui passent par de la compilation à la volée. Ce n'est pour autant pas systématique, ni totalement bloquant : il est toujours possible de passer par un interpréteur classique, même pour Dolphin. Le problème principal, c'est que les performances sont beaucoup plus faibles, et si nous devons rester dans le cas des consoles Nintendo, il est envisageable d'émuler le (presque) 6502 à 1,66 MHz de la NES ou le (presque) 65C816 à 3,5 MHz de la Super NES, mais pas réellement le PowerPC G3 à 486 MHz ou 729 MHz du GameCube et de la Wii, tout du moins pas avec des performances décentes. Mais compte tenu des implications liées à la sécurité, Apple ne devrait pas lâcher la bride sur ce point.
Ouverture de l’iPhone en Europe : Apple dévoile sous la contrainte un plan historique
-
Si vous aimez les explications compliquées, le blog des développeurs est une mine d'or. ↩︎
-
GameCube et Wii partagent le même CPU, un PowerPC G3. Oui, le même que celui des iMac. ↩︎
-
Ce n'est pas une science exacte : certains titres fonctionnent mal avec l'émulation JIT. ↩︎