3 points par GN⁺ 2024-07-12 | 1 commentaires | Partager sur WhatsApp
  • WebVM exécute un environnement Linux dans le navigateur grâce à WebAssembly, ce qui permet de manipuler des binaires x86 côté client sans serveur
  • Sa base technique, CheerpX, compose la virtualisation du navigateur avec un compilateur JIT x86-vers-WebAssembly, un système de fichiers virtuel à blocs et un émulateur d’appels système Linux
  • L’exécution se fait dans le sandbox du navigateur, et les binaires x86 tournent sur l’appareil de l’utilisateur plutôt que sur un serveur
  • Les commandes d’exemple incluent python3, gcc, objdump, vim, curl, etc., et curl --max-time 15 parrot.live nécessite un accès réseau
  • Un environnement de démonstration distinct, Alpine / Xorg / i3 WebVM, est proposé, et BrowserCode est un projet lié qui exécute Claude Code dans le navigateur

Fonctionnement de WebVM

  • WebVM est un environnement Linux virtuel exécuté dans le navigateur via WebAssembly
  • Le moteur sous-jacent, CheerpX, exécute les binaires x86 dans un sandbox sécurisé
    • L’exécution s’effectue entièrement côté client

Composants de la virtualisation navigateur de CheerpX

  • Pour la virtualisation basée navigateur, CheerpX inclut les éléments suivants
    • Compilateur JIT x86-vers-WebAssembly

      • Système de fichiers virtuel à blocs
      • Émulateur d’appels système Linux

Environnement de démonstration et commandes d’exemple

  • Alpine / Xorg / i3 WebVM est proposé comme nouvel environnement de démonstration WebVM
  • L’exemple WebVM par défaut suggère les commandes suivantes
    • 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
      • Cette commande nécessite un accès réseau

Éléments liés

  • BrowserCode est un projet lié qui exécute Claude Code dans le navigateur via WebAssembly

