Leaning Technologies, the company behind WebVM, CheerpX, CheerpJ and BrowserPod, writes about running Linux, x86 binaries and Java in the browser via WebAssembly.
Commenters mostly mention it as the home of WebVM and related tools, comparing it with other in-browser VMs and noting its Tailscale networking and BrowserPod.
When I read this, I got a little too excited and thought they managed to get wireguard connections happening in the browser with webassembly (this isn't impossible, but the only attempt[0] I know of so far only works because of extra things tailscale has). It's an idea I've had for a project, but one I haven't had time to dedicate to (yet).
In any case, really cool write-up! I wonder if they thought about making `flyctl` do a check with their API for any command that requires talking over wireguard to ensure the keys would be installed in the gateway. Since `flyctl` knows when the last command was run with it, it could do this only after some inactivity. And on the gateway machines, they'd just clean up any inactive peers with a cron (which they seem to be doing already).
Not a solution as elegant as the one they reached (which is super cool), but I'm assuming the considerably lower effort would make it appealing.
[0]: https://labs.leaningtech.com/blog/webvm-virtual-machine-with-networking-via-tailscale
As another commenter pointed out this is similar to our WebVM (https://webvm.io) , although this one is based on v86 so it will be less performant.
Although the x86 virtualization angle is powerful we think that native WebAssembly executables on top of a Linux-compatible kernel are more viable for the execution of full workloads in the browser.
BrowserPod is a newer project of ours that brings to vision to life, we have recently published a deep dive that might be interesting: https://labs.leaningtech.com/blog/browserpod-deep-dive
Looks 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
This is pretty interesting; if you have the time, you should probably build a little bit of (responsive) web tooling on it with browser embedded whisper (or so) ; there are tons of ready made 'chat with text or speech' interfaces now because of LLMs, so it should be fairly trivial. Then it works well on ios and people can just try. Unlike the LLMs, this seems light to run so you don't have to mess around with keys etc. Or https://labs.leaningtech.com/blog/cheerpj-3.0 (never tried, but as you are using java).
I work on a project that does exactly that (and more): https://browserpod.io/.
Currently it supports Node, but we plan to add Python, Ruby, git, and more.
You can see it in action in this demo: https://vitedemo.browserpod.io
More info here: https://labs.leaningtech.com/blog/browserpod-10
Ah and kudos to Syrus and his team for this release. Edge.js's architecture seems to have many similarities with BrowserPod. I see it as proof that we are both going in the right direction!
Btw there is this (commercial) tool that turns Flash to webassembly.
What they actually do is they run whole Linux (!!) in VM in webassembly, then they run the officially licensed Adobe Flash player there (and you need a separate license for that from... Harman? as those now own Flash IP).
https://labs.leaningtech.com/cheerpx/for-flash
(I'm not affiliated with them in any way. Just found it interesting one day.)