3 Punkte von GN⁺ 2024-07-12 | 1 Kommentare | Auf WhatsApp teilen
  • WebVM führt eine Linux-Umgebung im Browser auf Basis von WebAssembly aus und ermöglicht es, x86-Binärdateien clientseitig ohne Server zu nutzen
  • Die zentrale Grundlage CheerpX besteht aus einem x86-zu-WebAssembly-JIT-Compiler, einem virtuellen blockbasierten Dateisystem und einem Emulator für Linux-Systemaufrufe und bildet damit die Browser-Virtualisierung
  • Die Ausführung erfolgt innerhalb der Sandbox des Browsers, und x86-Binärdateien werden nicht auf einem Server, sondern auf dem Gerät der Nutzer ausgeführt
  • Zu den Beispielbefehlen gehören python3, gcc, objdump, vim und curl; curl --max-time 15 parrot.live benötigt Netzwerkzugriff
  • Als separate Testumgebung wird Alpine / Xorg / i3 WebVM bereitgestellt; BrowserCode ist ein verwandtes Projekt, das Claude Code im Browser ausführt

Wie WebVM ausgeführt wird

  • WebVM ist eine virtuelle Linux-Umgebung, die über WebAssembly im Browser läuft
  • Die zugrunde liegende Engine CheerpX führt x86-Binärdateien in einer sicheren Sandbox aus
    • Die Ausführung erfolgt vollständig clientseitig

Aufbau der Browser-Virtualisierung mit CheerpX

  • CheerpX enthält für browserbasierte Virtualisierung die folgenden Komponenten
    • x86-zu-WebAssembly-JIT-Compiler

      • virtuelles blockbasiertes Dateisystem
      • Emulator für Linux-Systemaufrufe

Testumgebung und Beispielbefehle

  • Alpine / Xorg / i3 WebVM wird als neue WebVM-Testumgebung angeboten
  • Das Standardbeispiel von WebVM schlägt die folgenden Befehle vor
    • 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
      • Dieser Befehl benötigt Netzwerkzugriff

Verwandte Einträge

  • BrowserCode ist ein verwandter Eintrag, der Claude Code über WebAssembly im Browser ausführt

