3 puntos por GN⁺ 2024-07-12 | 1 comentarios | Compartir por WhatsApp
  • WebVM ejecuta un entorno Linux dentro del navegador basado en WebAssembly, lo que permite manejar binarios x86 del lado del cliente sin servidor
  • Su base principal, CheerpX, compone la virtualización en el navegador con un compilador JIT de x86 a WebAssembly, un sistema de archivos virtual basado en bloques y un emulador de llamadas al sistema de Linux
  • La ejecución se procesa dentro del sandbox del navegador, y los binarios x86 se ejecutan en el dispositivo del usuario, no en un servidor
  • Los comandos de ejemplo incluyen python3, gcc, objdump, vim y curl, y curl --max-time 15 parrot.live requiere conectividad de red
  • Como entorno de prueba independiente, se ofrece Alpine / Xorg / i3 WebVM, y BrowserCode es un elemento relacionado que ejecuta Claude Code en el navegador

Cómo funciona WebVM

  • WebVM es un entorno Linux virtual que se ejecuta en el navegador mediante WebAssembly
  • CheerpX, el motor base, ejecuta binarios x86 dentro de un sandbox seguro
    • Todo el procesamiento se realiza completamente del lado del cliente

Componentes de la virtualización en el navegador con CheerpX

  • CheerpX incluye los siguientes elementos para la virtualización basada en navegador
    • Compilador JIT de x86 a WebAssembly

      • Sistema de archivos virtual basado en bloques
      • Emulador de llamadas al sistema de Linux

Entorno de prueba y comandos de ejemplo

  • Alpine / Xorg / i3 WebVM se ofrece como un nuevo entorno de prueba de WebVM
  • El ejemplo básico de WebVM propone los siguientes comandos
    • python3 examples/python3/fibonacci.py
    • gcc -o helloworld examples/c/helloworld.c && ./helloworld
    • objdump -d ./helloworld | less -M
    • vim examples/c/helloworld.c
    • curl --max-time 15 parrot.live
      • Este comando requiere conectividad de red

Elementos relacionados

  • BrowserCode es un elemento relacionado que ejecuta Claude Code en el navegador mediante WebAssembly

