Executando Mac OS X no Infinite Mac
(blog.persistent.info)- O Infinite Mac agora consegue executar versões iniciais do Mac OS X no navegador, e no momento 10.1 e 10.3 são as versões com melhor suporte
- Quando o caminho anterior com DingusPPC emperrou em kernel panic e problemas gráficos, a direção mudou para um port do PearPC criado com o objetivo de emular o Mac OS X do início dos anos 2000
- O desempenho ainda é lento: o Mac OS X 10.2 leva quase 2 minutos para ficar totalmente funcional, e mesmo após otimizações a redução foi de cerca de 15 segundos
- Um bug por não verificar o bit
FPno tratamento de ponto flutuante do PowerPC causava problemas na renderização do Dock e nas janelas do Finder, e a correção também melhorou a estabilidade do DingusPPC - O Infinite HD foi reorganizado para incluir software indie da era inicial do Mac OS X e ferramentas dos Developer CDs, mas diferenças entre HFS/HFS+ e compatibilidade com
.dmgantigos ainda continuam sendo limitações
Executando o Mac OS X inicial no navegador
- O Infinite Mac agora pode executar o Mac OS X inicial
- Mac OS X 10.1 e Mac OS X 10.3 são as versões com melhor suporte
- A velocidade de execução não é alta, mas a sensação é de que o hardware real da época também não era tão melhor assim
- O Infinite HD, que acompanha software adequado à época, também foi reorganizado com foco em software indie do período inicial do Mac OS X
Mudança de direção para um port do PearPC
- No começo, a ideia era executar o Mac OS X no Infinite Mac com DingusPPC, mas por volta do verão passado o progresso travou em kernel panic e glitches gráficos
- Tentou-se reduzir o escopo do problema com um modo de execução determinístico, mas o próximo passo não estava claro
- Como alternativa, foi escolhido o PearPC
- O PearPC foi criado no início dos anos 2000 para emular o Mac OS X em máquinas x86 com Windows e Linux
- Depois da transição para Intel, o interesse diminuiu, e ele passou a ser tratado como uma base de código praticamente parada
- O fato de kanjitalk755 já ter criado um branch experimental do PearPC que compila e roda no macOS moderno serviu como ponto de partida para o port
- O PearPC tinha uma base de código multiplataforma e não usava de forma ampla conceitos difíceis de portar, como threads, então foi mais fácil levá-lo para WebAssembly/Emscripten e para o runtime do Infinite Mac
- Em alguns dias, foi possível avançar até compilação, saída de vídeo, carregamento de imagens de disco e conexão de entrada de mouse e teclado
- Como resultado, o Mac OS X 10.2 passou a rodar no navegador de forma mais estável do que antes
Otimização de desempenho e gargalos restantes
- O PearPC executava o Mac OS X 10.2 com mais estabilidade, mas parecia mais lento que o DingusPPC
- O benchmark harness do DingusPPC foi levado para o PearPC, e o mesmo trabalho anterior de otimização do DingusPPC foi repetido no PearPC
- Os dois emuladores são interpretadores puros baseados em tabelas de consulta, então o trabalho foi relativamente direto
- Houve redução de cerca de 15 segundos no tempo de boot do Mac OS X 10.2
- Mesmo após as otimizações, ainda leva quase 2 minutos para chegar a um estado totalmente utilizável
- A interface do Infinite Mac passou a incluir um aviso de que o boot do Mac OS X pode ser lento
- O maior gargalo é a ausência de cache de MMU no PearPC
- Todo load/store passa por um cálculo complexo de endereços, o que torna o processamento caro
- O DingusPPC tem um cache hierárquico mais maduro, que parece funcionar bem
- O PearPC pode ser mais estável que o DingusPPC ao executar 10.2 a 10.4, mas sua base de código é menos criteriosa
- Usa firmware e driver de vídeo customizados
- Implementa apenas parte das instruções PowerPC necessárias para o Mac OS X
- No longo prazo, a expectativa é que o DingusPPC se torne a opção mais rápida, estável e correta
Verificação do bit FP e bugs de renderização
- Enquanto o método de “tabela de decodificação unificada” era aplicado ao interpretador do PearPC por família de opcode, surgiu uma regressão numa mudança relacionada a operações de ponto flutuante
- Apareceram glitches na renderização do Dock
- As janelas do Finder não abriam
- O despacho dos grupos de opcode 59 e 63 não podia fazer apenas uma consulta simples: era preciso verificar antes o bit
FPno Machine State Register- Se o bit
FPnão estiver definido, deve ser lançada a exceção “floating point unavailable”
- Se o bit
- Os chips PowerPC usados nos Macs da época tinham FPU, mas essa exceção ocorria com frequência durante a inicialização do Mac OS X
- O código-fonte do kernel xnu da época mostra onde o bit
FPé limpo e o handler da exceção - Isso parece ser uma otimização para evitar salvar e restaurar registradores de FPU durante troca de contexto
- O código-fonte do kernel xnu da época mostra onde o bit
- Depois de implementar a mesma verificação de
FPno código de despacho otimizado, os problemas de renderização desapareceram - O mesmo bug também ainda existia no DingusPPC
- O DingusPPC deixava instruções de ponto flutuante passarem sempre, sem verificar o bit
FP - Ao fazer uma correção rápida para gerar a exceção, os glitches de renderização do Mac OS X desapareceram
- Depois entrou uma implementação oficial com ajustes para evitar perda de desempenho, e a estabilidade do DingusPPC melhorou bastante
- O DingusPPC deixava instruções de ponto flutuante passarem sempre, sem verificar o bit
- Combinando os dois emuladores, a faixa de versões iniciais do Mac OS X que pode ser executada aumentou
- O DingusPPC consegue executar o 10.1 com estabilidade
- O PearPC não consegue executar o 10.1 com estabilidade
- O 10.0 continua instável e o Public Beta ainda sofre kernel panic imediatamente
Reorganização do Infinite HD
- Um dos atrativos do Infinite Mac é que ele monta junto o Infinite HD, com software apropriado para a época
- Com o suporte ao Mac OS X, foi criada uma versão separada contendo software da era inicial do Mac OS X, além dos apps clássicos de Mac dos anos 80 e 90
- Além de apps de preferência pessoal, a lista foi ampliada com sugestões
- As imagens de disco são geradas por uma extensão da automação já existente
- Como o uso de imagens de disco era muito comum no início da era Mac OS X, foi adicionada a função de importar
.dmgpara uma pasta extra dentro da imagem gerada
- Como o uso de imagens de disco era muito comum no início da era Mac OS X, foi adicionada a função de importar
.dmgantigos, mesmo com a mesma extensão, tinham várias variações e nem sempre podiam ser montados comhdiutilno macOS moderno- No fim, foi usado o dmg2img para extrair primeiro a partição raw
- Depois, foi adotado um desvio: recriar uma nova imagem de disco que o macOS moderno pudesse montar e copiar
- Na coleta real de software, o software de Mac OS X do início a meados dos anos 2000 era um ponto cego
- Parte dele existe no Macintosh Garden, mas não é uma prioridade alta
- Em muitos casos, ele já havia saído do ar no fornecedor original por ser antigo demais
- A Wayback Machine foi muito usada
- Os Developer CDs correspondentes a cada versão do Mac OS X também foram instalados, permitindo usar ferramentas como Project Builder e Interface Builder
Sistema de arquivos e montagem de múltiplos discos
- O processo de build dos discos é centrado em HFS, mas o padrão da época era HFS+
- O HFS+ oferece recursos mais avançados, como nomes de arquivo mais longos e caracteres Unicode arbitrários
- Arquivos de imagem de disco que dependem de recursos do HFS+ não podem ser convertidos sem perda
- Para a maior parte do software, isso não foi um grande problema
- Para montar até três drives — disco de boot, Infinite HD e Saved HD — foi aproveitada a abordagem de um fork do DingusPPC
- Na inicialização, uma imagem de disco com múltiplas partições é gerada na hora a partir de um número arbitrário de imagens de partição especificadas
Modo Aqua e interface do site
- Para completar a adição do Mac OS X, os controles do site do Infinite Mac também ganharam um modo Aqua
- Antes, já existiam os visuais classic, Platinum e NeXT
- Foi escolhido o estilo do Aqua do 10.0/10.1
- Embora as versões mais sóbrias do 10.3 e 10.4 sejam preferidas, concluiu-se que o lado nostálgico do 10.0/10.1 falava mais alto
- Para usar os mesmos recursos visuais do sistema operacional, foram extraídos os recursos originais em vez de usar screenshots
- Como os recursos do Aqua usam muitos elementos semitransparentes, screenshots comuns não eram suficientes
- Foram usados resource_dasm e pxm2tga para extrair os recursos originais de
Extras.rsrc
Executando Classic, modo verbose e pequenas descobertas
- Como é possível montar várias imagens, também dá para manter uma partição do Mac OS 9 e iniciar o ambiente de compatibilidade Classic
- Esse recurso só funciona no 10.1
- O PearPC não dava suporte ao Classic
- Com isso, passa a ser possível emular apps clássicos de Mac dentro de um Mac OS X emulado dentro de uma máquina virtual WebAssembly
- Com as imagens do Mac OS X, também foi possível observar mudanças no Calculator
- Até o 10.3, não existia o comportamento de repetir
=várias vezes - No 10.4, esse comportamento já existia
- Até o 10.3, não existia o comportamento de repetir
- Como o boot do Mac OS X é lento, o modo verbose foi exposto para mostrar melhor o progresso
- O PearPC já tinha um mecanismo embutido
- No DingusPPC, foi adicionada uma função para definir variáveis do Open Firmware na inicialização
- Na caixa de diálogo de instância customizada do Infinite Mac, isso aparece como a chave “Debug Mode”
- Também houve tentativa de obter o domínio
macosx.app, mas ele já estava registrado- O domínio redireciona para um determinado vídeo do YouTube
- O YouTuber do vídeo respondeu que não foi ele quem registrou o domínio
Próximos candidatos e possibilidade com QEMU
- Com o suporte ao Mac OS X, o Infinite Mac chegou a um ponto mais próximo do macOS moderno
- Ainda restam duas transições de CPU e várias mudanças menores depois disso
- O Tiger já tem, por padrão, uma aparência reconhecível até para usuários atuais de macOS
- Como alvos de computação retrô mais profundos ou específicos, ainda restam A/UX, Lisa, Pippin e Newton
- Antes, o QEMU era visto como um projeto grande demais para portar para WebAssembly, e o desempenho do qemu.js também parecia pouco promissor
- Recentemente, qemu-wasm e uma apresentação no FOSDEM voltaram a indicar que isso pode ser viável
- O desempenho demonstrado com guest Linux é animador
- Num benchmark improvisado de cálculo de checksum MD5 de 100MB de dados, o qemu-wasm levou 8 segundos, o DingusPPC 13 segundos e o PearPC 18 segundos
- Ainda existe uma grande distância em relação a um guest gráfico como o Mac OS X
1 comentários
Opiniões no Hacker News
É verdade que o PearPC resistiu bem por alguns anos, mas perdeu grande parte do impulso depois que o mantenedor original morreu em um acidente de trem
Eu era um usuário entusiasmado e membro da comunidade na época, e ainda hoje fico com lágrimas nos olhos ao lembrar
https://www.wired.com/2004/07/pearpc-coauthor/
Infinite Mac é uma coleção de versões de sistemas e softwares do Macintosh clássico e do NeXT, disponibilizada de forma fácil pelo navegador web
https://infinitemac.org/
Uma das partes mais interessantes do texto foi o link para um emulador de CPU PPC com menos de 700 linhas
https://github.com/kwhr0/macemu/blob/master/SheepShaver/src/...
Vemos esse tipo de concisão em emuladores de 6502, mas é raro em arquiteturas relativamente modernas
Não consigo imaginar como seria para um entusiasta de tecnologia de 20 anos hoje se deparar com o OS X 10.4, 10.5 ou 10.6
De um jeito meio amargo, isso me lembra alguém da Idade das Trevas diante de uma escultura clássica pensando: “Como a humanidade um dia conseguiu fazer algo assim?”
Mas gostos mudam. Pessoas reais da Idade das Trevas talvez pensassem “Que decadência pagã é essa?”, e hoje alguém poderia ver isso como “Ícones fotográficos? Que brega!”
Instalar apps ainda é “arrastar o app para fora de um dmg estilo IKEA”, com um zip ou pkg de vez em quando. As janelas do Finder já têm favoritos na barra lateral esquerda, e o Dock funciona do mesmo jeito. Houve aquele período estranho do Dock 3D, acho que foi no Leopard
Não existe Mac App Store, mas hoje em dia quase ninguém usa mesmo; e o Spotlight era novidade no Tiger. É muito mais reconhecível do que a diferença entre o Windows XP e o 11. O XP funciona de um jeito bem diferente do 11
Naquela época, mexer nas pastas do sistema não era tão complicado quanto hoje
Mesmo no início da Idade Média havia muitos artefatos e construções belos. Não restou tanta coisa, mas há exemplos que eu mesmo vi, como o sepultamento em navio de Sutton Hoo ou igrejas anglo-saxãs
As capturas de tela são realmente impressionantes. Pessoalmente, acho o Mac OS X muito mais bonito do que o Mac OS atual
É claro e organizado, dando a sensação de “beleza, neste ambiente eu consigo trabalhar!”
O Mac OS de hoje parece mais “socorro, caí dentro de um saco de balas, como eu saio daqui?”. Fico curioso se outras pessoas também sentem isso
No Windows é a mesma coisa. Quase nunca se trabalha no sistema operacional em si; apps nativos também são raros, e a maioria é baseada no navegador ou é app multiplataforma que usa sistemas de design de terceiros
Também estou cansado de empresas de software fingirem que fazem software bem
O 10.4 Tiger é parecido, mas a barra de menus superior era brilhante e, com o tempo, isso ficou menos agradável. O 10.5 Leopard tinha aquele Dock 3D chamativo e cafona, a barra de menus superior transparente e gradientes mais modernos
Na época era legal, mas os gradientes não eram tão bons quanto o metal escovado e o Aqua. Depois disso, tudo ficou meio sem graça
É surpreendente que tenham conseguido sucesso com o projeto pearpc, que não tinha um commit final havia mais de 10 anos: https://github.com/sebastianbiallas/pearpc
O fork dele está em https://github.com/mihaip/pearpc
Ele adicionou um alvo WebAssembly, mas parece também manter o suporte a x86-64
Além disso, ele também escreveu no blog sobre o processo de colocar o NextStep no Infinite Mac: https://blog.persistent.info/2024/03/infinite-mac-nextstep.h...
Esse tipo de coisa é realmente ótimo. Na época, o Aqua parecia uma revelação
Era um Unix mainstream com usabilidade que até sua avó poderia usar, e ainda tinha suporte aos principais apps de terceiros, então foi um golaço
Espero que alguns desses elementos voltem no Liquid Glass, mas, sinceramente, o Aqua ainda é bonito
O que imitações como Windows Vista ou temas de Linux não captaram foi o quanto tudo era consistente e usável. Parecia incrível, mas, mais importante que isso, funcionava muito bem
É bom rever UIs guardadas na memória. Sinto falta do Platinum da época do Macintosh OS 8 e daquela UI lambível do MacOS X por volta do OS X 10.3 e 10.4
Também gostava do OpenLook do SunOS/Slowlaris, da UI do NeXTStep/OpenStep, do Microsoft Windows 2000, que foi o auge antes do Winblows XP, quando nunca deveriam ter misturado laranja e verde, e também lembro com carinho do IRIX da SGI e das alegrias da linhagem Motif
Os elementos de UI quase sempre eram distinguíveis, compreensíveis e consistentes. Ao acionar um controle padrão de UI, você sabia exatamente o que aconteceria antes mesmo de executar, e era exatamente isso que acontecia
Parece que o resultado de torná-los customizáveis, tematizáveis, substituíveis e mais estilosos é o que temos hoje
O começo do OS X foi a verdadeira era de ouro do Mac. O hardware era bastante competitivo com x86, e o sistema operacional estava entre os melhores de todos os tempos
No fim, os dois começaram a dar sinais de desgaste, mas agora estamos numa segunda era de ouro do hardware, então dá para sonhar que talvez, em breve, o Mac OS volte a ser excelente
Ainda assim, mesmo nesta nova era de ouro do hardware, o desempenho da emulação aqui é quase inutilizável no M1 e no Safari
Havia kernel panic todo dia, e o QuickTime morria com erro de segmentação enquanto eu assistia a vídeos
Para reproduzir formatos de arquivo como wmv ou divx, era preciso embarcar numa missão para encontrar e instalar o codec certo
Também havia superaquecimento, porque não colocaram aberturas adequadas de ventilação para o fluxo de ar, em nome da estética
O M4 mini básico de entrada é impressionante. O computador inteiro consome menos energia que uma única GPU x86 de desempenho parecido
Dark Castle! Quando eu era criança, meu pai tinha um Apple Lisa. Ele estava desenvolvendo um pacote de contabilidade para Apple, então a Apple gentilmente forneceu a máquina
Na época, eu dava aquela máquina incrível como garantida e a usava só para jogos e MacPaint. Na coleção de discos de 3,5 polegadas do meu pai havia um disco escrito “Dark Castle”, mas, por algum motivo de que não me lembro, ele não funcionava no Lisa
Eu imaginava que fosse um jogo, mas fiquei muito frustrado por não conseguir jogá-lo, e aquele disco misterioso me fascinava
Chegando a 2025, rodei o emulador Infinite Mac System 7: https://infinitemac.org/1991/System%207.0
Meu coração deu um salto. Lá estava Dark Castle, bem dentro da pasta “Games”
Depois de 30 anos, finalmente posso jogar esse jogo. Os gráficos são charmosos, e também sinto elementos dos clássicos da Sierra, King’s Quest, e de Prince of Persia
https://en.wikipedia.org/wiki/Dark_Castle
A programação desta noite já está definida