Creando lo Imposible: Virtualización X86 en el Navegador con WebAssembly

Rate this content
Bookmark

WebAssembly es una característica del navegador diseñada para brindar un rendimiento predecible y alto a las aplicaciones web, pero sus capacidades a menudo son mal entendidas.


Esta charla explorará cómo WebAssembly es diferente de JavaScript, desde el punto de vista tanto del desarrollador como del motor del navegador, con un enfoque particular en la implementación V8/Chrome.


WebVM es nuestra solución para ejecutar eficientemente binarios x86 sin modificaciones en el navegador y muestra lo que se puede hacer con WebAssembly hoy en día. Se discutirá una descripción general de los componentes del proyecto, incluido el motor JIT, la capa de emulación de Linux y el backend de almacenamiento, seguido de demostraciones en vivo.

FAQ

Alessandro Pignotti es el fundador y CTO de Leaning Technologies, una empresa especializada en soluciones compiladas a JavaScript y WebAssembly.

Leaning Technologies ha lanzado tres productos principales: Chirp, una herramienta en C++ y un compilador de JavaScript y WebAssembly; ChirpJ, una máquina Java completa que puede ejecutarse en el navegador; y ChirpX, una tecnología más genérica que puede ejecutar código binario de forma segura en el navegador.

ChirpX es una tecnología desarrollada por Leaning Technologies que permite ejecutar de forma segura código binario en el navegador. Se utiliza para virtualizar aplicaciones completas directamente en el navegador sin necesidad de preprocesamiento o metadatos especiales.

WebVM es un experimento dentro de ChirpX que permite convertir la tecnología en un producto comercializable, facilitando la ejecución de sistemas virtualizados completos como Bash o Python directamente en el navegador.

ChirpX puede facilitar un entorno de aprendizaje sin mantenimiento donde los estudiantes pueden iniciar aplicaciones sin preocuparse por la compatibilidad con sus sistemas operativos, lo que es especialmente útil en el contexto educativo.

Es teóricamente posible implementar la llamada al sistema de Windows y ejecutar una pila completa de Windows usando la tecnología de Leaning Technologies, aunque se enfrentan a restricciones de licencia con Microsoft.

Las tecnologías desarrolladas por Leaning Technologies, como ChirpX y WebVM, son compatibles con cualquier navegador moderno, incluyendo Chrome, Firefox y Safari.

Los planes futuros para ChirpX incluyen la implementación del servidor completo de X.Org en el navegador y encontrar una forma de mapear OpenGL directamente a WebGL, lo que podría reducir significativamente la sobrecarga de ejecución.

Alessandro Pignotti
Alessandro Pignotti
21 min
16 Jun, 2022

Comments

Sign in or register to post your comment.

Video Summary and Transcription

ChirpX es una tecnología para ejecutar de forma segura código binario en el navegador, escrito en C++ y compilado a JavaScript WebAssembly. Puede ejecutar un sistema virtualizado completo en el navegador, incluyendo Bash y otros lenguajes como Python y JavaScript. ChirpX tiene como objetivo la escalabilidad y la capacidad de trabajar con bases de código grandes, admitiendo multiprocesamiento y multihilo. Utiliza un motor de ejecución de dos niveles con un intérprete y un motor JIT. Los planes futuros incluyen ejecutar el servidor completo de X.Org en el navegador e implementar la llamada al sistema de Windows. WebVM, la tecnología subyacente, tiene un sistema de archivos virtual respaldado por Cloudflare.

1. Introducción a ChirpX

Short description:

Soy Alessandro Pignotti, fundador y CTO de Leaning Technologies. Nos especializamos en soluciones compiladas a JavaScript y compiladas a WebAssembly. Hemos lanzado tres productos diferentes: Chirp, ChirpJ y ChirpX. ChirpX es una tecnología para ejecutar de forma segura código binario en el navegador. Es genérico, robusto y escalable. Lo escribimos en C++ y lo compilamos a JavaScript WebAssembly utilizando Chirp.

Así que, hola a todos. Y me gustaría comenzar agradeciendo a la organización por invitarme aquí y darme la oportunidad de presentarles algunas de las tecnologías que hemos desarrollado para ustedes. Y especialmente hoy, es un día especial para mí, porque es mi cumpleaños. Muchas gracias por venir aquí a celebrar conmigo, realmente lo aprecio.

Soy Alessandro Pignotti, fundador y CTO de Leaning Technologies. Nací y crecí en Roma, y me mudé a Pisa para mis estudios, y luego me mudé aquí en 2014. Y desde entonces, soy un orgulloso habitante de Ámsterdam. Si lo desean, pueden seguirme en Twitter, pero les recomendaría no contener la respiración mientras esperan a que publique algo.

