>_ DevTrendsfr

Langue

Accueil

Langages

Sections

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embarqué Sécurité
C

Comment exécuter des jeux et logiciels x86 lourds sur les processeurs Arm et RISC-V

Imaginez que vous avez acheté un nano-ordinateur Arm flambant neuf ou un puissant serveur RISC-V, installé Linux, et... vous tombez sur un mur. Votre jeu Steam préféré, un logiciel professionnel sous licence, ou le bon vieux Wine refuse tout simplement de fonctionner. Ils sont compilés pour x86_64, mais vous avez une architecture complètement différente. Habituellement, les gens suggèrent QEMU dans ces cas-là, mais jouer à travers c'est toute une expérience : le lag est tellement mauvais que vous préférez simplement l'éteindre.

Le projet box64 résout ce problème avec élégance. Ce n'est pas simplement un émulateur, mais une couche qui peut « nourrir » les bibliothèques natives de votre système vers l'application émulée.

Logo officiel

Ce qui rend cet émulateur spécial

La plupart des émulateurs tentent de traduire fidèlement chaque instruction CPU. C'est fiable mais très lent. Le développeur de box64 (connu sous le nom de ptitSeb) a adopté une approche différente.

Lorsqu'un programme x86_64 appelle une fonction système — par exemple, veut rendre des graphiques via OpenGL ou allouer de la mémoire via libc — box64 n'émule pas cet appel dans un environnement virtuel. Au lieu de cela, il redirige l'appel directement vers les bibliothèques natives de votre appareil (Arm64 ou RISC-V).

En conséquence, les calculs lourds reposent sur les épaules du matériel « natif », et seule la logique de l'application est émulée. Cela donne un gain de vitesse colossal. Selon les benchmarks de l'auteur, la combinaison avec un recompilateur dynamique (DynaRec) fonctionne 5 à 10 fois plus vite qu'un interpréteur classique.

Ce que vous pouvez exécuter

La liste de compatibilité du projet est énorme. Avant tout, il vise les joueurs et ceux qui utilisent des logiciels spécialisés.

  1. Jeux Steam. Oui, vous pouvez exécuter des jeux sur un Raspberry Pi 4 ou 5 qui n'ont jamais été portés sur Arm.
  2. Wine et Proton. Cela ouvre la voie aux applications Windows. Si vous avez à la fois box64 et son « petit frère » box86 (pour les programmes 32 bits), vous pouvez faire fonctionner presque n'importe quel logiciel.
  3. Jeux Unity. Il y a une nuance ici : ils nécessitent souvent un OpenGL récent. Sur certaines cartes, vous devez utiliser des variables d'environnement pour « tromper » le pilote et faire fonctionner le jeu.

Il est intéressant de noter que le projet prend même en charge des architectures spécifiques comme LoongArch. Il est clair que la communauté aide activement avec le matériel : la liste des remerciements inclut Adlink, Pine64 et même les équipes de développement de Deepin.

Comment ça fonctionne en pratique

Utiliser l'outil est surprenamment simple. Si vous avez déjà compilé le projet (les instructions dans le dépôt sont détaillées, bien qu'elles nécessitent l'installation d'un tas de dépendances), le lancement ressemble à ceci :

box64 ./my_x86_64_program

Si vous avez besoin d'exécuter un script d'installation entier (par exemple, de GOG) qui vérifie l'architecture via uname -m, vous pouvez le faire comme ceci :

box64 script.sh

En interne, box64 usurppera la réponse du système, et le script pensera qu'il s'exécute sur un processeur x86 ordinaire.

Pour ceux qui ne veulent pas taper la commande à chaque fois, il y a box64-bash — un shell familier où tous les exécutables sont automatiquement pris en charge par l'émulateur.

Nuances et pièges

Ne vous attendez pas à ce que tout fonctionne « out of the box » avec des fréquences d'images parfaites.

Premièrement, la mise en cache. Lors de la première exécution, box64 génère du code optimisé et l'enregistre dans ~/.cache/box64. Cela accélère les exécutions suivantes, mais peut « manger » jusqu'à 2 Go d'espace disque. Si l'espace est limité, vous devrez limiter ce comportement via la configuration.

Deuxièmement, les graphiques. Sur Raspberry Pi, vous devez souvent définir des contournements comme :

MESA_GL_VERSION_OVERRIDE=3.2 BOX64_DYNAREC_STRONGMEM=1 box64 ./game

Ceci est nécessaire pour éviter les blocages dus aux différences dans la façon dont x86 et Arm gèrent la mémoire.

Troisièmement, les applications 32 bits. Box64 ne fonctionne qu'avec les binaires 64 bits. Si vous avez besoin d'exécuter un vieux jeu, vous devrez installer box86. Le travail sur box32 est actuellement en cours, mais l'auteur indique honnêtement que le projet est encore expérimental.

Cela vaut-il la peine d'essayer

Si vous êtes un développeur qui veut passer à un ordinateur portable Linux Arm, ou un passionné avec une carte RISC-V — certainement oui. C'est le projet le plus actif et performant dans sa niche.

Box64 n'essaie pas de remplacer la virtualisation complète, il vous donne simplement la possibilité d'utiliser des logiciels familiers là où ils ne devraient pas exister. Le projet est écrit en C, très compact et flexible dans sa configuration.

Bien sûr, la documentation est dispersée dans différents fichiers par endroits, et vous devrez fouiller dans les manuels pour configurer Wine, mais le résultat en vaut la peine. Quand un logiciel destiné à des ordinateurs de bureau puissants s'exécute sur une petite carte pour quelques dizaines d'euros, cela ressemble à un petit magie.

Vous pouvez consulter le code source et les instructions de construction dans le dépôt officiel ptitSeb/box64. Il y a aussi des liens vers les listes de compatibilité des jeux qui sont mises à jour presque quotidiennement.

Projets similaires