Les émulateurs ont toujours plus le vent en poupe au fil des ans, mais sont aussi la cible de bien des attaques. Pour comprendre comment et pourquoi un émulateur est créé, nous avons pu interviewer MacDu de l'équipe Vita3K.
Les émulateurs, on connaît. Ces logiciels qui nous permettent de jouer à des titres de plein de vieilles consoles, et parfois même des récentes, sur n'importe quelle plateforme ont toujours été populaires dans l'univers PC. Mais sait-on vraiment comment ils fonctionnent, et pourquoi ils sont créés ?
Alors que Nintendo a réussi à faire tomber Yuzu, l'émulateur Switch, nous avons eu le plaisir de rencontrer MacDu, l'un des développeurs français en charge de Vita3K, l'émulateur PS Vita. Le jeune étudiant en master informatique a pu nous éclairer sur les raisons de la création d'un tel projet, mais aussi le défi technique colossal que cela représente.
Comment as-tu appris à coder ?
« J'ai commencé à coder au collège avec Le Site du Zéro. Juste moi-même, en ligne. J'ai commencé avec le C++, dont j'ai suivi le tutoriel entier et que je connais le mieux aujourd'hui, et ai écrit 2/3 programmes. J'avais une brique de LEGO programmable qui était assez intéressante aussi ! Ensuite, je me suis tourné vers le Java et un peu d'autres langages. »
Le Site du Zéro, devenu OpenClassrooms aujourd'hui
Quel est ton parcours dans le monde de l’émulation ?
« J'ai d'abord créé un émulateur NES en Dart, juste pour m'amuser. Il marchait, mais il était très prêté. C'était plutôt pour l'intérêt du projet en lui-même. Je me suis aussi penché sur la PS1, mais mon émulateur n'était qu'à moitié fonctionnel, avant d'arriver dans l'équipe de Vita3K. »
Qu'est-ce qui t'a motivé à te lancer dans le développement d'émulateurs ?
« Ce que j'aime beaucoup dans l'émulation, c'est qu'on doit vraiment coder l'intégralité de la machine. Il y a énormément d'aspects dans ça : comment fonctionner les registres, comment l'image est créée, coder le CPU, le GPU, l'interface pour les manettes… C'est super intéressant. Et c'est aussi très gratifiant puisque dès qu'on fixe un bug ou qu'on implémente une nouvelle fonctionnalité, le feedback est immédiat puisqu'un jeu fonctionne enfin, ou les images sont mieux rendues. Le retour est visuel et immédiat : quelque chose ne fonctionnait pas avant, et se met à marcher d'un coup. »
Le Github de MacDu, où l'on peut retrouver son émulateur NES en Dart
Comment programmer-t-on un émulateur ?
« Il faut voir qu'il ya différents niveaux d'émulation, en fonction de ce que l'on fait. Pour les machines plus, il s'agit par exemple de coder le vieux CPU et faire en sorte que chaque instruction de la console soit transformée en une séquence compréhensible par les ordinateurs récents. Il y a des fonctionnalités de bas niveau également, comme implémenter les registres ; Certaines adresses en mémoire servent par exemple à lire l'état de la manette, il faut donc pouvoir récupérer ces informations pour déterminer si un bouton a été enfoncé. Et il ya ensuite le GPU, où le jeu va envoyer des instructions à la console, et l'émulateur doit récupérer ces instructions et les traduire en une séquence lisible par la plateforme voulue… C'est ce qu'on appelle du reverse Engineering : sur la part du résultat pour trouver le code source. »
Quelles sont les plus grandes difficultés que l’on rencontre au développement ?
« La plupart du temps, surtout pour des machines relativement vieilles comme la PS Vita, la vitesse d'exécution n'est pas trop un problème. Le premier problème va souvent être le CPU, puisque de nombreuses consoles n'ont pas un processeur qui est le même que celui d'un ordinateur traditionnel. La Vita a par exemple un processeur ARM, alors que les ordinateurs sont en x86-64. Donc on doit recompiler les instructions vers quelque chose de compréhensible par les ordinateurs, mais ce sont deux architectures totalement différentes. Maintenant, on utilise les programmes JiT, pour « Just In Time recompilation », qui permettent de recompiler en temps réel des instructions ARM en instructions x86-64. C'est très efficace.
Les principales difficultés, au moins pour la PS Vita, sont au niveau du GPU. Les consoles peuvent avoir des cartes graphiques un peu particulières qui profitent de certaines fonctionnalités qui ne sont pas nécessairement disponibles sur d'autres plateformes, comme les cartes graphiques traditionnelles récentes. Et si ces fonctionnalités ne sont pas fournies, c'est vraiment extrêmement compliqué de les émuler correctement. Ça peut coûter très cher sur les performances. »
Vita3K est disponible sur de nombreuses plateformes
Comment gérer-t-on un développement multi-plateforme ?
« Pour prendre l'exemple de Vita3K, l'émulateur a été principalement codé pour Windows et Linux. Les deux systèmes ont des différences, mais qui impactent assez peu le développement au niveau du GPU. À l'arrivée de la version macOS, ça a déjà ajouté une difficulté supplémentaire puisque l'OS ne supporte ni OpenGL ni Vulkan, les deux librairies de fonctions qui permettent de faciliter l'accès aux GPU pour les développeurs. Ils ont leur propre interface qui s'appelle Metal. Il existe une couche de traduction qui permet d'utiliser Vulkan sur Metal, mais avec toujours quelques aspects à modifier en plus pour garantir la compatibilité.
Si on cherchait à faire une version ARM pour macOS et les Macbook, d'autres problèmes s'ajoutent en plus. Par exemple, la manière dont la mémoire est allouée est bien différente : par bloc de 4ko sur Windows et Linux, alors qu'elle est allouée par blocs de 16ko sur mac et ARM.
Il y a toujours des choses comme ça à regarder, en plus des fonctionnalités qui ne sont pas disponibles sur le GPU. De ce côté, les téléphones sont les plus difficiles. Et il ya aussi les performances, où les téléphones sont souvent beaucoup moins puissants et réclament d'utiliser des techniques différentes pour ne pas tuer les performances. Chaque plateforme nécessite des fonctionnalités différentes, et les outils de débogage sont beaucoup plus développés sous Windows et Linux que sous Android par exemple. »
Est-ce que ce n'est pas tentant « d'améliorer » la console qu'on cherche à émuler ?
« Le monde de l'émulation, ce n'est pas vraiment de faire mieux que la plateforme native. Parce que les jeux s'attendent à un certain comportement, et ça peut causer des incompatibilités. Pour l'anecdote, la SEGA Master System a corrigé un bug de processeur dans une nouvelle version de la console, et un jeu ne fonctionnait plus à cause de ça. Il faut vraiment être au plus proche du comportement de la machine, reproduire à l'exact au niveau du jeu.
Après, il est toujours possible d'ajouter des améliorations comme de l'upscaling ou le remplacement des textures avec un pack 4K développé par la communauté par exemple. Sur la PS Vita par exemple, il y a aussi beaucoup de jeux japonais qui n'ont pas été trouvés, et des collectifs de fans les traduisent pour que nous puissions y jouer. Et ça, c'est vraiment intéressant. »
Xenogears, un jeu tristement oublié
Quel est ton but en développant un émulateur ?
« Il y a le défi de la programmation, déjà, mais aussi la conservation des jeux vidéo. Certains titres sont vraiment bien et pourraient ne plus être jouables dans les années à venir sans émulateur. Par exemple, un de mes jeux préférés est Xenogears, et celui-ci n'est pas vraiment jouable en dehors de l'émulation PS1. »
On a vu la position de Nintendo face à l'émulation… Est-ce que c'est risqué de développer un émulateur ?
« Ça dépend. Normalement non, puisque l'émulation est légale (ndlr : en France, elle est protégée par l'article L 112-6-1 du Code de Propriété intellectuelle relative au reverse Engineering) et il existe une jurisprudence (ndlr : SEGA v Accolade aux États-Unis). C'est toujours un peu compliqué dans ce domaine-là. Je ne sais pas comment je réagirai face à une mise en demeure ou autre.
Il y a différents cas, on va dire. Pour la PS Vita, Sony l'a quasiment complètement abandonnée, donc ce serait étrange de réagir comme ça. Mais pour l'émulation de consoles toujours actives, je pense que c'est un cas un peu différent. »
The Legend of Zelda : Tears of the Kingdom sur Android // Source : Yuzu
Tu aurais un cas de conscience à développer l'émulateur d'une machine qui n'a pas encore été abandonnée ?
« Un peu, mais le cas de conscience serait surtout dans le cas où l'émulation diminuerait les profits de certains jeux. De mon point de vue, on peut regarder Zelda : Tears of the Kingdom sur Switch, où on peut argumenter que la présence d'un émulateur a eu un impact négatif sur les revenus du jeu et ce que les développeurs des jeux ont réalisé. C'est quelque chose que je préfère éviter.
C'est pour ça que je parle de préservation des jeux. L'émulation doit arriver après que les titres aient fait leurs vies « normales » on va dire, c'est ici que c'est pour moi le plus important. »
Les communautés autour des émulateurs, surtout celles qui réclament tout et n'importe quoi, peuvent être difficiles à gérer. Comment le vis-tu ?
« Je suis assez neutre et retiré par rapport à ça. J'ignore ceux qui ont des retours agressifs ou autres. Mais si je ne suis pas si affecté par ça, ça n'est pas étonnant que d'autres le soient bien plus. Pour moi, développer un émulateur est juste un hobby intéressant que je fais sur mon temps libre. On le fait gratuitement et en open source, donc d'avoir des retours comme ça avec énormément de gens qui se plaignent pour tout et n'importe quoi, surtout sur Android, c'est compliqué. »
Pourquoi avoir choisi Vita3K ?
« Je suis arrivé dessus simplement parce qu'il y avait un jeu qui m'intéressait, Tales of Hearts R, qui crashait dès qu'on le sortie ; j'ai repéré ce qui ne marchait pas et je l'ai corrigé, et j'ai renvoyé le code. J'ai juste continué par la suite, jusqu'à devenir l'un des développeurs principaux de l'émulateur. C'est aussi une console assez moderne, sortie en 2010, qui est quand même intéressante à coder et il y avait beaucoup à faire sur Vita3K à l'époque. L'avantage d'un projet open source, c'est qu'on peut vraiment s'occuper nous-même directement d'un problème. »
Quel est ton prochain grand défi dans le développement ?
« Ce qui m'embête un peu avec Vita3K, c'est que la majorité des problèmes restants sont de l'ordre graphique, et ça m'intéresse moins. Je regarde un peu d'autres choses, mais pour le moment, rien n'est fait. Surtout que, comme je le disais, je préfère éviter de développer pour des consoles encore actives. »
Envie de retrouver les meilleurs articles de Frandroid sur Google News ? Vous pouvez suivre Frandroid sur Google Actualités en un clic.