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
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
- Entrega progressiva: feature flags, canary e blue-green — Como separar deploy de release com flags avaliadas por hash determinístico, escolher entre blue-green e canary, e deixar métricas de guarda decidirem a promoção ou o rollback com Argo Rollouts.
- Sua loja virtual é lenta? O que realmente pesa no carregamento — Core Web Vitals sem mistério e as causas mais comuns de lentidão em e-commerce.
- Semântica de entrega em sistemas de mensageria: at-least-once, idempotência e dead-letter queues — Por que o broker entrega mais de uma vez, como o consumidor converte repetição em efeito único com uma tabela de mensagens processadas na mesma transação, e o que fazer com a mensagem que falha sempre.
Quer aplicar isto no seu sistema? Fale com a MFactor: contato ou WhatsApp +55 (19) 99778-9831.