
Um navegador web moderno para Classic Mac OS 9 PowerPC. CSS3 real, JavaScript ES5, HTTPS nativo. Construído com CodeWarrior na API Carbon.
A web moderna, num Mac de 25 anos.
O MacSurf é um navegador web para Classic Mac OS 9 PowerPC. CSS3, JavaScript ES5 e PNGs com alpha — rodando num iMac G3.
O MacSurf é um projeto em tempo integral. Se ele trouxe seu Mac antigo de volta à web, cada dólar ajuda a manter o desenvolvimento. Acompanhe também o progresso no Patreon com dev logs.
O MacSurf é mantido vivo pelos seus apoiadores — obrigado:
Patreon
Shlooom
Ko-Fi
kilgeist
[!NOTE] Alpha inicial — ele roda, renderiza e fala TLS 1.3 nativamente num G3 de 233 MHz, mas a maior parte da web moderna ainda não funciona nele. Espere páginas construídas à mão, sites de estilo retrô e a estranha emoção de JavaScript ES5 em PowerPC. Não espere navegação fluida em sites modernos arbitrários, vídeo ou qualquer coisa pesada em React.
Se você tem um Power Mac G3 ou G4 parado, carregue-o e veja o que quebra — relatórios de bugs e capturas de tela em hardware real são exatamente o que este projeto precisa. Veja docs/status.md para a lista de pendências atual.
A web ultrapassou o Classic Mac OS há vinte anos. O HTTPS moderno a finalizou por volta de 2016. Tire um G3 ou G4 do armário hoje e ele mal consegue acessar um único site vivo.
O MacSurf é uma tentativa de resolver isso na própria máquina — sem proxy de captura de tela, sem truque de terminal remoto. Um navegador nativo, construído com as ferramentas que já estavam na plataforma: CodeWarrior, Carbon, QuickDraw, Open Transport. Layouts CSS3 reais e JavaScript real, rodando dentro do piso de memória de 64 MB de um iMac de 1999. Desde o final de maio de 2026, ele fala TLS 1.2 diretamente com a web moderna através do macTLS, uma pilha baseada em BearSSL que vem embutida no binário do navegador com 121 âncoras de confiança do pacote de CAs da Mozilla. Não é mais necessário proxy.
Até onde sabemos, esta é a primeira porta séria do NetSurf para Classic Mac OS, e o primeiro navegador já distribuído no Mac OS 9 com CSS Grid nativo, custom properties CSS e JavaScript ES5.
Cada imagem abaixo é um marco real, capturado num Power Macintosh G3 rodando Mac OS 9. As anotações de número de correção correspondem ao histórico de commits deste repositório.
A versão mais recente é o MacSurf 1.68 — "macQJS" (2026-07-07): o motor JavaScript foi substituído — Duktape (ES5) → macQJS (QuickJS, ES2023), então JavaScript moderno roda nativamente no Mac OS 9. Além disso: entrada de texto funcional (cursor / seleção / Tab), logins persistentes, menu de favoritos + gerenciador de downloads, correção de renderização da barra de rolagem dividida, glifos de ícones de fontes web baixáveis e uma grande passada de desempenho (inicialização quase instantânea, cache em disco de imagens/fontes, carregamento preguiçoso de imagens por viewport). Nomeado em homenagem ao 68kmla.org, a comunidade que impulsionou o ciclo. Notas completas: release-notes/MacSurf-1.68.md.
O antecessor MacSurf v1.4 — Open House (2026-06-01): maratona de JavaScript encerrada. 23 problemas da ponte JS saíram de abertos para fechados em um único release — setTimeout / setInterval / requestAnimationFrame, window.location, window.history, URL, URLSearchParams, classList, style, construtores Event, MutationObserver, DOMParser, FormData, localStorage, , eventos / , além do toggle de / . A nova suíte de sondagem marcou num iMac G3. As páginas de diagnóstico estão vivas: , , , renderizam contadores reais. Ver código-fonte (View Source) renderiza inline, e Localizar na página (Find-in-page) abre um diálogo Carbon real. O antecessor trouxe TLS 1.3 com múltiplas curvas; foi o primeiro TLS 1.3 nativo no Classic Mac OS; fechou o buraco de entropia; foi o release de redesenho da interface; foi a aceleração de carregamento a frio (mactrove.com de 30+s → ~2-3s); primeiro alpha numerado em .
browser/netsurf/frontends/macos9/MacSurf.mcp no CodeWarrior 8 e escolha Build. Quem compila a v1.4 num workspace da v1.3.1 precisa adicionar um novo arquivo de código-fonte ao projeto: browser/netsurf/desktop/search.c (fornece browser_window_search para o novo diálogo de Localizar; content/textsearch.c já está incluído). O macTLS não mudou desde a v1.3.1. Quem compila a v1.3 num workspace da v1.2 precisa adicionar quatro arquivos macTLS para TLS 1.3: bearssl/src/ec/ec_c25519_m15.c, os9/ostls_tls13_keysched.c, os9/ostls_tls13_record.c, os9/ostls_tls13_handshake.c. Quem compila a v1.2 num workspace da 1.0 precisa de desktop/download.c. O release mais antigo traz um snapshot BuildPack.sit com o projeto CW8 pré-configurado, mas as compilações atuais funcionam direto de um clone novo.Notas de alpha anteriores, se quiser contexto: docs/release-notes/MacSurf-0.1a1.md.
Compilando o navegadorO MacSurf é compilado no Mac OS 9 com CodeWarrior 8 Pro (atualização 8.3). O código-fonte é limpo para compilação cruzada com Retro68 PowerPC GCC, que é o que usamos para verificações rápidas de sintaxe no lado Linux. |
![]() v0.2: JavaScript no Mac OS 9 Primeira página real com JS. Duktape 2.7.0 ES5 avaliando ao vivo: Math.sqrt, JSON, métodos de array ES5.
|
![]() fixes73: Transformações CSS transform: rotate() / scale() / translate() nativo. Tabela seno/cosseno inteira Q15, sem dependência de FPU, ângulos arbitrários no QuickDraw.
|
![]() fixes74d: Gradientes radiais Gradientes radiais de 2 paradas via pilha concêntrica de PaintOval. 16 níveis borrados na decodificação. Palavras-chave de forma e posição analisadas.
|
![]() fixes77: Animações CSS Player de animação linear ping-pong sobre a rotação do fixes73. Wiggle, swing e rotação completa de 0°→359°. |
![]() fixes79b: Transparência PNG QuickTime Graphics Importer alimentando o manipulador de conteúdo de imagem do NetSurf. PNG + GIF + BMP, todos com transparência real. |
![]() fixes136: word-break / overflow-wrap word-break: break-all, keep-all, white-space: nowrap, word-wrap: break-word legado. Quebra agressiva estilo URL.
|
![]() fixes147: Contextos de empilhamento Ordem de pintura CSS 2.1. Opacidade, transformações e z-index explícito criam novos contextos de empilhamento, pintados corretamente em hardware real.
|
![]() fixes151: Posicionamento de colunas no CSS Grid grid-column: span N, hero de linha inteira 1 / -1, start / end posicional, span + quebra automática. Layout Grid real no OS 9.
|
![]() v1.0: Showcase Nova barra de ferramentas com cinto de utilidades, campo de URL nítido e ícones com moldura renderizando home.macsurf.org num iMac G3 rodando OS 9.2.2. HTTPS nativo via macTLS direto para a origem, portal renderizado no servidor, imagens em cores reais de ponta a ponta. | |
| Componente | Linguagem | Finalidade |
|---|---|---|
browser/ | C (C89, CW8) | Fork do NetSurf com um frontend macos9. Carbon para a UI, QuickDraw para desenho, Open Transport para rede, Duktape para JS. |
proxy/ | Go (apenas stdlib) | O antigo proxy HTTP que removia TLS. Em grande parte aposentado agora que o macTLS funciona nativamente, mas ainda útil como fallback ou em máquinas sem CarbonLib. O Mac envia HTTP puro, o proxy busca via HTTPS e retorna HTTP puro. |
macTLSrepositório irmão | C (CW8) | Biblioteca TLS 1.2 nativa para OS 9 — HTTPS moderno direto do Mac, sem proxy. BearSSL por baixo, 121 âncoras de confiança incorporadas. |
|
Pipeline de renderização
CSS — cerca de 150 propriedades consumidas no layout
|
JavaScript — Duktape 2.7.0, ES5 completo
Imagens — todos os cinco formatos
Rede
Interface do navegador
|
fetchloadDOMContentLoaded<details><summary>JS 19/19 passou, 0 falhouabout:cacheabout:memoryabout:configabout:perf