1 commentaires

 
GN⁺ 2024-07-12
Avis sur Hacker News
  • Il existe quelques autres projets similaires. Côté VM, il y a https://copy.sh/v86/, https://bellard.org/jslinux/, https://jamesfriend.com.au/pce-js/ (https://github.com/jsdf/pce), https://www.pcjs.org/, ce dernier prenant en charge de nombreux matériels et systèmes d’exploitation (https://github.com/jeffpar/pcjs)
    Côté Mac OS, il y a aussi https://infinitemac.org/ (https://blog.persistent.info/2023/03/infinitemac-dot-org.htm...), https://jamesfriend.com.au/projects/basiliskii/BasiliskII-wo..., https://jamesfriend.com.au/pce-js/pce-js-apps/.

    • Ceux-là sont des émulateurs de système complet, tandis que WebVM ressemble davantage à une couche de compatibilité pour des binaires en espace utilisateur émulés. Autrement dit, c’est un « émulateur d’appels système Linux », donc un peu plus haut niveau, et d’autant plus facile à utiliser et flexible.
    • https://exaequos.com
    • Je me demande où se situent les ordinateurs avancés construits dans Minecraft sur l’échelle de sophistication par rapport à ces projets et à WebVM.
      https://duckduckgo.com/?q=comptuers+built+in+minecraft
  • Le projet sous-jacent ne semble pas être open source. Il est indiqué : « WebVM est basé sur une version de CheerpX que nous hébergeons. Nous encourageons les utilisateurs à déployer leur propre version de WebVM, mais nous n’autorisons pas actuellement l’auto-hébergement du moteur CheerpX lui-même. Cette version publique de CheerpX est fournie telle quelle et est gratuite pour l’exploration technique, les tests et les usages non commerciaux. Si vous souhaitez créer un produit au-dessus de CheerpX/WebVM, contactez-nous. »
    https://labs.leaningtech.com/blog/mini-webvm-your-linux-box-...

    • Dommage. Au début, j’étais enthousiaste, mais maintenant ce projet ne m’intéresse plus.
  • Je suis le développeur principal de WebVM et le CTO de Leaning Technologies. Je répondrai aux questions s’il y en a, mais il est assez tard ici, donc cela pourra prendre quelques heures. Vous pouvez aussi rejoindre le Discord : https://discord.gg/yTNZgySKGa

    • Merci d’être là. C’est peut-être une question bête, mais je me demande pourquoi vous construisez quelque chose comme ça. Je suis aussi curieux de savoir quels cas d’usage vous avez en tête, et s’il existe un serveur ou un canal IRC plutôt que Discord.
      Le travail est impressionnant. J’espère que cela ne sonne pas comme une remarque sarcastique. Au passage, j’ai ouvert vi et Esc ne fonctionnait pas bien, peut-être à cause du navigateur ; je ne pensais pas devoir ressortir le « je n’arrive pas à quitter vi ».
    • J’aime beaucoup WebVM et les autres travaux de Leaning Tech. Je me demande si l’implémentation qui gère lwIP pour la partie réseau est open source.
      J’ai lu l’article sur le réseau lié précédemment, mais j’aimerais voir concrètement quelle approche a été retenue.
    • J’ai testé sous Firefox sur Linux et, globalement, ça fonctionne bien, mais le copier-coller ne marche pas, ce qui peut être assez rédhibitoire pour des tâches d’édition comme la programmation.
      Par ailleurs, l’écran se fige parfois et les frappes au clavier ne s’affichent pas. En général, appuyer sur retour arrière débloque l’affichage. Dans about:performance de Firefox, je ne vois pas l’utilisation CPU de l’onglet concerné, et dans htop sur ma machine Linux, Firefox ne semble pas anormal.
      J’ai aussi une question. J’ai constaté que les nouveaux fichiers restent présents même après avoir fermé puis rouvert l’onglet, mais je n’ai pas vérifié localStorage ou autre dans les outils de développement. Est-ce que vous utilisez cela, ou une autre fonctionnalité du navigateur ? À quel point ces fichiers sont-ils réellement persistants ?
    • Merci pour vos efforts. Je me demande si la prise en charge des applications GUI figure dans la feuille de route.
    • Je me demande quel est le lien avec Tailscale. J’aimerais savoir si Tailscale est une sorte de proxy, s’il existe d’autres options, et si Tailscale est également open source.
      J’ai vu une autre réponse : https://labs.leaningtech.com/blog/webvm-virtual-machine-with...
  • Le titre devrait plutôt être quelque chose comme « WebVM est une VM WebAssembly qui s’exécute dans le navigateur ».

  • Le buzzwording est joli. Au final, c’est un environnement en ligne de commande Linux qui s’exécute dans le navigateur, et c’est lent.

    • D’accord. La description actuelle embrouille plutôt les choses. On se demande maintenant si le code JavaScript exécuté par un navigateur web est lui aussi considéré comme « serverless ».
  • Il est écrit : « CheerpX enables you to run existing 32-bit x86 native binaries ». Curieusement, la prise en charge de wasm64 dans les navigateurs stagne depuis des années, ce qui est regrettable.

    • La plupart des fonctionnalités WebAssembly, WebGL et WebGPU mettent vraiment très longtemps à arriver dans les navigateurs ; il faut presque raisonner à l’échelle de la décennie.
  • Fournir le réseau via Tailscale est malin. Cela permet de contourner plusieurs problèmes potentiels.

  • Cela paraît beaucoup plus lent que https://bellard.org/jslinux/

    • J’ai compilé et lancé la version mono-thread de mandelbrot.c du Benchmarks Game : jslinux termine en 12 s, webvm en 1,2 s. Sur l’hôte, avec les mêmes flags gcc, cela prend 0,03 s.
  • C’est impressionnant, mais les frappes clavier ne s’affichent souvent pas, ce qui le rend pratiquement difficile à utiliser. Même pour le cas d’usage d’un environnement de développement local dans un Web IDE, cela ne semble pas assez rapide.
    node --version est rapide après le premier lancement, mais l’exécution de JavaScript est très lente :
    user@:~$ time node -e "console.log('Hello')"
    Hello
    real 0m7.693s
    user 0m0.012s
    sys 0m0.000s

  • Je me demande quels sont les cas d’usage pratiques pour ce genre de chose.

    • Cette technologie est très flexible. Rien que ce qui me vient immédiatement à l’esprit : enseignement de Linux, de la programmation et de la sécurité, documentation exécutable pour des langages ou bibliothèques binaires arbitraires, préservation de logiciels et jeux historiques, virtualisation d’apps Windows d’entreprise legacy, environnements de développement pour Web IDE, etc.
      Ce ne sont que quelques exemples, et la liste pourrait être bien plus longue.
    • Ce n’est pas WebVM lui-même, mais il existe un exemple réalisé avec WebContainers : https://demo.graphweaver.com/
      Comme il exécute un serveur Node.js et un frontend dans le navigateur, on peut voir ce que Graphweaver permet de faire sans rien installer ni lancer sur son ordinateur en dehors du navigateur. L’exemple combine une base de données SQLite avec une API REST, et Graphweaver fournit à partir de là une API GraphQL.