1 comentarios

 
GN⁺ 2024-07-12
Comentarios en Hacker News
  • Hay algunos proyectos parecidos más. Del lado de VM están https://copy.sh/v86/, https://bellard.org/jslinux/, https://jamesfriend.com.au/pce-js/ (https://github.com/jsdf/pce) y https://www.pcjs.org/; el último tiene mucho hardware y sistemas operativos (https://github.com/jeffpar/pcjs)
    Del lado de Mac OS también están https://infinitemac.org/ (https://blog.persistent.info/2023/03/infinitemac-dot-org.htm...), https://jamesfriend.com.au/projects/basiliskii/BasiliskII-wo... y https://jamesfriend.com.au/pce-js/pce-js-apps/

    • Estos son emuladores de sistema completo, mientras que WebVM se parece más a una capa de compatibilidad para binarios de espacio de usuario emulados. O sea, es más bien un “emulador de llamadas al sistema de Linux”, así que está en un nivel más alto y por eso tiende a ser más fácil de usar y más flexible
    • https://exaequos.com
    • Me pregunto en qué lugar quedarían las computadoras avanzadas construidas dentro de Minecraft en la escala de sofisticación comparadas con proyectos como estos y con WebVM
      https://duckduckgo.com/?q=comptuers+built+in+minecraft
  • El proyecto base parece no ser de código abierto. Dice: “WebVM está basado en una compilación de CheerpX alojada por nosotros. Recomendamos que los usuarios desplieguen su propia versión de WebVM, pero por el momento no permitimos el self-hosting del motor CheerpX en sí. Esta compilación pública de CheerpX se ofrece tal cual y es gratuita para exploración técnica, pruebas y uso no comercial. Si quieren crear un producto sobre CheerpX/WebVM, contáctennos”
    https://labs.leaningtech.com/blog/mini-webvm-your-linux-box-...

    • Qué lástima. Al principio me entusiasmó, pero ahora ya perdí el interés en este proyecto
  • Soy el desarrollador principal de WebVM y CTO de Leaning Technologies. Si tienen preguntas, las responderé, aunque aquí ya es bastante tarde y puede que sea dentro de unas horas. También pueden unirse al Discord: https://discord.gg/yTNZgySKGa

    • Gracias por participar. Tal vez sea una pregunta tonta, pero me gustaría saber por qué hacen algo así. También me da curiosidad qué casos de uso están imaginando, y si además de Discord tienen algún servidor o canal de IRC
      El trabajo está muy bueno. Espero que no suene como una burla ligera. Como detalle extra, abrí vi y la tecla Esc no respondía bien, no sé si por el navegador, así que nunca pensé que volvería a decir “no puedo salir de vi”
    • Me gustan mucho WebVM y los otros trabajos de Leaning Tech. Tengo curiosidad por saber si la implementación que maneja lwIP en la parte de red es open source
      Ya leí el post sobre redes que habían enlazado antes, pero me gustaría ver qué enfoque tomaron en concreto
    • Lo probé en Firefox sobre Linux y en general funciona bien, pero copiar y pegar no funciona, así que para trabajos de edición como programar eso puede ser bastante grave
      Además, a veces la pantalla se congela y no se muestran las pulsaciones de teclas. Normalmente al presionar backspace la pantalla vuelve a reaccionar. En about:performance de Firefox no aparece uso de CPU de esa pestaña, y en el htop de Linux de mi máquina Firefox tampoco se ve raro
      También tengo una pregunta. Vi que aunque cerraba la pestaña y la volvía a abrir, los archivos nuevos seguían ahí; no revisé localStorage ni nada de eso en las herramientas de desarrollo. Me da curiosidad si usan eso o alguna otra función del navegador. ¿Qué tan persistentes son realmente esos archivos?
    • Gracias por el esfuerzo. Me pregunto si hay una hoja de ruta para soporte de aplicaciones GUI
    • Me pregunto si esto tiene relación con Tailscale. Quisiera saber si Tailscale es como un proxy, si hay otras opciones y si Tailscale también es open source
      Vi otra respuesta: https://labs.leaningtech.com/blog/webvm-virtual-machine-with...
  • Parece que el título debería corregirse a algo como “WebVM es una VM de WebAssembly que corre en el navegador

  • El término de moda suena bien. Al final es un entorno de línea de comandos de Linux que corre en el navegador, y es lento

    • De acuerdo. La explicación actual más bien confunde todavía más. Da la impresión de que ahora también vamos a considerar “serverless” al código JavaScript que ejecuta el navegador web
  • Dice: “CheerpX enables you to run existing 32-bit x86 native binaries”. Es una pena que, de forma extraña, el soporte de wasm64 en los navegadores lleve años estancado

    • La mayoría de las funciones de WebAssembly, WebGL y WebGPU tardan muchísimo en llegar a los navegadores; casi hay que pensarlo en escalas de 10 años
  • Es inteligente ofrecer el networking con Tailscale. Evita algunos problemas potenciales

  • Se siente mucho más lento que https://bellard.org/jslinux/

    • Compilé y ejecuté la versión de un solo hilo de mandelbrot.c del benchmark game, y jslinux tardó 12 segundos mientras que webvm terminó en 1.2 segundos. En el host, con los mismos flags de gcc, tomó 0.03 segundos
  • Está genial, pero muchas veces no registra las pulsaciones del teclado, así que en la práctica es difícil de usar. Incluso como entorno de desarrollo local para un Web IDE, no parece lo suficientemente rápido
    node --version es rápido después de la primera ejecución, pero correr JavaScript es muy lento:
    user@:~$ time node -e "console.log('Hello')"
    Hello
    real 0m7.693s
    user 0m0.012s
    sys 0m0.000s

  • Me pregunto cuáles serían los casos de uso prácticos para algo así

    • Esta tecnología es muy flexible. Solo de entrada se me ocurren educación en Linux, programación y seguridad, documentación ejecutable para lenguajes arbitrarios o bibliotecas binarias, preservación de software y juegos históricos, virtualización de apps empresariales heredadas de Windows y entornos de desarrollo para Web IDEs
      Esos son solo algunos ejemplos, y la lista podría ser mucho más larga
    • Aunque no es WebVM en sí, hay un ejemplo hecho con WebContainers en https://demo.graphweaver.com/
      Como ejecuta un servidor Node.js y el frontend dentro del navegador, puedes ver lo que Graphweaver puede hacer sin instalar ni ejecutar nada en tu computadora aparte del navegador. El ejemplo combina una base de datos SQLite con una API REST, y Graphweaver expone una API GraphQL con ese resultado