Entonces, ¿qué hacemos? Somos una pequeña empresa especializada en el nicho de soluciones compiladas a JavaScript y compiladas a WebAssembly. En este pequeño nicho, creo que hacemos cosas bastante interesantes. Y a lo largo de los años, hemos lanzado tres productos diferentes. Uno de ellos fue Chirp, que es una herramienta en C++, un compilador de JavaScript y WebAssembly. El segundo fue ChirpJ, que no es solo un compilador para Java, en realidad. Es más bien una máquina Java completa que puede ejecutarse en el navegador. Y podemos usarlo incluso para ejecutar aplicaciones Java completamente gráficas en el navegador en este momento. Y luego decidimos dar un paso más. Y creamos ChirpX. Y ChirpX no es solo un producto, en realidad. En este momento, lo consideramos más como una tecnología. Es una solución muy genérica que puede hacer muchas cosas diferentes. Y como un primer experimento para ver cómo podemos convertir esto eventualmente en un producto que podamos vender, creamos WebVM, que es solo una de las posibles cosas que podemos construir con esto. Y hablaremos de eso. Porque, ya saben, cada uno de estos productos probablemente requerirá su propia charla de un par de horas Tenemos 20 minutos, así que necesitamos ir al grano. Entonces, ChirpX es una tecnología para ejecutar de forma segura código binario en el navegador, ¿de acuerdo? Y hay tres ideas principales que seguimos al crear esto. Queríamos construir algo que fuera genérico, robusto y escalable. Creo que pueden tener su propia intuición sobre lo que significan estos términos, pero explicaré más adelante qué quiero decir exactamente al usar estas palabras. Y en términos prácticos, lo que es ChirpX es una aplicación en C++ que escribimos desde cero. Lo escribimos nosotros mismos y lo compilamos a JavaScript WebAssembly utilizando Chirp, utilizando nuestro otro producto, para que pueda ejecutarse en el navegador. Y sé que es bueno hablar de las cosas, pero también es bueno ver cómo funcionan en la práctica.

2. Ejecución de un sistema virtualizado completo en el navegador

Short description:

Ahora demostraré que podemos ejecutar un sistema virtualizado completo en el navegador. Actualmente, tengo Bash, el shell, ejecutándose desde una distribución Debian en el navegador. Escribiré un binario desde cero y lo probaré. Quiero devolver un código de error en lugar del código de finalización exitosa habitual para ver si el shell puede manejarlo. Después de compilar el código usando GCC, el sistema carga los datos requeridos desde la red. La ejecución se completa y podemos probar si se ejecuta como se espera.

Y todos me recomendaron no hacer una demostración en vivo, pero, ¿saben qué? ¿Quién soy yo para seguir buenos consejos? Vamos a intentarlo. Entonces, lo que me gustaría hacer es demostrarles que podemos ejecutar un sistema virtualizado completo en el navegador. Y lo que tengo aquí ahora mismo es Bash, el shell, ejecutándose desde una distribución Debian en el navegador. Para demostrárselo, puedo, por ejemplo, listar un sistema de archivos y hay muchas cosas que se pueden esperar de un sistema real en ejecución.

Pero me gustaría demostrar que puedo ejecutar un binario que nunca se ha visto antes. Y a través de eso, supongo que simplemente escribiré uno. Y no sé ustedes, pero cuando quiero escribir un binario desde cero, lo primero que hago es abrir mi editor de texto. Así que... Es increíblemente difícil escribir correctamente en el escenario. Así que tenemos Vim, está ejecutándose, y ahora puedo escribir un caso de prueba muy pequeño. Y lo que está sucediendo ahora mismo es que todo esto se está ejecutando desde los binarios de XSAT que se ejecutan en su propia computadora. Y planeo hacer una palabra L muy simple. Para hacer algo que no sea completamente trivial, en realidad quiero, en lugar de devolver el código de retorno cero habitual que le dirá al sistema que el ejecutable se ha completado con éxito, quiero devolver un código de error. Quiero ver si el shell puede manejar eso. Así que vamos a probar esto. Genial.

Ahora quiero compilar esto. Para compilar código C++. Código C, en realidad, por supuesto usaré GCC. Y también podemos habilitar algunas optimizaciones porque nunca se sabe. Y esto parece correcto. De acuerdo. ¿Qué está sucediendo en segundo plano aquí? GCC es un ejecutable bastante grande y actualmente el sistema está cargando los datos requeridos desde la red. Y estos datos llegan en bloques porque en realidad es una implementación completa de X2 que se ejecuta desde un dispositivo de disco respaldado por una CDN. Está respaldado por cloudflare. Y esta ejecución se ha completado realmente. Podemos probar si esto incluso se puede ejecutar. Hace lo que esperamos que haga. Verifiquemos el código de error. Es lo que esperamos.

