4 poin oleh GN⁺ 2025-04-15 | 1 komentar | Bagikan ke WhatsApp
  • 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

 
ndrgrd 2025-04-16

Karena pengaturan CORS salah, agar berfungsi normal ternyata harus membuka https://bellard.org/jslinux/ alih-alih https://www.bellard.org/jslinux/ pada tautan tersebut.