webvm/README.md

85 lines
4.6 KiB
Markdown
Raw Normal View History

2022-02-01 13:26:39 +00:00
# WebVM
2022-01-31 20:52:13 +00:00
This repository hosts the source code for [https://webvm.io](https://webvm.io), a Linux virtual machine that runs in your browser.
2022-01-31 20:52:13 +00:00
<img src="assets/welcome_to_WebVM_slim.png" width="95%">
2022-10-06 12:07:47 +00:00
2022-10-06 12:01:00 +00:00
WebVM is a server-less virtual environment running fully client-side in HTML5/WebAssembly. It's designed to be Linux ABI-compatible. It runs an unmodified Debian distribution including many native development toolchains.
2022-02-01 13:26:39 +00:00
WebVM is powered by the CheerpX virtualization engine, and enables safe, sandboxed client-side execution of x86 binaries on any browser. CheerpX includes an x86-to-WebAssembly JIT compiler, a virtual block-based file system, and a Linux syscall emulator.
2023-05-19 08:17:46 +00:00
# Enable networking
2022-10-06 12:01:00 +00:00
2023-05-19 08:17:46 +00:00
- Click "Connect via Tailscale" in the page header.
- Log in to Tailscale (create an account if you don't have one).
- If you are unfamiliar with Tailscale or would like additional information see [WebVM and Tailscale](/docs/Tailscale.md).
2023-05-19 09:02:58 +00:00
# Fork, deploy, customize
2023-05-19 08:17:46 +00:00
2023-05-19 10:10:46 +00:00
<img src="/assets/fork_deploy_instructions.gif" alt="deploy_instructions_gif" width="90%">
- Fork the repository.
- Enable Github pages in settings.
- Click on `Settings`.
- Go to the `Pages` section.
- Select `Github Actions` as the source.
- Run the workflow.
2023-05-19 09:48:51 +00:00
- Click on `Actions`.
2023-05-19 08:17:46 +00:00
- Accept the prompt. This is required only once to enable Actions for your fork.
- Click on the workflow named `Deploy`.
2023-05-19 08:17:46 +00:00
- Click `Run workflow` and then once more `Run workflow` in the menu.
2023-05-19 10:10:46 +00:00
- After a few seconds a new `Deploy` workflow will start, click on it to see details.
- After the workflow completes, which takes a few minutes, it will show the URL below the `deploy_to_github_pages` job.
<img src="/assets/result.png" width="70%" >
2023-05-19 10:10:46 +00:00
You can now customize `dockerfiles/debian_mini` to suits your needs, or make a new Dockerfile from scratch. Use the "Path to Dockerfile" workflow parameter to select it.
2023-05-19 08:17:46 +00:00
# Local deployment
From a local `git clone`
- Download the `debian_mini` Ext2 image from [https://github.com/leaningtech/webvm/releases/](https://github.com/leaningtech/webvm/releases/)
- You can also build your own by selecting the "Upload GitHub release" workflow option.
2023-05-19 08:21:23 +00:00
- Place the image in the repository root folder.
2023-05-19 08:17:46 +00:00
- Edit `index.html`
- Replace `DEVICE_TYPE` with `"bytes"`
- Replace `IMAGE_URL` with the name of the Ext2 image. For example `"debian_mini_20230519_5022088024.ext2"`
- Start a local HTTP server
- Enjoy your local WebVM.
2022-02-01 13:26:39 +00:00
# Bugs and Issues
2022-10-09 09:21:21 +00:00
Please use [Issues](https://github.com/leaningtech/webvm/issues) to report any bug.
2023-05-19 08:24:14 +00:00
Or come to say hello / share your feedback on [Discord](https://discord.gg/yTNZgySKGa).
2022-02-01 13:26:39 +00:00
2022-10-06 12:27:22 +00:00
# More links
2023-05-19 08:17:46 +00:00
- [WebVM: server-less x86 virtual machines in the browser](https://leaningtech.com/webvm-server-less-x86-virtual-machines-in-the-browser/)
- [WebVM: Linux Virtualization in WebAssembly with Full Networking via Tailscale](https://leaningtech.com/webvm-virtual-machine-with-networking-via-tailscale/)
- Reference GitHub Pages deployment: [Mini.WebVM](https://mini.webvm.io)
- [Crafting the Impossible: X86 Virtualization in the Browser with WebAssembly](https://www.youtube.com/watch?v=VqrbVycTXmw) Talk at JsNation 2022
2022-10-06 12:27:22 +00:00
2022-10-06 12:01:00 +00:00
# Thanks to...
This project depends on:
2023-05-19 08:17:46 +00:00
- CheerpX, made by [Leaning Technologies](https://leaningtech.com) for x86 virtualization and Linux emulation
2022-10-06 12:01:00 +00:00
- xterm.js, [https://xtermjs.org/](https://xtermjs.org/), for providing the Web-based terminal emulator
2023-05-22 08:17:15 +00:00
- [Tailscale](https://tailscale.com/), for the networking component
- [lwIP](https://savannah.nongnu.org/projects/lwip/), for the TCP/IP stack, compiled for the Web via [Cheerp](https://github.com/leaningtech/cheerp-meta)
2022-02-01 13:26:39 +00:00
# License
2023-05-22 08:13:34 +00:00
WebVM is released under the Apache License, Version 2.0.
2023-05-22 08:29:35 +00:00
You are welcome to use, modify, and redistribute the contents of this repository.
2023-05-22 08:13:34 +00:00
2023-05-22 08:29:35 +00:00
WebVM depends on the CheerpX x86-to-WebAssembly virtualization technology. A link to the current latest build is always available at [https://cheerpxdemos.leaningtech.com/publicdeploy/LATEST.txt](https://cheerpxdemos.leaningtech.com/publicdeploy/LATEST.txt). Builds of CheerpX are immutable and uniquely versioned. An example link would be:
2023-05-22 08:13:34 +00:00
`https://cheerpxdemos.leaningtech.com/publicdeploy/20230517_94/cx.js`
2023-05-22 08:29:35 +00:00
We strongly encourage users _not_ to use the latest build. Plase directly use a specific build to avoid unexpected regressions. Since builds are immutable, if they work for you now they will keep working forever.
These up-to-date builds are provided **as-is** and are **free to use** for technological exploration, testing and non-commercial uses. Downloading the CheerpX build for the purpose of hosting it elewhere is not permitted.
2023-05-22 08:13:34 +00:00
If you want to build a product on top of CheerpX/WebVM, please get in touch: sales@leaningtech.com