quinta-feira, 5 de novembro de 2009

Top 5 emuladores

Dia desses, um amigo me perguntou se eu conseguiria fazer uma lista com os meus cinco emuladores prediletos. Esse é o tipo de pergunta que, normalmente, é difícil de responder. Eu já escrevi um monte de emuladores, já conversei com inúmeros autores, e era de se esperar que fosse muito díficil criar uma lista assim. Afinal, sempre que você faz um top five, precisa deixar muita coisa bacana de fora, especialmente se você conhece bastante o assunto.



Porém, surpreendentemente, fazer a lista foi fácil! Tem cinco emuladores que se destacam, pela enorme influência que tiveram em tudo que se seguiu. Em ordem cronológica reversa:

VMware (2001)

No fim da década de 90, quando se falava em emuladores, imediamente as pessoas pensavam em videogames. O VMware trouxe de volta os emuladores ao mundo corporativo. As aplicações são inúmeras: desenvolvedores, por exemplo, podem programar no Linux, e testar a aplicação num Windows emulado. Em datacenters o impacto é ainda maior. Usando a versão ESX, os administradores de datacenter podem usar uma mesma imagem em todos os servidores, mesmo que eles sejam heterogêneos; e dá até pra trocar uma imagem de um servidor para outro enquanto ela está rodando, com downtime mínimo.

O truque do VMware pra conseguir desempenho é que a virtualização dele tenta evitar a emulação tanto quanto possível. Em algumas situações, como código rodando em user space, o VMware roda o código diretamente na CPU. Ele só usa emulação nos trechos críticos, como código rodando em kernel space, ou código acessando periféricos que foram virtualizados.

bleem (1999)

Se o VMware mudou a percepção que o povo da época tinha dos emuladores, o bleem foi igualmente importante, ao mudar a percepção do underground para o mainstream. Até então, emuladores de videogame eram um produto de nicho, conhecidos só por alguns poucos viciados em internet. O bleem, que na época era o melhor emulador de Playstation, levou os emuladores para as lojas. Hoje nós temos um mercado construído em cima da emulação de jogos, como prova o sucesso do Virtual Console no Wii, e quem começou esse mercado foi o bleem.

Mas pra mim o bleem tem um significado mais especial. Naquela época em que fazíamos emuladores, ninguém tinha muita certeza se nós estávamos dentro da legalidade ou não. Quando o bleem começou a bombar, a Sony processou os criadores do bleem, e depois de uma ferrenha briga judicial, o bleem saiu vitorioso. Eu passei a dormir mais tranquilo depois disso :)

O emulador de 8080 do Paul Allen (1975)

O Bill Gates sempre foi bom de blefe. Quando ele descobriu que a MITS estava fazendo o Altair 8800, ele entrou em contato com os fabricantes para oferecer um interpretador BASIC. Os fabricantes se empolgaram e marcaram uma reunião pra fazer uma demonstração. O problema é que não havia demo, foi tudo um blefe do Bill! Com a reunião marcada, ele e o sócio Paul Allen tiveram que correr pra preparar um demo a tempo. O blefe era tão vazio, que eles nem tinham um Altair pra poder programar.

Como criar um interpretador para o Altair, sem ter um Altair? A solução que eles encontraram foi a emulação. Enquanto o Bill Gates escrevia o interpretador, o Paul Allen escreveu um emulador de 8080, a CPU usada no Altair. Como eles também não tinham computador pra rodar o emulador, testavam o software deles no PDP-10 da Harvard, a faculdade onde estudavam. No final, eles acabaram a tempo, e criaram a Microsoft para vender aquele interpretador. Poucos emuladores podem ser tão influentes assim :)

IBM System/360 (1964)

Tem muitas coisas que são naturais para nós, mas que eram o ápice da inovação no passado. Upgrades, por exemplo. Hoje em dia, se o seu programa está rodando muito lento, você pode comprar um computador mais novo e o programa rodará mais rápido. Mas antigamente isso não era verdade: se você comprasse um computador novo, iria precisar de um software novo também. Não existia portabilidade.

A IBM mudou isso com o IBM System/360, uma família de computadores projetada com a compatibilidade em mente. Você poderia comprar um System/360 pequeno, e se precisasse de mais processamento, era só comprar um modelo maior, rodando o mesmo software. E se não bastasse isso, a IBM ainda garantia compatibilidade com modelos anteriores ao System/360! O segredo, é claro, era emulação: a IBM criou emuladores de seus sistemas mais antigos e populares. Não por acaso, o System/360 foi o computador mais vendido de sua época.

A máquina universal de Turing (1936)

No começo do século XX, os matemáticos estavam procurando a solução do Entscheidungsproblem: existe um processo capaz de decidir se uma expressão matemática é verdadeira ou não? Na época ainda não existia o conceito de algoritmo, o Turing teve que partir do zero. Ele construiu um modelo computacional, a máquina de Turing, e a usou pra chegar na decepcionante conclusão de que o tal algoritmo de decisão não existe. Por outro lado, ele concluiu que, para todos os algoritmos que existem, também existe uma máquina de Turing capaz de executá-lo (essa é a tese de Church-Turing).

Mas o Turing foi além. Baseado no trabalho do Gödel, ele concebeu uma máquina de Turing mais poderosa, que era capaz de rodar qualquer algoritmo que outra máquina de Turing conseguisse. O truque, como vocês devem ter deduzido, é usar emulação. As máquinas universais de Turing não apenas são o modelo matemático que permite a existência de emuladores, como também de toda a computação.

6 comentários:

  1. outra coisa legal de se fazer, mas q não chega a ser uma emulação, é consoles antigos de video games em VHDL.

    Porém alguns autores recusam-se a colaborar com os entusiastas! =(

    Too bad...

    ResponderExcluir
  2. Excelente post. Mas é importante observar que a vitória da Bleem Company foi a típica "vitória de Pirro": eles ganharam, mas o processo aparentemente tirou os caras do mercado. http://pt.wikipedia.org/wiki/Vit%C3%B3ria_P%C3%ADrrica

    ResponderExcluir
  3. Caramba, de todos os emuladores que vc citou eu só conhecia o Bleem! mas foi legal ver que nem só de emulador de videogame vive o homem!

    ResponderExcluir
  4. Uma coisa bem interessante sobre a história de emulador de Altair é que quando o Allen e o Bill Gates foram demonstrar o BASIC para a MITS, se deu conta que havia esquecido de fazer o bootstrap, isto é, o programa que carregava o BASIC para a memória do Altair (já que no emulador isso não era necessário). O Allen escreveu o bootstrap em assembly no próprio vôo, em papel perfurado, sem testes, e só pode relaxar quando viu o BASIC sendo carregado com sucesso para o Altair na demonstração para o MITS. :-)

    ResponderExcluir
  5. Um que me surpreendeu muito foi o UltraHLE. Na época rodou bem no meu Celeron 300A com uma Voodoo 2 de 12Mb.

    Ele causou um grande impacto pois conseguiu rodar um videogame poderoso naquele momento em um hardware quase que padrão na época, graças a utilização de recompilação dinâmica até antes nunca vista com tanta eficiência em um emulador.

    Ainda me lembro dele como se fosse hoje... Ouvir "it's me, Mario!" no PC foi inacreditável.

    ResponderExcluir
  6. O UltraHLE foi o Project 64? :-P

    Me lembro que este me surpreendeu também, pois ele conseguiu emular muito rápido e muito bem os jogos do Ultra 64!

    Até teve um lance que ele estava proibido de continuar... algo assim.

    ResponderExcluir