Ruzu est un émulateur Nintendo Switch écrit en Rust, développé comme une expérience visant à déterminer si l’IA, via des modèles de langage (LLM), pouvait réaliser le portage complet d’un projet logiciel de très grande taille de C++ vers Rust.
Le projet est basé sur le code de yuzu/Eden et représente environ 500 000 lignes de code portées exclusivement avec l’aide de LLM, sur une période d’environ six mois. L’objectif n’était pas simplement d’obtenir un programme fonctionnel, mais de conserver au maximum la structure du projet original, avec une correspondance entre les fichiers et les différentes parties du code C++ et Rust.

Ruzu intègre notamment un kernel HLE avec ordonnanceur, fibres, IPC et services, un processeur de commandes GPU, un recompilateur de shaders et un JIT. La recompilation dynamique du code ARM est assurée par rdynarmic, un portage Rust de Dynarmic, avec des backends natifs x86-64 et ARM64. Le projet comprend également rxbyak, un portage Rust de Xbyak pour la génération de code machine x86-64.
L’émulateur est déjà capable de démarrer et d’exécuter des jeux commerciaux, avec l’objectif affiché d’atteindre les performances de l’implémentation C++ originale. Le projet reste toutefois en développement.
Ruzu dispose également d’un frontend graphique ainsi que d’un frontend en ligne de commande, et peut être compilé sous Windows, Linux, macOS et plusieurs systèmes BSD.
Les changements sont:
– Stability: fixed a memory/GPU/scheduler deadlock investigated in issue #20. Guest-memory access no longer holds an exclusive memory lock while waiting for GPU work that needs kernel scheduling to complete.
– Memory-copy performance: copies between processes now use an explicit page table without allocating a temporary memory object or changing the table used by the CPU. Existing GPU caches and scratch buffers are reused.
– Shader error handling: unsupported or invalid translator operands now produce handled shader exceptions instead of terminating the GPU thread and leaving synchronization waits blocked. Affected draws may still be skipped; this does not add support for those operands.
– CPU/GPU sync: corrected tracking of images backed by non-contiguous memory to address texture corruption. Removed a whole-image download path that could overwrite reused guest memory, and restored GPU notifications for exclusive CPU writes.
– JIT performance: diagnostic environment settings are cached in release builds instead of being queried repeatedly while compiling CPU blocks, reducing compilation overhead. Actual improvements depend on the game and hardware.
– Testing and diagnostics: added regression coverage for shared memory access, process-specific page-table copies, and shader errors. Windows guest-thread diagnostics can now produce a shorter report without the full profiling history.

