- Emulador de PC baseado em JavaScript/WASM capaz de executar Linux e Windows NT no navegador; é um projeto desenvolvido por Fabrice Bellard desde 2011, quando começou como o primeiro emulador x86 em JS
- Compila código C baseado no TinyEMU com emscripten e usa dispositivos VirtIO para oferecer suporte a sistema de arquivos, rede e dispositivos de bloco
- A emulação de CPU x86 de 64 bits tem alto grau de maturidade, incluindo extensões modernas como AVX-512, APX e outras
- Também oferece suporte à emulação de CPU RISC-V de 32/64 bits, permitindo executar várias distribuições como Alpine Linux e Buildroot
- Possui casos de uso práticos, como benchmarking de desempenho de engines JavaScript, aprendizado de Unix no navegador e execução de software legado de PC
História
- A primeira versão, em 2011, foi o primeiro emulador de PC/x86 escrito em JavaScript, reutilizando helpers x86 e código de dispositivos do QEMU
- Em 2015, adotou o subconjunto asm.js, obtendo ganho de velocidade em navegadores compatíveis
- Em 2016, após criar o emulador RISC-V TinyEMU, o código C foi convertido para JavaScript com emscripten
- Foi adicionado o sistema de arquivos VirtIO 9P, inspirado no jor1k (Sebastian Macke), facilitando acesso remoto ao sistema de arquivos e importação/exportação de arquivos
- Para reutilizar dispositivos VirtIO também no emulador x86 em JS, o código asm.js do JSLinux passou por um processo de conversão para C e depois recompilação para JavaScript com emscripten
- Com ajustes finos, foi alcançado um desempenho superior ao da versão asm.js feita manualmente
- Para executar o Windows NT, no início foi usado o método de executar QEMU de forma aninhada dentro do Linux emulado
- Como o emulador x86 suporta a extensão de virtualização AMD SVM, o uso aninhado ainda era viável
- A versão atual executa o Windows NT nativamente ao emular diretamente os dispositivos de PC ausentes, como teclado/mouse PS/2, disco IDE e VGA dummy
Emulação de CPU x86
- Emulação de CPU x86, com suporte aos seguintes recursos:
- CPU classe Pentium
- x87 de ponto flutuante de 80 bits (bit exact)
- PAE
- Instruções CMOV
- Suporte a MMX e SSE2
- Extensão de máquina virtual AMD SVM (com suporte a Nested Page Table)
- Leitura de contagem de instruções via RDPMC
- Limitações conhecidas:
- Não realiza verificação de limites de segmento nem de permissões em acessos à memória
- Sem suporte a depuração (registradores DRx)
Dispositivos emulados
- 8259 PIC (Programmable Interrupt Controller)
- 8254 PIT (Programmable Interrupt Timer)
- 16450 UART (somente para depuração)
- Relógio de tempo real
- Barramento PCI
- Console VirtIO, sistema de arquivos 9P, rede, dispositivo de bloco e entrada
- Simple framebuffer
- Controlador IDE, teclado/mouse PS/2 e tela VGA dummy (todos opcionais)
Emulação de CPU RISC-V
- Emulação de CPU RISC-V de 32 ou 64 bits, com suporte a FPU de 64 bits e instruções compactadas (compressed instructions)
- Atualmente fornece distribuições RISC-V de 64 bits do Buildroot e Fedora
- Imagens RISC-V de 32 bits ainda podem ser usadas, mas não são mais mantidas ativamente
- Há versões de console e de X Window do buildroot-riscv32
Desempenho
- Em 2017, em um PC desktop comum com Firefox, o emulador x86 rodava a cerca de 100 MIPS
- É possível executar benchmarks detalhados com o utilitário interno
vmtime
Terminal JavaScript
- Versão aprimorada do terminal original do JSLinux, com suporte a barra de rolagem e realce de URL
Distribuições Linux
- Usa as distribuições Alpine Linux e Buildroot
- Adiciona pacotes personalizados como vfsync, qemacs e tcc
- Suporte opcional a X Window via gerenciador de janelas Fluxbox
Rede
- É possível acessar a internet de dentro do emulador
- Usa a websocket VPN fornecida por Benjamin Burns
- Largura de banda limitada a 40 kB/s, com no máximo 2 conexões por IP público
Usos
- Benchmarking de engines JavaScript (por exemplo, medir o tempo de boot do Linux) e uso de novas tecnologias de navegador como asm.js e WASM
- Aprender ferramentas Unix de linha de comando sem sair do navegador
- Acesso seguro a arquivos no navegador (vfsync)
- Execução de software legado de PC
Código-fonte e projetos semelhantes
- O código-fonte da versão RISC-V é fornecido no projeto TinyEMU, que também oferece demos pré-compiladas fáceis de instalar
- Projetos semelhantes:
- jor1k: emulador de CPU OpenRISC OR1K
- v86: emulador de PC
- angel: emulador de CPU RISC-V
1 comentários
A configuração de CORS está incorreta, então para funcionar normalmente é preciso acessar
https://bellard.org/jslinux/em vez do linkhttps://www.bellard.org/jslinux/.