3 pontos por GN⁺ 2024-07-12 | 1 comentários | Compartilhar no WhatsApp
  • WebVM executa um ambiente Linux no navegador com base em WebAssembly, permitindo lidar com binários x86 no lado do cliente sem servidor
  • A base principal, CheerpX, compõe a virtualização no navegador com um compilador JIT de x86 para WebAssembly, um sistema de arquivos virtual baseado em blocos e um emulador de chamadas de sistema Linux
  • A execução ocorre dentro do sandbox do navegador, e os binários x86 são executados no dispositivo do usuário, não em um servidor
  • Os comandos de exemplo incluem python3, gcc, objdump, vim, curl etc., e curl --max-time 15 parrot.live requer conectividade de rede
  • Como ambiente separado de demonstração, é oferecido o Alpine / Xorg / i3 WebVM, e o BrowserCode é um item relacionado que executa Claude Code no navegador

Como o WebVM funciona

  • WebVM é um ambiente virtual Linux executado no navegador por meio de WebAssembly
  • O motor subjacente, CheerpX, executa binários x86 em um sandbox seguro
    • O processamento da execução acontece inteiramente no lado do cliente

Componentes da virtualização no navegador do CheerpX

  • O CheerpX inclui os seguintes elementos para virtualização baseada em navegador
    • Compilador JIT de x86 para WebAssembly

      • Sistema de arquivos virtual baseado em blocos
      • Emulador de chamadas de sistema Linux

Ambiente de demonstração e comandos de exemplo

  • Alpine / Xorg / i3 WebVM é oferecido como novo ambiente de demonstração do WebVM
  • O exemplo padrão do WebVM sugere os seguintes 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 requer rede

Itens relacionados

  • BrowserCode é um item relacionado que executa Claude Code no navegador por meio de WebAssembly

