Blog

Porque rodar Doom é tão legal?

Existe algo curiosamente simples em rodar um jogo nativo de DOS direto no navegador. Descubra como WebAssembly e Emscripten tornam isso possível.

Por MFactor · · 2 min de leitura

Doom rodando no navegador

Existe algo curiosamente simples em rodar um jogo nativo de DOS direto no navegador. A ideia parece complexa à primeira vista, mas na prática o caminho é bastante direto. O navegador baixa os arquivos do jogo via HTTP e um módulo em WebAssembly assume o papel de executar tudo ali dentro, como se fosse um pequeno computador isolado funcionando na aba aberta. O JavaScript entra como ponte, organizando o carregamento e conectando as peças.

WebAssembly: desempenho nativo no navegador

O ponto interessante começa justamente no WebAssembly. O WASM é código compilado que roda dentro do navegador com desempenho muito próximo de um executável tradicional. Em vez de interpretar scripts o tempo todo, o navegador executa instruções já preparadas para isso. Em um cenário típico existe um emulador compilado para WASM, um loader em JavaScript responsável por inicializar o ambiente e o jogo distribuído em um arquivo compactado. O fluxo acaba sendo quase teatral: o arquivo é carregado, descompactado, montado em um sistema de arquivos virtual e então apresentado ao emulador como se fosse um programa DOS legítimo. Mesmo existindo apenas na memória do navegador, o jogo se comporta como um antigo arquivo .exe sendo aberto em um computador dos anos noventa.

Emscripten FS: o filesystem virtual

A parte realmente fascinante aparece quando entra em cena o Emscripten FS. O Emscripten é um compilador capaz de transformar aplicações escritas originalmente em C ou C++ em WebAssembly, mas esses programas nasceram esperando conversar com um disco real do sistema operacional. Navegadores obviamente não permitem acesso direto ao sistema de arquivos por questões de segurança. Para resolver isso, o Emscripten cria um filesystem virtual e intercepta chamadas clássicas de leitura e escrita, redirecionando tudo para um ambiente simulado.

A ilusão completa

Na prática surge a ilusão completa de um sistema operacional funcionando dentro do navegador. Arquivos podem existir apenas na memória, podem ser persistidos usando o armazenamento interno do navegador ou podem ser carregados dinamicamente a partir de downloads em ZIP feitos via HTTP. Para o programa antigo nada muda. Ele acredita estar acessando diretórios, abrindo arquivos e salvando dados normalmente. Por trás do palco, porém, tudo acontece dentro de um sandbox controlado pelo WASM e coordenado pelo JavaScript. É justamente essa camada de abstração que permite que emuladores, jogos clássicos de DOS e até ferramentas de linha de comando continuem vivos décadas depois, agora rodando dentro de algo que ninguém imaginaria na época: uma simples página web.

Assuntos: WebAssembly, Emscripten, JavaScript, Navegador

Continue lendo

Quer aplicar isto no seu sistema? Fale com a MFactor: contato ou WhatsApp +55 (19) 99778-9831.