
TinyEMU, a RISC-V/i486 VM for Linux in the Browser - aparashk
https://bellard.org/tinyemu/
======
jstanley
Interestingly the VM seems to have internet access via a DigitalOcean
instance:

> Access to Internet is possible inside the emulator. It uses the websocket
> VPN offered by Benjamin Burns (see his blog[0]). The bandwidth is capped to
> 40 kB/s and at most two connections are allowed per public IP address.
> Please don't abuse the service.

[0] [http://www.benjamincburns.com/2013/11/10/jor1k-ethmac-
suppor...](http://www.benjamincburns.com/2013/11/10/jor1k-ethmac-support.html)

~~~
Immortalin
Why do you even need the additional layer of redirection when most (port 80
tcp) traffic can be done straight from the browser?

~~~
jstanley
Most port 80 TCP traffic _can 't_ be done straight from the browser. E.g. it
won't let you write arbitrary headers.

Cross-domain requests won't work for the majority of sites.

And non-HTTP requests can't be done at all from the browser, it would be a
pretty limited "network interface" if all it could do was call out to
XMLHTTPRequest.

------
m4r35n357
This guy is also responsible for Qemu and FFMPEG.
[https://bellard.org/](https://bellard.org/)

------
molticrystal
I love the projects this person works on, usually full or close to full
implementations in very small amounts of code.

The one I first learned about was Tiny C Compiler. It is discontinued now, but
it is an about 100K compiler,linker,assembler that can compile many programs
like the links browser. [https://bellard.org/tcc/](https://bellard.org/tcc/)

If that is too large, you can go with the project that inspired it, the
Obfuscated Tiny C Compiler, a 2048 byte compiler that supports a subset of C.
[https://bellard.org/otcc/](https://bellard.org/otcc/)

All these projects are great for learning from.

~~~
saagarjha
> It is discontinued now

TinyCC is still being developed:
[https://repo.or.cz/w/tinycc.git](https://repo.or.cz/w/tinycc.git)

------
equalunique
The fact that I was able just now to run an X session on a RISC-V VM & direct
the Dillio browser to Google - I did not even know these things were possible
today. Pretty excited.

------
dmos62
His online scientific calculator is great!

[http://numcalc.com/](http://numcalc.com/)

------
saagarjha
I don’t see anything about running this in the browser on that page. Is there
a place to demo this somewhere?

~~~
molticrystal
The phrases "Can be used online" and "Javascript version running Linux and
Windows 2000. " link to:

[https://bellard.org/jslinux/](https://bellard.org/jslinux/)

You can then click on the "Startup link" labeled "click here" for the OS and
CPU architecture you want to try out.

------
jetzzz
For some reason x86 emulator is not open-source. If you download source, x86
is just stubbed out.

~~~
molticrystal
For the JSlinux one, from the wayback machine:

>In the technical notes, an archive is given which explains how to build the
various binary images. The readable source code of the JS PC emulator itself
is not yet available. At this point, any mirroring or redistribution of the
code needs my explicit permission.

And you can find the stuff referred to here:

[http://web.archive.org/web/20141219111736/http://bellard.org...](http://web.archive.org/web/20141219111736/http://bellard.org/jslinux/tech.html)

\---------

For tinyemu, my understanding is most of the code is in x86_machine.c , the
actual cpu stuff is provided by kvm, the readme states:

>5) x86 emulator A small x86 emulator is included. It is not really an
emulator because it uses the Linux KVM API to run the x86 code at near native
performance.

> The x86 emulator uses the same set of VirtIO devices as the RISCV emulator
> and is able to run many operating systems.

>The x86 emulator accepts a Linux kernel image (bzImage). No BIOS image is
necessary.

> The x86 emulator comes from my JS/Linux project (2011) which was one of the
> first emulator running Linux fully implemented in Javascript. It is provided
> to allow easy access to the x86 images hosted at
> [https://bellard.org/jslinux](https://bellard.org/jslinux)

