9 ms·
WebVM is a server-less virtual Linux environment running client-side
- fragmede 2y agoNetworking provided by Tailscale. Clever! Works around some potential issues.
- apignotti 2y agoUsing Tailscale is the most effective solution for in-browser networking, we wrote at length about the topic some time ago: https://labs.leaningtech.com/blog/webvm-virtual-machine-with-networking-via-tailscale https://labs.leaningtech.com/blog/webvm-virtual-machine-with...
- saurik 2y agoI am really confused by one part of your blog post: it says that you had to embed Lwip as applications don't send/receive IP packets... but you also describe this as x86 virtualization running specifically-Linux, and Linux absolutely has its own TCP stack, so I don't understand what Lwip is actually accomplishing here... I would have thought you'd essentially be implemented as a paravirtualized network adapter, but then the article mentions system calls? I guess I just fundamentally don't understand at what level of the stack you have this implemented... did you replace the Linux kernel and reimplement its entire system call layer?
- ncruces 2y agoYes: https://labs.leaningtech.com/cheerpx#cheerpx-versus-v86jslinux https://labs.leaningtech.com/cheerpx#cheerpx-versus-v86jslin... Also, a little below: CheerpX currently focuses on user mode (ring 3), and does not fully emulate the kernel (ring 0). We do, however, implement a subset of the Linux system call interface, which is enough to run most applications.
- cchance 2y agoCan we use custom derp/headscale setups? Would be interesting even for use internally then, hell rolling custom versions with preloaded software could also be pretty cool all connected to a corporate headscale/derp.
- bradfitz 2y agoPer their docs, yes: https://github.com/leaningtech/webvm/blob/main/docs/Tailscale.md#log-in-to-a-self-hosted-tailscale-network-headscale https://github.com/leaningtech/webvm/blob/main/docs/Tailscal...
- tech234a 2y agoCould be cool to see an implementation using Chrome's experimental Direct Sockets API [0]. The API requires using a form of new web packaging known as Isolated Web Apps which have a strict CSP [1] though, so it might not be possible to use it for this since I'd assume it's dynamically executing a lot of code. [0]: https://github.com/WICG/direct-sockets/blob/main/docs/explainer.md https://github.com/WICG/direct-sockets/blob/main/docs/explai... [1]: https://github.com/WICG/isolated-web-apps/blob/main/README.md https://github.com/WICG/isolated-web-apps/blob/main/README.m...
- matt3210 2y agoroot password?
- fragmede 2y ago"password", per https://github.com/leaningtech/webvm/blob/main/dockerfiles/debian_large#L18 https://github.com/leaningtech/webvm/blob/main/dockerfiles/d...
- talldayo 2y ago[flagged]
- fragmede 2y agoOne can still appreciate how well the violinist on the Titanic played while listening from a life-boat (if lucky enough to have been on one).
- nxobject 2y agoIt’s a cool hack - what can I say. Surprised at how it instantly loads to a usable shell, too, if there’s a lesson to be learned there. Is there a freeze-dried memory image being used?
- apignotti 2y agoAbsolutely not. The app starts at the entry point and execute instructions as normal. Both the main executable and libraries are all loaded on demand from a disk image delivered chunk-by-chunk over HTTP. The disk backend is based Clouflare workers with multiple levels of caching to maximize perf.
- darby_nine 2y agoGiven the absolute dysfunction on how browser standards are adopted this is expected behavior. Huge security risk, huge implementation cost, very low competition, and people hate electron apps.
- satvikpendem 2y agoSomething being cool technically doesn't mean it's wise philosophically.
- alex14fr 2y agoThis feels way slower than https://bellard.org/jslinux/ https://bellard.org/jslinux/
- jedisct1 2y agoHard to compete with Bellard :)
- nullifidian 2y agoI tried compiling mandelbrot.c (single threaded one) from the benchmarks game and execution on jslinux took 12 seconds, while webvm completed it in 1.2 sec. The host takes 0.03 sec with the same gcc flags.
- alex14fr 2y agoIt may be faster for this particular benchmark, yet it feels slow and sluggish for interactive use.
- apignotti 2y agoHi, Lead Dev of WebVM and CTO of Leaning Technologies here. Happy to answer any questions you might have... potentially in a few hours, it's quite late here :-) Even better, consider joining our Discord: https://discord.gg/yTNZgySKGa https://discord.gg/yTNZgySKGa
- debarshri 2y agoHello there, I havent tried webvm yet but looks similar to v86. There were lot of network related challenges working with v86, for eg. You cant do curl, DNS resolution does not work out of the box. How did you address these challenges in webvm. I think it is very interesting and exciting what you guys are building.
- apignotti 2y agoWe support networking via Tailscale, we wrote a detailed blog post some time ago: https://labs.leaningtech.com/blog/webvm-virtual-machine-with-networking-via-tailscale https://labs.leaningtech.com/blog/webvm-virtual-machine-with...
- theanonymousone 2y agoHi and thanks for the effort. Is there a roadmap for supporting GUI applications?
- smusamashah 2y agoThere are a few others VMs https://copy.sh/v86/ https://copy.sh/v86/ https://bellard.org/jslinux/ https://bellard.org/jslinux/ https://jamesfriend.com.au/pce-js/ https://jamesfriend.com.au/pce-js/ (https://github.com/jsdf/pce https://github.com/jsdf/pce) https://www.pcjs.org/ https://www.pcjs.org/ (lots of hardware and OSes) (https://github.com/jeffpar/pcjs https://github.com/jeffpar/pcjs) Mac OS https://infinitemac.org/ https://infinitemac.org/ (https://blog.persistent.info/2023/03/infinitemac-dot-org.html https://blog.persistent.info/2023/03/infinitemac-dot-org.htm...) https://jamesfriend.com.au/projects/basiliskii/BasiliskII-worker.html https://jamesfriend.com.au/projects/basiliskii/BasiliskII-wo... https://jamesfriend.com.au/pce-js/pce-js-apps/ https://jamesfriend.com.au/pce-js/pce-js-apps/
- tamimio 2y agoWhat a practical use case of such thing?
- apignotti 2y ago(Same answer as a more deeply nested comment below) The technology is extremely flexibile, off the top of my head: * Education (Linux, Programming, Security, ...) * Live docs for arbitrary languages and binary libraries * Preservation of historical software and games * Virtualization of legacy Windows enterprise apps. * Dev environment for Web IDEs Just a few examples, the list could go on for long
- tamimio 2y agoVery interesting, thanks! and good luck on the project.
- getpokedagain 2y agoinstalling emacs in my web browser?
- griftrejection 2y ago[dead]
- old_hat 2y agoThis isn't WebVM specifically, but one example using WebContainers we've built is https://demo.graphweaver.com/ https://demo.graphweaver.com/ This runs a NodeJS server and frontend in your browser so you can see what Graphweaver can do without having to install or run anything more than a browser on your computer. The example has an SQLite database joined to a REST API. Graphweaver serves a GraphQL API with the result.
- _moof 2y agoMaking your senior engineers take off their glasses, sigh, and pinch the bridge of their nose.
- 2y ago
- ptspts 2y agoIt doesn't work in my Chrome on Android. The cursor is blinking, nothing happens. If a browser is not supported, the site should display a specific error message.
- cebert 2y agoWorks fine for me on Android
- jrm4 2y ago[flagged]
- deleted 2y ago[deleted]
- danans 2y agoCan it be made to work offline and keep state locally between reloads?
- apignotti 2y agoWorking offline is not truly possible since that would require downloading the full 2GB disk image, which is something that is deliberately avoided by the system architecture. State is already locally maintained via IndexedDB, no data is ever sent back or saved on our servers.
- theragra 2y agoFor many people that's not an issues, so maybe you need to add it someday.
- xyst 2y agoLooks like it’s broken on mobile
- Zambyte 2y agoWorks for me in Firefox Focus on Android
- nasretdinov 2y agoWorked on stock iOS in Safari! Must've taken them ages to debug...
- localfirst 2y agocan i run a webserver that can talk with the internet and others can call
- liamYC 2y agoI suspect you’d have trouble opening ports on the client’s machine. Maybe you could use a dedicated http proxy the client talks to
- koolala 2y agoA custom service worker might be able to proxy for you without needing Tail Scale.
- fragmede 2y agoTailscale funnel should work. I'll double-check when I'm back home if someone else hasn't.
- sitkack 2y agoIt even emulates fork!
- cajesaw4 2y ago[flagged]
- cajesaw4 2y ago[flagged]
- supportengineer 2y ago$ uptime Error: /proc must be mounted
- dangoodmanUT 2y agoungodly slow on apple silicon
- doctor_eval 2y agoI first used Slackware Linux off floppies in the mid 90s, yet every time I see linux in the browser I am gobsmacked. I’ve said for a while that a browser is basically its own operating system. Now it can host operating systems!
- ladysera 2y agoHi, this looks really amazing, will give it a try later thanks
- remram 2y agoTotally unusable on mobile unfortunately (at least Firefox and Chrome on Android). Might be a limitation of how the keyboard works, but every command gets duplicated (at least) when I enter it.
- zoom6628 2y agoUsing Brave browser on iPhoneXR works nicely.
- nyanpasu64 2y agoCan we port Adobe Flash to WebVM to avoid having to pay for "CheerpX for Flash"?
- unsolvedcypher 2y agoHave you tried Ruffle? It's also capable of running Flash in the browser.
- fragmede 2y agoWhy do you want to scam them out of their hard work?
- spankalee 2y agoCool, but very often my keystrokes aren't showing up, making this pretty unusable. Also, for the use case of local dev environment for Web IDEs, this doesn't look fast enough. node --version runs fast after the first time, but executing any JavaScript is very, very slow: user@:~$ time node -e "console.log('Hello')" Hello real 0m7.693s user 0m0.012s sys 0m0.000s
- jkhanlar 2y agobash: man: command not found
- novolunt 2y ago[dead]
- jfmc 2y agoNote that "CheerpX enables you to run existing 32-bit x86 native binaries". For some reason support for wasm64 (in browsers) has been stagnated for years, which is a pity.
- Uptrenda 2y agoNow just needs some kind of hack for networking through a browser extension and this would be so awesome.
- Tajnymag 2y agoNetworking is already supported through the Tailscale network. Once you login, the vm should be able to connect to the internet through your exit node.
- bfung 2y agoserver-less - like the server that runs the browser that the VM runs inside. /sarcasm
- jbritton 2y agoWhere are files located, server, client, browser local storage? How do you import a .exe compiled elsewhere, curl, scp? This is a Linux environment, but it can run Windows apps? How does that work?
- me551ah 2y agoNow if only I could install chrome via apt and run it inside of this linux machine.
- Animats 2y agoLove the buzzwords. It's a Linux command line environment running in a browser. Slowly.
- parasti 2y agoHave to agree, that description is more confusing than anything. I guess JS code that a web browser executes is considered "serverless" now.
- koreankid227 2y agoLol I was so confused
- revskill 2y agoSweet, could i run a nodejs http api directly from browser ?
- hexo 2y agoLet me fix the title: "WebVM is a wasm VM running in browser"
- dchest 2y agoLooks like the underlying project is not open source: "WebVM is based on a CheerpX build that we host. We encourage users to deploy their own versions of WebVM, but we don’t currently allow self-hosting of the CheerpX engine itself. This public build of CheerpX is provided as-is and is free to use for technological exploration, testing and non-commercial uses. If you want to build a product on top of CheerpX/WebVM, please get in touch:" https://labs.leaningtech.com/blog/mini-webvm-your-linux-box-from-dockerfile-via-wasm https://labs.leaningtech.com/blog/mini-webvm-your-linux-box-...
- marmaduke 2y agoCan this run NFS or other network filesystems?
- languagehacker 2y agoFirst thing I tried was `apt-get install emacs` and it hung on downloading. Editor preferences aside, I assume any nonstandard package will have the same problem. Interesting idea, but apart from trivial glue you may not need more than a container or unikernel for anyway, I'm struggling to understand a practical use case.
- phibz 2y agoSeems like having tailscale or at least wireguard would be really useful in this