1 comentários

 
GN⁺ 2024-07-12
Comentários do Hacker News
  • Existem mais alguns projetos parecidos. Do lado de VM, há https://copy.sh/v86/, https://bellard.org/jslinux/, https://jamesfriend.com.au/pce-js/ (https://github.com/jsdf/pce) e https://www.pcjs.org/; o último tem bastante hardware e sistemas operacionais (https://github.com/jeffpar/pcjs)
    Do lado de Mac OS, também há https://infinitemac.org/ (https://blog.persistent.info/2023/03/infinitemac-dot-org.htm...), https://jamesfriend.com.au/projects/basiliskii/BasiliskII-wo... e https://jamesfriend.com.au/pce-js/pce-js-apps/

    • Esses são emuladores de sistema completo, e o WebVM está mais próximo de uma camada de compatibilidade para binários de espaço de usuário emulados. Ou seja, é um “emulador de chamadas de sistema do Linux”, então fica em um nível mais alto e, por isso, tende a ser mais fácil de usar e mais flexível
    • https://exaequos.com
    • Fico curioso para saber em que ponto, na escala de sofisticação, ficam os computadores avançados construídos dentro do Minecraft em comparação com projetos assim e com o WebVM
      https://duckduckgo.com/?q=comptuers+built+in+minecraft
  • Pelo visto, o projeto-base não é open source. Está escrito: “WebVM is based on a build of CheerpX hosted by us. Users are encouraged to deploy their own version of WebVM, but self-hosting of the underlying CheerpX engine itself is not currently permitted. This public CheerpX build is provided as-is and is free for technical exploration, testing, and non-commercial use. If you would like to build products on top of CheerpX/WebVM please contact us”
    https://labs.leaningtech.com/blog/mini-webvm-your-linux-box-...

    • Que pena. No começo eu tinha ficado animado, mas agora perdi o interesse nesse projeto
  • Sou o desenvolvedor líder do WebVM e CTO da Leaning Technologies. Se tiverem perguntas, responderei, mas já está bem tarde aqui, então pode ser que leve algumas horas. Também podem entrar no Discord: https://discord.gg/yTNZgySKGa

    • Obrigado por participar. Pode ser uma pergunta boba, mas queria saber por que construir algo assim. Também tenho curiosidade sobre quais casos de uso vocês estão imaginando e queria perguntar se existe algum servidor ou canal de IRC em vez de Discord
      O trabalho é muito legal. Espero que não soe como deboche leve. E, como observação, abri o vi e o Esc não funcionou muito bem, não sei se por causa do navegador, então não imaginei que voltaria a dizer “não consigo sair do vi”
    • Gosto muito do WebVM e dos outros trabalhos da Leaning Tech. Tenho curiosidade se a implementação que lida com lwIP na parte de rede é open source
      Li antes o post sobre rede que foi linkado, mas queria ver que abordagem específica vocês adotaram
    • Testei no Firefox no Linux e, no geral, funciona bem, mas copiar e colar não funciona, o que pode ser bem crítico para trabalho de edição, como programação
      Além disso, às vezes a tela trava e a digitação não aparece. Normalmente, se eu aperto backspace, a tela destrava. No about:performance do Firefox não aparece uso de CPU dessa aba, e no htop do Linux da minha máquina o Firefox também não parece estranho
      Também tenho uma pergunta. Vi que arquivos novos continuam lá mesmo depois de fechar e reabrir a aba, mas não olhei em localStorage nem nada parecido nas ferramentas de desenvolvedor. Queria saber se foi isso que vocês usaram ou algum outro recurso do navegador. E, na prática, quão persistentes são esses arquivos?
    • Obrigado pelo esforço. Queria saber se existe algum roadmap para suporte a aplicações GUI
    • Tenho curiosidade se isso tem alguma relação com o Tailscale. Queria saber se o Tailscale funciona como uma espécie de proxy, se existem outras opções e se o Tailscale também é open source
      Vi outra resposta: https://labs.leaningtech.com/blog/webvm-virtual-machine-with...
  • O título talvez devesse ser ajustado para algo como “WebVM é uma VM WebAssembly que roda no navegador

  • O termo da moda é legal. No fim das contas, é um ambiente de linha de comando Linux rodando no navegador, e lento

    • Concordo. A descrição atual só confunde ainda mais. Dá até a impressão de que agora código JavaScript executado pelo navegador também estaria sendo tratado como “serverless”
  • Está escrito “CheerpX enables you to run existing 32-bit x86 native binaries”. Estranhamente, o suporte do navegador a wasm64 está parado há anos, o que é uma pena

    • A maioria dos recursos de WebAssembly, WebGL e WebGPU leva um tempão para chegar aos navegadores; é praticamente uma escala de quase 10 anos
  • É inteligente oferecer a rede via Tailscale. Isso contorna alguns problemas potenciais

  • Parece bem mais lento do que o https://bellard.org/jslinux/

    • Compilei e rodei a versão single-thread de mandelbrot.c do benchmark game, e o jslinux terminou em 12 segundos, enquanto o webvm terminou em 1,2 segundo. No host, com as mesmas flags do gcc, levou 0,03 segundo
  • É legal, mas como as teclas digitadas muitas vezes não aparecem, na prática é difícil de usar. Mesmo como ambiente de desenvolvimento local para um Web IDE, não parece rápido o bastante
    node --version é rápido depois da primeira execução, mas executar JavaScript é muito lento:
    user@:~$ time node -e "console.log('Hello')"
    Hello
    real 0m7.693s
    user 0m0.012s
    sys 0m0.000s

  • Fico me perguntando quais seriam os casos de uso práticos para algo assim

    • Essa tecnologia é muito flexível. Só de imediato, dá para pensar em Linux, programação, educação em segurança, documentação executável para linguagens ou bibliotecas binárias arbitrárias, preservação de software e jogos históricos, virtualização de aplicativos corporativos legados do Windows e ambientes de desenvolvimento para Web IDEs
      Esses são apenas alguns exemplos, e a lista poderia ser muito mais longa
    • Não é o próprio WebVM, mas há um exemplo feito com WebContainers em https://demo.graphweaver.com/
      Como ele roda um servidor Node.js e o frontend dentro do navegador, você pode ver o que o Graphweaver é capaz de fazer sem instalar nem executar nada no computador além do navegador. O exemplo combina um banco de dados SQLite com uma API REST, e o Graphweaver fornece uma API GraphQL como resultado