x86 virtualization in JavaScript, running in your browser and NodeJS (mirror)
Christian Schnell 298da237c2 fixed broken FetchNetworkAdapter.cors_prox attribute (#1187) | 10 hours ago | |
---|---|---|
.cargo | 2 months ago | |
.devcontainer | 10 months ago | |
.github | 2 weeks ago | |
.vscode | 3 months ago | |
bios | 1 year ago | |
docs | 2 weeks ago | |
examples | 2 months ago | |
gen | 4 months ago | |
lib | 2 months ago | |
src | 10 hours ago | |
tests | 1 week ago | |
tools | 2 months ago | |
.editorconfig | 6 years ago | |
.gitattributes | 3 years ago | |
.gitignore | 3 years ago | |
.rustfmt.toml | 3 years ago | |
Cargo.toml | 1 year ago | |
LICENSE | 3 years ago | |
Makefile | 1 month ago | |
Readme.md | 2 weeks ago | |
debug.html | 1 month ago | |
eslint.config.mjs | 4 months ago | |
index.html | 1 month ago | |
nodejs-loader.mjs | 2 months ago | |
package.json | 2 months ago | |
v86.css | 1 month ago |
or #v86 on irc.libera.chat
v86 emulates an x86-compatible CPU and hardware. Machine code is translated to WebAssembly modules at runtime in order to achieve decent performance. Here's a list of emulated hardware:
9front — Arch Linux — Android-x86 1.6-r2 — Android-x86 4.4-r2 — BasicLinux — Buildroot Linux — Damn Small Linux — ELKS — FreeDOS — FreeBSD — FiwixOS — Haiku — SkiffOS — ReactOS — Windows 2000 — Windows 98 — Windows 95 — Windows 1.01 — MS-DOS 6.22 — OpenBSD — Oberon — KolibriOS — SkiftOS — QNX
How it works — Networking — Alpine Linux guest setup — Arch Linux guest setup — Windows 2000/XP guest setup — Windows 9x guest setup — 9p filesystem — Linux rootfs on 9p — Profiling — CPU Idling
Here's an overview of the operating systems supported in v86:
boot>
prompt type
boot -c
, then at the UKC>
prompt disable mpbios
and exit
.You can get some information on the disk images here: https://github.com/copy/images.
You need:
debug.html
)See tools/docker/test-image/Dockerfile for a full setup on Debian or WSL.
make
to build the debug build (at debug.html
).make all
to build the optimized build (at index.html
).index.html
locally, make sure to serve it from a local webserver. You can use make run
to serve the files using Python's http module.tools/docker/exec
to find the Dockerfile required for this.docker build -f tools/docker/exec/Dockerfile -t v86:alpine-3.19 .
from the root directory to generate docker image.docker run -it -p 8000:8000 v86:alpine-3.19
to start the server.localhost:8000
for hosted server.The disk images for testing are not included in this repository. You can download them directly from the website using:
wget -P images/ https://i.copy.sh/{linux3.iso,linux.iso,linux4.iso,buildroot-bzimage68.bin,openbsd-floppy.img,kolibri.img,windows101.img,os8.img,freedos722.img}
Run integration tests: make tests
Run all tests: make jshint rustfmt kvm-unit-test nasmtests nasmtests-force-jit expect-tests jitpagingtests qemutests rust-test tests
See tests/Readme.md for more information.
Using v86 for your own purposes is as easy as:
var emulator = new V86({
screen_container: document.getElementById("screen_container"),
bios: {
url: "../../bios/seabios.bin",
},
vga_bios: {
url: "../../bios/vgabios.bin",
},
cdrom: {
url: "../../images/linux.iso",
},
autostart: true,
});
See starter.js.
v86 is distributed under the terms of the Simplified BSD License, see LICENSE. The following third-party dependencies are included in the repository under their own licenses:
Shoot me an email to copy@copy.sh
. Please report bugs on GitHub.
Fabian Hemmer (https://copy.sh/, copy@copy.sh
)