- Emulator PC berbasis JavaScript/WASM yang dapat menjalankan Linux dan Windows NT di browser; proyek ini dimulai oleh Fabrice Bellard pada 2011 sebagai emulator x86 JS pertama dan terus dikembangkan hingga sekarang
- Mengompilasi kode C berbasis TinyEMU dengan emscripten, serta mendukung sistem file, jaringan, dan perangkat blok melalui perangkat VirtIO
- Emulasi CPU x86 64-bit memiliki tingkat kematangan tinggi, termasuk dukungan untuk ekstensi instruksi terbaru seperti AVX-512, APX
- Juga mendukung emulasi CPU RISC-V 32/64-bit, dan dapat menjalankan berbagai distribusi seperti Alpine Linux, Buildroot
- Memiliki kasus penggunaan praktis seperti benchmarking performa engine JavaScript, belajar Unix di dalam browser, dan menjalankan perangkat lunak PC lawas
Sejarah
- Versi pertama pada 2011 adalah emulator PC/x86 pertama yang ditulis dalam JavaScript, dengan memanfaatkan kembali helper x86 dan kode perangkat dari QEMU
- Pada 2015, menerapkan subset asm.js untuk meningkatkan kecepatan di browser yang mendukungnya
- Setelah menulis emulator RISC-V TinyEMU pada 2016, kode C diubah menjadi JavaScript dengan emscripten
- Menambahkan sistem file VirtIO 9P yang terinspirasi dari jor1k (Sebastian Macke), sehingga memudahkan akses ke sistem file jarak jauh serta import/export file
- Untuk memakai ulang perangkat VirtIO pada emulator x86 JS juga, kode asm.js JSLinux diubah ke C lalu dikonversi kembali ke JavaScript dengan emscripten
- Melalui tuning yang detail, performanya menjadi lebih cepat daripada versi asm.js yang dibuat manual
- Untuk menjalankan Windows NT, pada awalnya digunakan pendekatan menjalankan QEMU secara nested di dalam Linux yang diemulasikan
- Karena emulator x86 mendukung ekstensi virtualisasi AMD SVM, pendekatan nested ini tetap cukup layak digunakan
- Versi saat ini menjalankan Windows NT secara native dengan mengemulasikan langsung perangkat PC yang sebelumnya belum ada seperti keyboard/mouse PS/2, disk IDE, dan dummy VGA
Emulasi CPU x86
- Emulasi CPU x86 dengan dukungan fitur berikut:
- CPU kelas Pentium
- x87 floating point 80-bit (bit exact)
- PAE
- Instruksi CMOV
- Dukungan MMX, SSE2
- Ekstensi mesin virtual AMD SVM (dukungan Nested Page Table)
- Pembacaan jumlah instruksi melalui RDPMC
- Keterbatasan yang diketahui:
- Tidak melakukan pemeriksaan batas segmen dan izin saat akses memori
- Debug tidak didukung (register DRx)
Perangkat yang diemulasikan
- 8259 PIC (Programmable Interrupt Controller)
- 8254 PIT (Programmable Interrupt Timer)
- 16450 UART (khusus debug)
- Real Time Clock
- Bus PCI
- Konsol VirtIO, sistem file 9P, jaringan, perangkat blok, input
- Simple framebuffer
- Kontroler IDE, keyboard/mouse PS/2, layar dummy VGA (masing-masing opsional)
Emulasi CPU RISC-V
- Emulasi CPU RISC-V 32-bit atau 64-bit, dengan dukungan FPU 64-bit dan compressed instructions
- Saat ini menyediakan distribusi Buildroot dan Fedora untuk RISC-V 64-bit
- Image RISC-V 32-bit masih tersedia, tetapi tidak lagi dipelihara secara aktif
- Menyediakan buildroot-riscv32 versi konsol dan versi X Window
Performa
- Per 2017, di PC desktop umum dengan browser Firefox, emulator x86 berjalan sekitar 100 MIPS
- Benchmark yang detail dapat dijalankan melalui utilitas bawaan
vmtime
Terminal JavaScript
- Versi perbaikan dari terminal JSLinux asli, dengan dukungan scrollbar dan highlight URL
Distribusi Linux
- Menggunakan distribusi Alpine Linux dan Buildroot
- Menambahkan paket kustom seperti vfsync, qemacs, tcc
- Dukungan X Window opsional melalui window manager Fluxbox
Jaringan
- Akses internet tersedia dari dalam emulator
- Menggunakan websocket VPN yang disediakan Benjamin Burns
- Bandwidth dibatasi 40 kB/s, maksimal 2 koneksi per IP publik
Kegunaan
- Benchmarking engine JavaScript (misalnya mengukur waktu boot Linux) serta pemanfaatan teknologi browser baru seperti asm.js dan WASM
- Belajar alat Unix baris perintah tanpa keluar dari browser
- Akses file yang aman di dalam browser (vfsync)
- Menjalankan perangkat lunak PC lawas
Kode sumber dan proyek serupa
- Kode sumber versi RISC-V tersedia di proyek TinyEMU, yang juga menyediakan demo pra-kompilasi yang mudah dipasang
- Proyek serupa:
- jor1k: emulator CPU OpenRISC OR1K
- v86: emulator PC
- angel: emulator CPU RISC-V
1 komentar
Karena pengaturan CORS salah, agar berfungsi normal ternyata harus membuka https://bellard.org/jslinux/ alih-alih https://www.bellard.org/jslinux/ pada tautan tersebut.