1 Kommentare

 
GN⁺ 2024-07-12
Meinungen auf Hacker News
  • Es gibt noch ein paar ähnliche Projekte. Bei VMs gibt es https://copy.sh/v86/, https://bellard.org/jslinux/, https://jamesfriend.com.au/pce-js/ (https://github.com/jsdf/pce) und https://www.pcjs.org/; Letzteres bietet viele Hardware- und Betriebssysteme (https://github.com/jeffpar/pcjs)
    Bei Mac OS gibt es außerdem https://infinitemac.org/ (https://blog.persistent.info/2023/03/infinitemac-dot-org.htm...), https://jamesfriend.com.au/projects/basiliskii/BasiliskII-wo... und https://jamesfriend.com.au/pce-js/pce-js-apps/

    • Das sind Vollsystem-Emulatoren, während WebVM eher eine Kompatibilitätsschicht für emulierte User-Space-Binaries ist. Es ist also ein „Linux-System-Call-Emulator“, damit etwas höher angesiedelt und entsprechend einfacher zu verwenden und flexibler
    • https://exaequos.com
    • Ich frage mich, wo fortgeschrittene Computer, die in Minecraft gebaut wurden, auf der Skala der Ausgereiftheit im Vergleich zu solchen Projekten und WebVM einzuordnen sind
      https://duckduckgo.com/?q=comptuers+built+in+minecraft
  • Das zugrunde liegende Projekt scheint nicht Open Source zu sein. Dort heißt es: „WebVM basiert auf einem von uns gehosteten CheerpX-Build. Wir ermutigen Nutzer, eigene Versionen von WebVM bereitzustellen, erlauben derzeit aber kein Self-Hosting der CheerpX-Engine selbst. Dieser öffentliche CheerpX-Build wird wie besehen bereitgestellt und ist für technische Erkundung, Tests und nichtkommerzielle Nutzung kostenlos. Wenn Sie ein Produkt auf CheerpX/WebVM aufbauen möchten, kontaktieren Sie uns“
    https://labs.leaningtech.com/blog/mini-webvm-your-linux-box-...

    • Schade. Anfangs war ich gespannt, aber jetzt ist mein Interesse an diesem Projekt verflogen
  • Ich bin Lead-Entwickler von WebVM und CTO von Leaning Technologies. Wenn es Fragen gibt, beantworte ich sie gern, aber hier ist es ziemlich spät, es kann also ein paar Stunden dauern. Ihr könnt auch dem Discord beitreten: https://discord.gg/yTNZgySKGa

    • Danke fürs Mitmachen. Vielleicht ist das eine dumme Frage, aber mich interessiert, warum ihr so etwas baut. Mich interessieren auch die Use Cases, die ihr euch vorstellt, und ob es statt Discord auch einen IRC-Server oder -Channel gibt
      Die Arbeit ist beeindruckend. Ich hoffe, das klingt nicht leicht sarkastisch. Nebenbei: Ich habe vi geöffnet, und Esc funktionierte wohl wegen des Browsers nicht richtig, sodass ich nicht erwartet hätte, wieder einmal „ich komme aus vi nicht raus“ sagen zu müssen
    • Ich mag WebVM und die anderen Arbeiten von Leaning Tech wirklich sehr. Ich frage mich, ob die Implementierung, die im Networking-Teil lwIP verwendet, Open Source ist
      Den zuvor verlinkten Artikel zum Networking habe ich gelesen, aber ich würde gern sehen, welchen konkreten Ansatz ihr gewählt habt
    • Ich habe es unter Firefox auf Linux getestet, und im Großen und Ganzen funktioniert es gut, aber Kopieren und Einfügen geht nicht, was für Bearbeitungsarbeiten wie Programmieren ziemlich fatal sein kann
      Außerdem friert der Bildschirm gelegentlich ein und Tastatureingaben werden nicht angezeigt. Normalerweise löst sich das, wenn man Backspace drückt. In Firefox’ about:performance sehe ich keine CPU-Auslastung dieses Tabs, und auch in htop auf meinem Linux-Rechner wirkt Firefox nicht auffällig
      Ich habe auch eine Frage: Mir ist aufgefallen, dass neue Dateien erhalten bleiben, selbst wenn ich den Tab schließe und wieder öffne; ich habe aber nicht per Entwicklertools localStorage o. Ä. geprüft. Nutzt ihr das, oder eine andere Browser-Funktion? Wie persistent sind diese Dateien tatsächlich?
    • Danke für die Mühe. Ich frage mich, ob es eine Roadmap für Unterstützung von GUI-Anwendungen gibt
    • Ich frage mich, ob es mit Tailscale zusammenhängt. Ich würde gern wissen, ob Tailscale eine Art Proxy ist, ob es andere Optionen gibt und ob Tailscale ebenfalls Open Source ist
      Ich habe eine andere Antwort gesehen: https://labs.leaningtech.com/blog/webvm-virtual-machine-with...
  • Der Titel sollte wohl eher in „WebVM ist eine WebAssembly-VM, die im Browser läuft“ geändert werden

  • Tolles Buzzword. Am Ende ist es eine Linux-Kommandozeilenumgebung, die im Browser läuft, und sie ist langsam

    • Zustimmung. Die aktuelle Beschreibung verwirrt eher noch mehr. Man fragt sich, ob inzwischen auch JavaScript-Code, den ein Webbrowser ausführt, als „serverless“ gilt
  • Dort steht: „CheerpX enables you to run existing 32-bit x86 native binaries“. Seltsamerweise stagniert die wasm64-Unterstützung in Browsern seit Jahren, was schade ist

    • Die meisten WebAssembly-, WebGL- und WebGPU-Funktionen brauchen wirklich sehr lange, bis sie in Browsern landen; man muss da fast in Jahrzehnten denken
  • Dass das Networking über Tailscale bereitgestellt wird, ist clever. Das umgeht einige potenzielle Probleme.

  • Es fühlt sich deutlich langsamer an als https://bellard.org/jslinux/.

    • Ich habe die Single-Thread-Version von mandelbrot.c aus dem Benchmarks Game kompiliert und ausgeführt: jslinux ist in 12 Sekunden fertig, webvm in 1,2 Sekunden. Auf dem Host dauert es mit denselben gcc-Flags 0,03 Sekunden.
  • Cool, aber Tastatureingaben werden häufig nicht angezeigt, wodurch es praktisch schwer benutzbar ist. Selbst für den Use Case einer lokalen Entwicklungsumgebung in einer Web-IDE wirkt es nicht schnell genug.
    node --version ist nach dem ersten Lauf schnell, JavaScript-Ausführung ist aber sehr langsam:
    user@:~$ time node -e "console.log('Hello')"
    Hello
    real 0m7.693s
    user 0m0.012s
    sys 0m0.000s

  • Ich frage mich, was die praktischen Use Cases für so etwas sind.

    • Diese Technologie ist sehr flexibel. Was mir spontan einfällt: Linux-, Programmier- und Security-Schulungen, ausführbare Dokumentation für beliebige Sprachen oder binäre Libraries, Bewahrung historischer Software und Spiele, Virtualisierung von Legacy-Windows-Unternehmens-Apps, Entwicklungsumgebungen für Web-IDEs usw.
      Das sind nur ein paar Beispiele, die Liste ließe sich noch deutlich verlängern.
    • Nicht WebVM selbst, aber ein Beispiel, das mit WebContainers gebaut wurde, ist https://demo.graphweaver.com/
      Es führt einen Node.js-Server und ein Frontend im Browser aus, sodass man sehen kann, was Graphweaver leisten kann, ohne auf dem Computer außer einem Browser irgendetwas zu installieren oder auszuführen. Das Beispiel kombiniert eine SQLite-Datenbank mit einer REST API, und Graphweaver stellt daraus eine GraphQL API bereit.