Programación y desarrollo de software

Cloudflare permite ejecutar aplicaciones nativas de Rust en Workers mediante un objetivo experimental de Emscripten

Cloudflare anunció soporte experimental para el objetivo de Emscripten ‏wasm32-unknown-emscripten en wasm-bindgen y Rust Workers, lo que amplía la compatibilidad de las bibliotecas de Rust con la plataforma Workers. El trabajo incluye la integración de Tokio y compatibilidad con TCP, UDP y Unix sockets, además de una demostración práctica de la ejecución de un servidor de Minecraft dentro de Durable Object.

2026-09-28
4 min de lectura
12 visitas
certi.news Editorial Team
Cloudflare permite ejecutar aplicaciones nativas de Rust en Workers mediante un objetivo experimental de Emscripten

Cloudflare anunció la primera vista previa pública experimental de la compatibilidad con el objetivo de compilación wasm32-unknown-emscripten dentro de la cadena de herramientas wasm-bindgen y el entorno Rust Workers. Esta vía permite compilar y ejecutar un mayor número de aplicaciones y bibliotecas nativas de Rust en formato WebAssembly sobre la plataforma global Workers, en lugar de limitarse a las bibliotecas previamente compatibles con el modelo tradicional de WebAssembly.

Este trabajo integra Emscripten, que proporciona una capa para vincular código nativo con el entorno web y emular funciones como el sistema de archivos, los temporizadores y los sockets, con wasm-bindgen, que se encarga de crear bindings entre Rust y JavaScript. Con los nuevos cambios, tanto el compilador de Rust como el compilador de Emscripten pueden utilizar la capa de bindings del otro dentro del mismo proceso de compilación.

Ampliación de la compatibilidad de las bibliotecas de Rust

Cloudflare afirma que las pruebas iniciales mostraron una mejor compatibilidad con las bibliotecas de Rust, incluidas las de bajo nivel. Bibliotecas como libc, socket2 y Mio necesitaron modificaciones limitadas para añadir el objetivo de Emscripten a las condiciones de la plataforma. La biblioteca más compleja fue Tokio, porque Workers funciona con un solo hilo dentro de un bucle de eventos de JavaScript, mientras que Tokio depende tradicionalmente de bloquear el hilo mientras espera operaciones de entrada y salida.

Para abordar esta diferencia, Cloudflare trabaja en dos vías. La primera utiliza WebAssembly JavaScript Promise Integration, que permite suspender la pila de WebAssembly y devolver el control al bucle de eventos de JavaScript. Esto requiere gestionar cuidadosamente el contexto local del hilo al suspender y reanudar las pilas. La segunda vía propone un patrón LocalEventLoop para Tokio, en el que las tareas listas se ejecutan mediante una operación drive() y la espera se sustituye por una señal de notificación al bucle de eventos anfitrión.

Compatibilidad con sockets y redes TCP

La compatibilidad de red fue otro desafío, ya que Tokio depende de epoll_wait() a través de Mio, mientras que Emscripten ofrecía una compatibilidad limitada con poll() y una capa para emular WebSocket. Por ello, Cloudflare contribuyó con más de 40 solicitudes de integración en Emscripten para añadir la capa -sNODERAWSOCKETS, que proporciona compatibilidad con epoll, TCP, UDP y Unix sockets mediante la interfaz node:net.

Dado que Workers ofrece compatibilidad con las interfaces de Node.js, el mismo puente puede utilizarse dentro de la plataforma, sin añadir interfaces personalizadas separadas entre Emscripten y Cloudflare. Estas capacidades siguen siendo experimentales, y algunos parches de Tokio aún están en revisión antes de integrarse definitivamente en el proyecto.

Prueba práctica mediante un servidor de Minecraft

Para probar el alcance de la compatibilidad, el ingeniero de Cloudflare Dan Lapid ejecutó dentro de Durable Object el servidor de Minecraft escrito en Rust conocido como Pumpkin. Como Durable Object funciona con un solo hilo, los bucles del juego, la programación de las regiones y las tareas de Rayon se convirtieron en tareas cooperativas dentro de un bucle de Tokio, en lugar de depender de hilos de sistema operativo independientes.

El servidor utilizó el sistema de archivos mediante interfaces de Node.js, almacenando los archivos en el SQLite propio de Durable Object a través de la biblioteca worker-fs-mount. Las conexiones de los jugadores también pasaron por TCP ingress y luego llegaron a un servidor TCP dentro del objeto. Según Cloudflare, esto permitió ejecutar un servidor de Minecraft multijugador con persistencia del estado y reinicio del objeto a partir del mundo almacenado.

¿Por qué es importante este avance?

El valor práctico del cambio no reside únicamente en añadir un nuevo objetivo de compilación, sino en reducir el número de bibliotecas y aplicaciones que necesitan reescribirse para funcionar en Workers. Sin embargo, Cloudflare describe la compatibilidad como experimental y previa al lanzamiento, y el nuevo diseño de Tokio, la compatibilidad con JSPI y algunas integraciones de Emscripten aún están en desarrollo y revisión upstream. Por ello, esta vía abre la puerta a experimentar con la ejecución de aplicaciones nativas de Rust, pero todavía no demuestra que sea una alternativa completa y estable para todos los entornos de ejecución tradicionales.

Fuente de la noticia
Cloudflare Blog
Abrir fuente original ↗
c
Autor

certi.news Editorial Team

De la misma categoría

También te puede interesar

Ver todas las noticias