RyujinX - l’open source de l’émulateur Nintendo Switch
(ryujinx.org)- Émulateur Nintendo Switch open source écrit en C#, avec pour objectif une grande précision, de hautes performances et une interface conviviale
- Lancé en 2017 par un seul développeur, c’est aujourd’hui un projet réécrit entièrement depuis zéro avec une équipe centrale et des dizaines de contributeurs
- Prise en charge multiplateforme sur les systèmes Windows 10/11, macOS, Linux
- Testé sur plus de 4 050 titres, dont environ 3 400 sont considérés comme jouables
- Le code source est publié sur GitHub, accessible à tous pour consultation et contribution
Aperçu du projet
- Émulateur Nintendo Switch open source écrit en C#, créé par le développeur gdkchan
- L’objectif est d’offrir une excellente précision et de hautes performances, une interface conviviale et des builds cohérents
- Démarré en 2017 par un seul développeur, c’est aujourd’hui un projet écrit entièrement depuis zéro (Written from scratch), développé par une équipe centrale compétente et des dizaines de contributeurs
Principales caractéristiques
-
Open source
- Le code source de l’émulateur est publié sur GitHub
-
Multiplateforme
- Actuellement disponible sur les systèmes Windows 10/11, macOS, Linux
-
Compatibilité
- Testé sur plus de 4 050 titres, dont environ 3 400 sont évalués au niveau jouable (playable)
-
Support
- Le serveur Discord de Ryujinx permet d’obtenir de l’aide et d’échanger avec les utilisateurs de l’émulation Switch ainsi qu’avec les développeurs de l’équipe
Origine du nom
- La prononciation est Ree-You-Jinx, dérivée de « Ryujin », divinité marine et dragon de la mythologie
- La partie NX du nom provient du nom de code de la console Switch
1 commentaires
Avis sur Hacker News
Je me demande quel parcours professionnel il faut suivre pour créer ce genre de chose.
Est-ce qu’on se contente de hacker les nuits et les week-ends pendant deux ans ? J’ai du mal à imaginer que des gens soient payés pour faire ça, et ça ressemble à un domaine qui exige des connaissances d’une profondeur incroyable, probablement mal documentées à cause des questions juridiques.
J’ai abandonné l’université pour des raisons médicales, et j’ai eu l’« occasion » de toucher une allocation d’invalidité à vie ; je l’ai acceptée et j’ai continué à programmer comme hobby. Pendant cette période, j’ai rencontré en ligne beaucoup de programmeurs amateurs qui n’avaient pas d’emploi ou faisaient une pause dans leurs études en vue de trouver un travail plus tard.
Comme je ne connaissais personne dans la vraie vie qui s’intéressait à la programmation, je me sentais seul ; j’ai donc cherché des sites de meetup et commencé à aller à des événements. Des amis rencontrés là-bas m’ont encouragé à essayer de travailler comme programmeur professionnel ; j’ai tenté le coup, et cela fait maintenant cinq ans que je travaille dans ce domaine et que j’y prends plaisir.
Avec le recul, je savais qu’il existait des domaines spécialisés, mais je pensais qu’ils étaient réservés à des programmeurs formés et très expérimentés, si bien que je n’avais jamais imaginé pouvoir en faire partie.
La difficulté à l’entrée, c’est que j’étais trop spécialisé dans un domaine précis, alors que l’industrie demandait des compétences plus généralistes et d’autres spécialisations. Heureusement, dès le début, j’ai rencontré des personnes qui partageaient des centres d’intérêt proches, comme le développement de moteurs de jeu et le rendu graphique, et qui m’ont aidé à comprendre le paysage professionnel.
Aujourd’hui encore, travailler sur des projets perso pendant mon temps libre me satisfait ; avec le travail et la famille, je n’ai plus autant de temps qu’avant, mais j’en trouve encore de temps en temps.
J’ai pas mal pratiqué la rétro-ingénierie de consoles et le développement logiciel pour appareils de console, surtout du développement GBA et NDS, avec aussi un peu de rétro-ingénierie SMS et Genesis ; c’est vraiment parmi les choses les plus amusantes que j’aie faites comme développeur. Cela dit, il faut une persévérance énorme pour surmonter les obstacles inévitables.
C’est peut-être difficile à croire, mais l’auteur principal du moteur de traduction ARM utilisé dans l’autre grand émulateur Switch est médecin. Il se décrit parfois comme un « mage blanc dans la vraie vie ».
Il faut des compétences dans de nombreux domaines, et des ingénieurs hardware, des spécialistes de la rétro-ingénierie, des rédacteurs de documentation méticuleux, des ingénieurs logiciel spécialisés, etc., construisent les uns sur le travail des autres.
On voit aussi des projets menés par une seule personne, mais ils se limitent généralement à du matériel ancien, et même dans ce cas ils s’appuient sur de la documentation provenant de multiples sources. Même le wiki nesdev repose sur des travaux de chercheurs sur le 6502, de la rétro-ingénierie de fabricants taïwanais de clones, du décapsulage, d’anciens émulateurs NES et des piles de documentation existantes.
J’étais adolescent à l’époque, je connaissais un peu le C et le code ARM, mais je ne savais rien du hardware ni du x86. Le PC était à l’origine assez bien documenté et il existait d’autres émulateurs avec lesquels comparer, mais quand je ne comprenais pas et que les quelques livres que j’avais ne m’aidaient pas, il fallait simplement expérimenter. J’écrivais un peu de code et j’observais la réaction ; en général ça plantait, et parfois tout l’ordinateur se figeait.
Une grande partie du travail consistait à construire un modèle mental de l’adversaire. Dans mon cas, c’étaient les premières phases de démarrage de Windows NT et l’initialisation de DirectDraw, et j’écrivais du code pour faire passer les choses d’une étape à la suivante. C’était toujours lent, mais quand on trouvait une piste, il y avait quelque chose de thérapeutique.
Quand on tombe juste, la récompense arrive d’un coup. Un monde étranger se met à tourner là où il ne devrait pas exister, comme un poisson qui nagerait dans un arbre. J’ai envie de refaire ce genre de choses.
Les premiers émulateurs devaient émuler le matériel très particulier des premières consoles.
Les consoles actuelles ressemblent assez à des ordinateurs grand public, et je pensais que la Switch était en gros quelque chose comme un Nvidia Jetson.
L’émulation actuelle consiste-t-elle plutôt, comme Wine, à fournir les API nécessaires et à exécuter le tout dans une machine virtuelle, ou faut-il encore émuler le matériel réel ?
Les API graphiques utilisées par les jeux exposent généralement de nombreux détails matériels, afin que les jeux puissent être finement optimisés pour tirer les performances maximales de ce matériel. Traduire ces appels d’API spécifiques au hardware vers OpenGL/Direct3D/Vulkan/Metal demande beaucoup de travail.
Mais sur les systèmes ARM natifs, le code CPU peut être exécuté presque tel quel ; Skyline, un émulateur Android dont le développement a été abandonné, procédait déjà ainsi, et Yuzu semble aussi prévoir d’implémenter cette fonctionnalité.
Le plus gros problème, c’est le GPU. C’est un GPU Nvidia Maxwell, mais comme la Switch utilise une API custom qui lui est propre, appelée en interne NVN, il faut toujours une couche de traduction complète, y compris la recompilation des shaders.
Je joue à Breath of the Wild et Mario Kart avec ça sur un MacBook Pro M1, avec une manette Xbox.
Mes enfants et moi adorons.
Pour moi, elle excelle particulièrement dans deux usages. D’abord, quand toute la famille joue à des jeux Nintendo. Tous les jeux Nintendo sont conçus avec beaucoup de soin pour permettre à quatre personnes, chacune avec sa petite manette, de passer par le choix des personnages, les options et autres étapes avant de commencer à jouer.
Ensuite, quand on joue en mode portable/détaché. Il y a un vrai plaisir à l’avoir en main, avec des contrôles physiques contrairement à une tablette. La plupart des jeux sont bien meilleurs que le jeu iPad moyen ; plus exactement, les match-3 ou les clickers sans intérêt ne remontent pas aussi facilement en tête que sur iPad.
Je n’aurais pas pensé que C# serait bien adapté à ce genre d’usage, mais c’est agréable à voir
Je trouve que c’est une approche assez innovante de l’émulation
Et sur Apple Silicon, il utilise l’hyperviseur pour exécuter nativement les instructions Arm64v8 de la Switch
https://blog.ryujinx.org/the-impossible-port-macos/
Il ajoute sans cesse des outils permettant une gestion et une manipulation de la mémoire à très bas niveau, et il est séduisant parce qu’il peut s’exécuter sur plusieurs plateformes ou générer du code natif. C’est aussi agréable à écrire
C# a révolutionné le monde d’UO il y a une vingtaine d’années, avec un bon équilibre entre simplicité, clarté et performances
https://www.runuo.net/
https://github.com/ClassicUO/ClassicUO
Bon sang, je n’aurais pas dû penser à UO. Maintenant je me sens triste et vieux
En gros, C/C++ arrive en premier, et dans ce cas il est vraiment difficile de les distinguer. Les bases de code qui n’utilisent purement que l’un ou l’autre sont rares. Ensuite vient Rust, peut-être en 3e ou 4e position dans les émulateurs amateurs, mais potentiellement plus haut dans les projets sérieux. Puis C# et Java, à peu près
JavaScript et Python sont très courants dans les projets amateurs, mais restent généralement des choix exceptionnels dans les bases de code sérieuses. WASM peut être considéré comme une exception
https://github.com/TASEmulators/BizHawk
C’est un peu agaçant qu’Irdeto, le créateur du tristement célèbre DRM Denuvo, ait conçu un produit visant spécifiquement les émulateurs Switch
Alors que les émulateurs eux-mêmes sont légaux
Peu de gens dumpent eux-mêmes leurs jeux
J’ai utilisé les deux, mais pour jouer à Tears of the Kingdom, je préfère Yuzu : https://yuzu-emu.org/
Cela dit, les deux sont excellents, et les deux projets avancent si vite que l’impression que je m’en suis faite au début de l’année est probablement déjà obsolète
Il y a un guide utile sur son utilisation ici : https://github.com/Abd-007/Switch-Emulators-Guide/blob/main/...
https://yuzu-emu.org/entry/yuzu-android/
Au moins sur desktop, il existe un programme d’accès anticipé via Patreon. Mais on peut aussi le récupérer ici : https://pineappleea.github.io/
Skyline fonctionne sur Android, mais je n’ai jamais réussi à le faire tourner correctement sur quelque appareil que ce soit. Il n’est plus développé
https://skyline-emu.one/
Je suis plutôt dans le camp inverse : si on a une machine assez récente, il me semble que la configuration de Ryujinx est beaucoup plus rapide
Ryujinx est l’un des projets C# les plus impressionnants que j’aie vus
L’autre, c’est Roslyn
Existe-t-il un moyen de jouer à des jeux légalement avec ça sans les avoir dumpés soi-même depuis une Switch ?
Peut-on acheter des jeux Switch via un navigateur web ?
Une Switch achetée neuve sera presque certainement une V2 patchée, et les Switch Lite et OLED ne peuvent pas être jailbreakées sans souder un modchip
Mais si l’on possède le jeu, est-ce vraiment important de savoir par quel moyen on a obtenu la ROM ?
https://www.nintendo.com/store/games/nintendo-switch-games/#...
Mais sans Switch, on ne peut ni les télécharger ni les dumper
J’aime à la fois Yuzu et Ryujinx
C’est étonnant qu’ils puissent offrir une meilleure expérience que la console native. Cela dit, avec Denuvo, j’ai l’impression que la fête pourrait bientôt se terminer
Jusqu’à présent, le fait que Denuvo dise vouloir bloquer l’émulation n’est qu’une affirmation. Et même s’il y parvient réellement, les gens auront un temps illimité pour chercher des contournements
Pourquoi Nintendo ne sort-il pas ses jeux sur d’autres plateformes ?
J’aimerais bien essayer Zelda, mais je ne vais pas acheter une console pour un seul jeu.
Je n’ai pas spécialement envie de les défendre, mais pour comprendre leur attitude actuelle, il faut regarder le krach du marché nord-américain du jeu vidéo en 1983. N’importe quelle camelote sortait sous forme de jeu, tout le marché du jeu vidéo s’est effondré, et les consommateurs ont perdu confiance dans la plateforme qu’était une console de jeu donnée. À la place, en achetant un ordinateur familial, on avait des jeux mais aussi d’autres usages.
La NES était l’inverse. Il y avait l’écosystème fermé de Nintendo et beaucoup de développement de jeux first-party ; cette approche a réussi, a enrichi l’entreprise et en a fait un acteur majeur du marché du jeu vidéo. Pourquoi abandonner une formule qui fonctionne encore près de 40 ans plus tard ?
Si j’avais pu y jouer sur un ordinateur portable avec un meilleur écran et de meilleurs haut-parleurs, je n’aurais payé que 60 dollars. En plus, maintenant, il y a davantage de chances que j’achète d’autres jeux Nintendo pour rentabiliser ce nouvel appareil. Si j’étais l’entreprise, je choisirais probablement l’option qui rapporte 7 fois plus de chiffre d’affaires.
La Nintendo Switch est très peu puissante comparée aux PS4/5 et à la Xbox Series X de la même génération, mais elle a le grand avantage d’être la console portable/de voyage ultime. Les consoles de Sony et Microsoft peuvent généralement offrir un nombre d’images par seconde plus élevé ou de meilleurs graphismes, et misent le plus souvent sur cet aspect, tandis que la Switch est très limitée parce qu’elle doit trouver un équilibre entre facteur de forme et autonomie. Une console portable sur laquelle on ne peut jouer que 30 minutes n’a pas grand intérêt.
Une grande partie du public, y compris les personnes qui voudraient utiliser légalement ce genre d’émulateur, préférerait probablement une autre console ou un PC/Mac d’un pur point de vue performances.
Et s’ils vendaient sur une autre plateforme, surtout pour les jeux de leurs studios internes, ils gagneraient sans doute moins par exemplaire vendu que sur leur propre plateforme.
En tenant compte de tout cela, une sortie sur d’autres plateformes rognerait assez fortement leurs flux de revenus.
Sinon, ils n’auraient pas corrigé par patch un bug de duplication d’objets quasiment impossible à rencontrer par hasard, et ils auraient autorisé depuis longtemps la modification des contrôles, une fonctionnalité de base. À la place, dans les jeux Nintendo, on ne peut contrôler le jeu que de la manière prévue et testée. Ils ont aussi longtemps été assez pénibles avec les contenus incluant du streaming, des critiques ou des vidéos de gameplay, et le sont encore dans une certaine mesure.
Cela dit, pour beaucoup de gens, ce n’est pas seulement une question d’un seul jeu. Nintendo possède pas mal d’exclusivités à succès : Zelda, Mario Kart, Smash, plusieurs jeux de plateforme Mario répartis entre épisodes principaux 3D et titres complémentaires 2D, Splatoon, Mario Party, Fire Emblem, Xenoblade, Kirby, etc.
En pratique, on finit souvent avec au moins une dizaine de jeux exclusifs de grande qualité, agréables mais chers. Et ce même en mettant de côté le fait que l’échec de la Wii U a eu des conséquences étranges, comme la ressortie de Mario Kart 8 avec ses DLC inclus, puis l’ajout ultérieur d’un gros pass d’extension.
Si vous voulez jouer à Zelda, vous devez verser au moins 260 dollars à Nintendo. Si vous voulez y jouer sur autre chose qu’une Switch Lite, cela coûte 100 dollars de plus.
Contrairement à Sony ou Microsoft, Nintendo réalise réellement un bénéfice non seulement sur la vente des jeux, mais aussi sur celle du matériel.