- 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., etcurl --max-time 15 parrot.livené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.pygcc -o helloworld examples/c/helloworld.c && ./helloworldobjdump -d ./helloworld | less -Mvim examples/c/helloworld.ccurl --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
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/.
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-...
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
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’ai lu l’article sur le réseau lié précédemment, mais j’aimerais voir concrètement quelle approche a été retenue.
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 ?
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.
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.
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/
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 --versionest rapide après le premier lancement, mais l’exécution de JavaScript est très lente :user@:~$ time node -e "console.log('Hello')"Helloreal 0m7.693suser 0m0.012ssys 0m0.000sJe me demande quels sont les cas d’usage pratiques pour ce genre de chose.
Ce ne sont que quelques exemples, et la liste pourrait être bien plus longue.
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.