
Un browser web moderno per Classic Mac OS 9 PowerPC. Vero CSS3, JavaScript ES5, HTTPS nativo. Sviluppato con CodeWarrior sull'API Carbon.
Il web moderno, su un Mac di 25 anni.
MacSurf è un browser web per Classic Mac OS 9 PowerPC. CSS3, JavaScript ES5 e PNG con alpha — in esecuzione su un iMac G3.
MacSurf è un progetto a tempo pieno. Se ha riportato il tuo vecchio Mac sul web, ogni dollaro aiuta a mantenere vivo lo sviluppo. Segui anche i progressi su Patreon con i dev log.[!NOTE] Alpha iniziale — gira, renderizza e parla TLS 1.3 nativamente su un G3 a 233 MHz, ma gran parte del web moderno non funzionerà ancora. Aspettati pagine costruite a mano, siti in stile retrò e lo strano brivido del JavaScript ES5 su PowerPC. Non aspettarti una navigazione fluida su siti moderni arbitrari, video o qualcosa di pesante in React.
Se hai un Power Mac G3 o G4 in giro, caricalo e guarda cosa si rompe — le segnalazioni di bug e gli screenshot su hardware reale sono esattamente ciò di cui questo progetto ha bisogno. Vedi docs/status.md per l'elenco dei punti in sospeso.
Il web ha superato Classic Mac OS vent'anni fa. L'HTTPS moderno l'ha stroncato intorno al 2016. Tira fuori un G3 o un G4 dall'armadio oggi e riesce a malapena a raggiungere un solo sito web online.
MacSurf è un tentativo di risolvere il problema sulla macchina stessa — nessun proxy di screenshot, nessun trucco da terminale remoto. Un browser nativo, costruito con gli strumenti che erano già sulla piattaforma: CodeWarrior, Carbon, QuickDraw, Open Transport. Veri layout CSS3 e vero JavaScript, in esecuzione dentro i 64 MB di memoria base di un iMac del 1999. Da fine maggio 2026 parla TLS 1.2 direttamente col web moderno tramite macTLS, uno stack basato su BearSSL incorporato nel binario del browser con 121 trust anchor dal bundle CA di Mozilla. Non serve più alcun proxy.
Per quanto ne sappiamo, questa è la prima porta seria di NetSurf su Classic Mac OS, e il primo browser mai distribuito su Mac OS 9 con CSS Grid nativo, proprietà custom CSS e JavaScript ES5.
Ogni schermata qui sotto è una pietra miliare reale, catturata su un Power Macintosh G3 con Mac OS 9. Le annotazioni con numero di fix corrispondono alla cronologia dei commit di questo repository.
L'ultima versione è MacSurf 1.68 — "macQJS" (2026-07-07): il motore JavaScript è stato sostituito — Duktape (ES5) → macQJS (QuickJS, ES2023), così il JavaScript moderno gira nativamente su Mac OS 9. In più: input di testo funzionante (caret / selezione / Tab), login mantenuti, un menu segnalibri + gestore download, la correzione del rendering della barra di scorrimento divisa, glifi di icone scaricabili da web font e una grande passata sulle prestazioni (avvio quasi istantaneo, cache su disco per immagini e font, caricamento lazy delle immagini nel viewport). Chiamata così per onorare 68kmla.org, la community che ha trainato il ciclo. Note complete: release-notes/MacSurf-1.68.md.
Il predecessore MacSurf v1.4 — Open House (2026-06-01): maratona JavaScript chiusa. 23 issue del bridge JS sono passate da aperte a chiuse in una sola release — setTimeout / setInterval / requestAnimationFrame, window.location, window.history, URL, URLSearchParams, classList, style, costruttori Event, MutationObserver, DOMParser, FormData, localStorage, , eventi / , più il toggle di / . La nuova suite di probe ha totalizzato su un iMac G3. Pagine diagnostiche attive: , , , renderizzano tutte contatori reali. Visualizza sorgente renderizza inline, Trova nella pagina apre una vera finestra di dialogo Carbon. Il predecessore ha introdotto TLS 1.3 multi-curva; è stato il primo TLS 1.3 nativo su Classic Mac OS; ha chiuso il buco dell'entropia; è stata la release del restyling della chrome; è stata l'accelerazione del caricamento a freddo (mactrove.com 30+s → ~2-3s); la prima alpha numerata è .
MacSurf.sit — il binario v1.4, pronto da eseguire. Espandi su Mac OS 9.1+ con CarbonLib 1.5+ e avvia.
Per compilare dai sorgenti: clona il repository, poi sul lato Mac apri browser/netsurf/frontends/macos9/MacSurf.mcp in CodeWarrior 8 e scegli Build. Chi compila la v1.4 su un workspace v1.3.1 deve aggiungere un nuovo file sorgente al progetto: browser/netsurf/desktop/search.c (fornisce browser_window_search per la nuova finestra di dialogo Find; content/textsearch.c è già presente). macTLS è invariato rispetto alla v1.3.1. Chi compila la v1.3 su un workspace v1.2 deve aggiungere quattro file macTLS per 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. Chi compila la v1.2 su un workspace 1.0 ha bisogno di desktop/download.c. La prima release include uno snapshot BuildPack.sit con il progetto CW8 già preconfigurato, ma le build attuali funzionano direttamente da un clone fresco.
Compilare il browserMacSurf viene compilato su Mac OS 9 con CodeWarrior 8 Pro (aggiornamento 8.3). Il sorgente è pulito per la cross-compilazione con Retro68 PowerPC GCC, che è ciò che usiamo per i veloci controlli di sintassi lato Linux. |
![]() v0.2: JavaScript su Mac OS 9 Prima pagina reale con JavaScript. Duktape 2.7.0 ES5 che esegue dal vivo: Math.sqrt, JSON, metodi array ES5.
|
![]() fixes73: trasformazioni CSS transform: rotate() / scale() / translate() nativo. Tabella sin/cos a interi Q15, nessuna dipendenza dalla FPU, angoli arbitrari su QuickDraw.
|
![]() fixes74d: gradienti radiali Gradienti radiali a 2 stop tramite stack concentrico di PaintOval. 16 livelli sfumati in decodifica. Analizzate le keyword di forma e posizione.
|
![]() fixes77: animazioni CSS Player di animazioni lineari ping-pong sopra la rotazione di fixes73. Wiggle, swing e rotazione completa 0°→359°. |
![]() fixes79b: trasparenza PNG QuickTime Graphics Importer che alimenta il content handler delle immagini di NetSurf. PNG + GIF + BMP, tutti con trasparenza reale. |
![]() fixes136: word-break / overflow-wrap word-break: break-all, keep-all, white-space: nowrap, legacy word-wrap: break-word. A capo aggressivo in stile URL.
|
![]() fixes147: contesti di stacking Ordine di pittura CSS 2.1. Opacità, trasformazioni e z-index esplicito creano tutti nuovi contesti di stacking, dipinti correttamente su hardware reale.
|
![]() fixes151: posizionamento colonne CSS Grid grid-column: span N, hero a riga intera 1 / -1, start / end posizionali, span + ritorno a capo automatico. Vero layout Grid su OS 9.
|
![]() v1.0: Showcase La nuova toolbar a cintura portautensili, il campo URL nitidissimo e le icone satinate che renderizzano home.macsurf.org su un iMac G3 con OS 9.2.2. HTTPS nativo via macTLS diretto all'origine, portale renderizzato lato server, immagini true-color dall'inizio alla fine. | |
| Componente | Linguaggio | Scopo |
|---|---|---|
browser/ | C (C89, CW8) | Fork di NetSurf con frontend macos9. Carbon per la UI, QuickDraw per il disegno, Open Transport per la rete, Duktape per JS. |
proxy/ | Go (solo stdlib) | Il vecchio proxy HTTP che eliminava TLS. In gran parte pensionato ora che macTLS funziona nativamente, ma ancora utile come fallback o su macchine senza CarbonLib. Il Mac invia HTTP semplice, il proxy recupera via HTTPS e restituisce HTTP semplice. |
macTLSrepo gemello | C (CW8) | Libreria nativa TLS 1.2 per OS 9 — HTTPS moderno direttamente dal Mac, nessun proxy richiesto. BearSSL sotto, 121 trust anchor integrate. |
|
Pipeline di rendering
CSS — circa 150 proprietà usate nel layout
|
JavaScript — Duktape 2.7.0, ES5 completo
Immagini — tutti e cinque i formati
Rete
Chrome del browser
|
fetchloadDOMContentLoaded<details><summary>JS 19/19 pass, 0 failabout:cacheabout:memoryabout:configabout:perfNote delle alpha precedenti se vuoi contesto: docs/release-notes/MacSurf-0.1a1.md.