Ci-JIT l’espoir de voir l’émulateur Dolphin porté sur iPhone

Stéphane Moussie |

Bien qu’Apple autorise depuis peu les émulateurs sur l’App Store, l’un des plus populaires d’entre eux va rester sur le pas de la porte. Les créateurs de DolphiniOS ont confirmé qu’ils ne lanceront pas leur émulateur de jeux GameCube et Wii sur iOS. Pourquoi ce blocage alors que d’autres se préparent à arriver sur iPhone ? La raison est technique.

Les développeurs l’avaient déjà mentionné en décembre dernier, le problème vient du fait qu’Apple interdit toujours aux applications (hors navigateurs) d’utiliser la compilation à la volée, ou Just-In-Time compilation (JIT), un procédé indispensable à DolphiniOS pour offrir de bonnes performances.

Comme nous l’avions expliqué dans un précédent article, 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 PowerPC 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 lente. Et pour émuler une console du milieu des années 2000 sur un smartphone, impossible d'être lent.

Avec JIT, le fonctionnement est le même que pour Rosetta 2 : le code est converti au lancement (et mis en cache) avant l'exécution, ce qui permet d’obtenir un résultat bien plus efficace. Les développeurs le prouvent en comparant Mario Kart exécuté avec ou sans JIT sur un iPhone 15 Pro. Avec JIT, le jeu s’exécute normalement. Sans JIT, le titre est tellement lent qu’il est injouable.

Les développeurs déclarent avoir fait une demande d’interopérabilité à Apple pour pouvoir exploiter JIT (une procédure possible dans le cadre du DMA), mais l’entreprise a refusé cette demande il y a quelques semaines. C’est sûrement par souci de sécurité qu’Apple restreint cette capacité technique aux navigateurs uniquement, car JIT revient à créer du code natif qui ne peut pas être vérifié.

En l’état actuel des choses, les créateurs de DolphiniOS préfèrent ne pas distribuer du tout leur émulateur sur l’App Store plutôt que de distribuer un émulateur aux performances médiocres.

avatar FahirN | 

Il n’y avait donc pas de virgule oubliée dans le titre 😂

avatar oomu | 

non mais bon, y a une différence entre obtenir l'ouverture à la concurrence sur ziphon et la liberté de rouler sur Nintendo...

Dolphin sur ios via une boutique officielle c'est utopique...

MAME serait + réaliste , avec des éditeurs potentiellement plus ouvert de ne pas judiciariser des titres anciens / perdus.

avatar thefutureismylife | 

Si j’ai bien compris ça ne remet en question que les émulateurs Wii /Switch mais pas ceux des précédentes consoles. Pourquoi encore aucune app sur App Store européen à ce stade ? 🤔

avatar totoguile | 

question bête : pourquoi ne pas fournir un utilitaire sur Mac/Win/linux pour "compiler" les images de cartouche en arm en amont pour éviter ainsi la xcompil ? trop compliqué ?

avatar CtrlMaster | 

Tout ca met juste la lumière sur l’échec d’Apple Arcade

avatar Phoenixxu | 

@CtrlMaster

Tellement vrai…

avatar PetrusM | 

Et c’est impossible de le précompiler ? Les différents appareils sont trop différents ? Ou le code est généré à la volée ?

avatar bunam | 

D'après moi, il faut « trouver » les roms de jeux pour ensuite les faire tourner dans l'emu, si l’on voulait traduire avant il faudrait distribuer le code traduit, du coup c'est sous le coup de la loi ?

avatar fleeBubl | 

iOS 17.4 m’a planté l’app📁 Fichier 🤔
peut-être bien lors de l’utilisation d’iSH … 🤨
M’enfin y nous fait quoi Appeul 🧐
💩-ish
🤨https://github.com/ish-app/ish

A project to get a Linux shell running on iOS, using usermode x86 emulation and syscall translation.

« A note on the JIT

Possibly the most interesting thing I wrote as part of iSH is the JIT. It's not actually a JIT since it doesn't target machine code. Instead it generates an array of pointers to functions called gadgets, and each gadget ends with a tailcall to the next function; like the threaded code technique used by some Forth interpreters. The result is a speedup of roughly 3-5x compared to pure emulation.
… »

——🧐
Sans doute une bidouille d’Appeul au niveau de l’accès aux fichiers depuis une app … mais qui affecte toutes les autres apps 😱

——accès depuis iSH
With the iCloud Drive mounted to emulator we can look to unpack and then create a symbolic link.

> mount -t ios . /mnt
> cd /mnt/Downloads

avatar Adodane | 

iOS ne sait pas isoler les processus dans la mémoire de manière sécurisée ? 🤔

CONNEXION UTILISATEUR