QnA

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Utilizando Rust desde Vue con WebAssembly
Vue.js London Live 2021Vue.js London Live 2021
8 min
Utilizando Rust desde Vue con WebAssembly
Top Content
Rust es un nuevo lenguaje para escribir código de alto rendimiento, que puede ser compilado a WebAssembly, y ejecutado dentro del navegador. En esta charla se te guiará sobre cómo puedes integrar Rust, dentro de una aplicación Vue, de una manera que es sencilla y fácil. Con ejemplos de cómo interactuar con Rust desde JavaScript, y algunas de las trampas a tener en cuenta.
Haciendo JavaScript en WebAssembly Rápido
JSNation Live 2021JSNation Live 2021
29 min
Haciendo JavaScript en WebAssembly Rápido
Top Content
JavaScript en el navegador se ejecuta muchas veces más rápido de lo que lo hacía hace dos décadas. Y eso sucedió porque los proveedores de navegadores pasaron ese tiempo trabajando en intensivas optimizaciones de rendimiento en sus motores JavaScript.Debido a este trabajo de optimización, JavaScript ahora se está ejecutando en muchos lugares además del navegador. Pero todavía hay algunos entornos donde los motores JS no pueden aplicar esas optimizaciones de la manera correcta para hacer las cosas rápidas.Estamos trabajando para resolver esto, comenzando una nueva ola de trabajo de optimización de JavaScript. Estamos mejorando el rendimiento de JavaScript para entornos completamente diferentes, donde se aplican reglas diferentes. Y esto es posible gracias a WebAssembly. En esta charla, explicaré cómo funciona todo esto y qué vendrá a continuación.
Construyendo Interfaces Controladas por el Cerebro en JavaScript
JSNation Live 2021JSNation Live 2021
27 min
Construyendo Interfaces Controladas por el Cerebro en JavaScript
Top Content
La neurotecnología es el uso de herramientas tecnológicas para entender más sobre el cerebro y permitir una conexión directa con el sistema nervioso. La investigación en este campo no es nueva, sin embargo, su accesibilidad para los desarrolladores de JavaScript sí lo es.En los últimos años, los sensores cerebrales se han puesto a disposición del público, con herramientas que hacen posible que los desarrolladores web experimenten construyendo interfaces controladas por el cerebro.A medida que esta tecnología evoluciona y desbloquea nuevas oportunidades, vamos a analizar uno de los últimos dispositivos disponibles, cómo funciona, las posibilidades que abre y cómo empezar a construir tu primera aplicación controlada por la mente usando JavaScript.
TensorFlow.js 101: Aprendizaje automático en el navegador y más allá
ML conf EU 2020ML conf EU 2020
41 min
TensorFlow.js 101: Aprendizaje automático en el navegador y más allá
Descubre cómo aprovechar el aprendizaje automático en JavaScript utilizando TensorFlow.js en el navegador y más allá en esta charla rápida. Inspírate a través de un montón de prototipos creativos que empujan los límites de lo que es posible en el navegador web moderno (las cosas han avanzado mucho) y luego da tus primeros pasos con el aprendizaje automático en minutos. Al final de la charla, todos entenderán cómo reconocer un objeto de su elección que luego se puede utilizar de cualquier manera creativa que puedas imaginar. Se asume familiaridad con JavaScript, pero no se requiere experiencia en aprendizaje automático. ¡Ven y da tus primeros pasos con TensorFlow.js!
Unreal Engine en WebAssembly/WebGPU
JS GameDev Summit 2022JS GameDev Summit 2022
33 min
Unreal Engine en WebAssembly/WebGPU
Top Content
Tradicionalmente, los juegos de navegador no han sido tomados en serio. Si quieres dirigirte a la web, eso tradicionalmente ha significado comprometer tu visión como desarrollador de juegos. Nuestro equipo en Wonder Interactive está en una misión para cambiar eso, llevando uno de los motores de juegos nativos más importantes del mundo al navegador - Unreal Engine. En nuestra charla, nos adentraremos en nuestros esfuerzos por portar el motor al navegador y continuar con el pionero trabajo inacabado iniciado en Epic Games hace casi una década en colaboración con Mozilla. Profundizaremos en lo que esto significa para el futuro de los juegos en el navegador y el metaverso abierto en la web.
Ampliando los límites de la codificación de video en navegadores con WebCodecs
JSNation 2023JSNation 2023
25 min
Ampliando los límites de la codificación de video en navegadores con WebCodecs
Top Content
La codificación de video de alta calidad en los navegadores ha sido tradicionalmente lenta, de baja calidad y no permitía mucha personalización. Esto se debe a que los navegadores nunca tuvieron una forma nativa de codificar videos aprovechando la aceleración de hardware. En esta charla, repasaré los secretos de la creación de videos de alta calidad en los navegadores de manera eficiente con el poder de WebCodecs y WebAssembly. Desde contenedores de video hasta muxing, audio y más allá, esta charla te dará todo lo que necesitas para renderizar tus videos en los navegadores hoy en día!