Programmation et développement logiciel

Cloudflare permet d’exécuter des applications Rust natives sur Workers via une cible Emscripten expérimentale

Cloudflare a annoncé la prise en charge expérimentale de la cible Emscripten ‏wasm32-unknown-emscripten dans wasm-bindgen et Rust Workers, élargissant ainsi la compatibilité des bibliothèques Rust avec la plateforme Workers. Ce travail comprend l’intégration de Tokio ainsi que la prise en charge de TCP, UDP et des sockets Unix, avec une démonstration pratique de l’exécution d’un serveur Minecraft au sein d’un Durable Object.

2026-09-28
5 min de lecture
10 vues
certi.news Editorial Team
Cloudflare permet d’exécuter des applications Rust natives sur Workers via une cible Emscripten expérimentale

Cloudflare a annoncé la première préversion expérimentale publique de la prise en charge de la cible de compilation wasm32-unknown-emscripten dans la chaîne d’outils wasm-bindgen et l’environnement Rust Workers. Cette voie permet de compiler et d’exécuter un plus grand nombre d’applications et de bibliothèques Rust natives au format WebAssembly sur la plateforme mondiale Workers, au lieu de se limiter aux bibliothèques déjà compatibles avec le modèle WebAssembly traditionnel.

Ce travail constitue une intégration entre Emscripten, qui fournit une couche permettant de relier le code natif à l’environnement web et d’émuler des fonctionnalités telles que le système de fichiers, les temporisateurs et les sockets, et wasm-bindgen, qui se charge de créer les bindings entre Rust et JavaScript. Grâce aux nouvelles modifications, le compilateur Rust et le compilateur Emscripten peuvent tous deux utiliser la couche de bindings de l’autre au cours du même processus de compilation.

Élargir la compatibilité des bibliothèques Rust

Cloudflare affirme que les premiers tests ont montré une meilleure compatibilité avec les bibliothèques Rust, y compris les bibliothèques de bas niveau. Des bibliothèques telles que libc, socket2 et Mio n’ont nécessité que des modifications limitées afin d’ajouter la cible Emscripten aux conditions de la plateforme. La bibliothèque la plus complexe a été Tokio, car Workers fonctionne sur un seul thread au sein d’une boucle d’événements JavaScript, tandis que Tokio dépend traditionnellement de la suspension du thread pendant l’attente d’opérations d’entrée et de sortie.

Pour traiter cette différence, Cloudflare travaille sur deux voies. La première utilise WebAssembly JavaScript Promise Integration, qui permet de suspendre la pile WebAssembly et de rendre le contrôle à la boucle d’événements JavaScript. Cela exige une gestion précise du contexte local du thread lorsque les piles sont suspendues puis reprises. La seconde voie propose un modèle LocalEventLoop pour Tokio, dans lequel les tâches prêtes sont exécutées via une opération drive(), tandis que l’attente est remplacée par un signal de notification adressé à la boucle d’événements hôte.

Prise en charge des sockets et des réseaux TCP

La prise en charge des réseaux a constitué un défi supplémentaire, car Tokio s’appuie sur epoll_wait() via Mio, tandis qu’Emscripten offrait une prise en charge limitée de poll() ainsi qu’une couche d’émulation WebSocket. Cloudflare a donc contribué à plus de 40 demandes de fusion dans Emscripten afin d’ajouter une couche -sNODERAWSOCKETS, qui fournit la prise en charge d’epoll, de TCP, d’UDP et des sockets Unix via l’interface node:net.

Comme Workers offre une compatibilité avec les interfaces Node.js, le même pont peut être utilisé au sein de la plateforme, sans ajouter d’interfaces personnalisées distinctes entre Emscripten et Cloudflare. Ces fonctionnalités restent expérimentales, et certains correctifs de Tokio sont encore en cours d’examen avant leur intégration définitive au projet.

Test pratique avec un serveur Minecraft

Pour tester le niveau de compatibilité, l’ingénieur de Cloudflare Dan Lapid a exécuté dans un Durable Object le serveur Minecraft écrit en Rust, connu sous le nom de Pumpkin. Comme le Durable Object fonctionne sur un seul thread, les boucles du jeu, la planification des régions et les tâches de Rayon ont été converties en tâches coopératives au sein d’une boucle Tokio, au lieu de reposer sur des threads de système d’exploitation indépendants.

Le serveur a utilisé le système de fichiers via les interfaces Node.js, en stockant les fichiers dans SQLite propre au Durable Object au moyen de la bibliothèque worker-fs-mount. Les connexions des joueurs sont également passées par l’ingress TCP, puis vers un serveur TCP à l’intérieur de l’objet. Selon Cloudflare, cela a permis d’exécuter un serveur Minecraft multijoueur, avec conservation de l’état et redémarrage de l’objet à partir du monde stocké.

Pourquoi cette évolution est-elle importante ?

La valeur pratique de cette modification ne réside pas seulement dans l’ajout d’une nouvelle cible de compilation, mais aussi dans la réduction du nombre de bibliothèques et d’applications nécessitant une réécriture pour fonctionner sur Workers. Cloudflare décrit toutefois cette prise en charge comme expérimentale et préliminaire, tandis que la nouvelle conception de Tokio, la prise en charge de JSPI et certaines intégrations d’Emscripten sont encore en cours de développement et d’examen upstream. Cette voie ouvre donc la porte à des expérimentations visant à exécuter des applications Rust natives, mais ne prouve pas encore qu’elle constitue une solution complète et stable pour tous les environnements d’exécution traditionnels.

Source de l’actualité
c
Auteur

certi.news Editorial Team

Dans la même catégorie

À lire également

Voir toutes les actualités