
Ein moderner Webbrowser für Classic Mac OS 9 PowerPC. Echtes CSS3, ES5-JavaScript, natives HTTPS. Entwickelt mit CodeWarrior auf der Carbon-API.
Das moderne Web, auf einem 25 Jahre alten Mac.
MacSurf ist ein Webbrowser für Classic Mac OS 9 PowerPC. CSS3, ES5-JavaScript und PNGs mit Alphakanal – lauffähig auf einem G3 iMac.
MacSurf ist ein Vollzeitprojekt. Wenn es deinen alten Mac zurück ins Web gebracht hat, hilft jeder Dollar, die Entwicklung am Laufen zu halten. Verfolge außerdem den Fortschritt auf Patreon mit Entwickler-Logs.
MacSurf wird von seinen Unterstützern am Leben gehalten – danke:
Patreon
Shlooom
Ko-Fi
kilgeist
[!NOTE] Frühe Alpha – sie läuft, rendert und spricht nativ TLS 1.3 auf einem 233-MHz-G3, aber das meiste moderne Web funktioniert darin noch nicht. Erwarte handgebaute Seiten, Retro-Sites und die seltsame Faszination von ES5-JavaScript auf PowerPC. Erwarte kein flüssiges Browsen auf beliebigen modernen Websites, kein Video und nichts, was stark auf React basiert.
Falls du einen Power Mac G3 oder G4 herumliegen hast: Starte ihn und schau, was kaputtgeht – Bugmeldungen und Screenshots von echter Hardware sind genau das, was dieses Projekt braucht. Die aktuelle Mängelliste findest du in docs/status.md.
Das Web ist dem Classic Mac OS vor zwanzig Jahren entwachsen. Modernes HTTPS hat dem Ganzen um 2016 endgültig den Rest gegeben. Zieh heute einen G3 oder G4 aus dem Schrank, und er erreicht kaum noch eine einzige aktive Website.
MacSurf ist der Versuch, das direkt auf der Maschine zu beheben – kein Screenshot-Proxy, kein Remote-Terminal-Trick. Ein nativer Browser, gebaut mit den Werkzeugen, die auf der Plattform bereits vorhanden waren: CodeWarrior, Carbon, QuickDraw, Open Transport. Echte CSS3-Layouts und echtes JavaScript, die innerhalb der 64-MB-Speicherausstattung eines 1999er iMac laufen. Seit Ende Mai 2026 spricht es über macTLS direkt TLS 1.2 mit dem modernen Web – einen auf BearSSL basierenden Stack, der im Browser-Binary mit 121 Vertrauensankern aus dem Mozilla-CA-Bundle mitgeliefert wird. Kein Proxy mehr nötig.
Soweit wir das beurteilen können, ist dies der erste ernsthafte NetSurf-Port auf Classic Mac OS und der erste Browser, der jemals unter Mac OS 9 mit nativem CSS Grid, CSS-Custom-Properties und ES5-JavaScript ausgeliefert wurde.
Jeder Screenshot unten ist ein echter Meilenstein, aufgenommen auf einem Power Macintosh G3 mit Mac OS 9. Die Fix-Nummern in den Anmerkungen entsprechen der Commit-Historie dieses Repos.
Die neueste Version ist MacSurf 1.68 — "macQJS" (2026-07-07): Die JavaScript-Engine wurde ersetzt – Duktape (ES5) → macQJS (QuickJS, ES2023), sodass modernes JavaScript nativ unter Mac OS 9 läuft. Außerdem gibt es funktionierende Texteingabe (Caret / Auswahl / Tab), dauerhaft gespeicherte Logins, ein Lesezeichen-Menü + Download-Manager, den Split-Scrollbar-Render-Fix, herunterladbare Webfont-Icon-Glyphen und einen großen Performance-Durchgang (nahezu sofortiger Start, Bild-/Schriftart-Disk-Cache, Lazy-Loading von Bildern im Viewport). Benannt zu Ehren von 68kmla.org, der Community, die diesen Zyklus vorangetrieben hat. Vollständige Hinweise: release-notes/MacSurf-1.68.md.
Der Vorgänger MacSurf v1.4 — Open House (2026-06-01): JavaScript-Marathon abgeschlossen. 23 JS-Bridge-Probleme gingen in einem einzigen Release von offen auf geschlossen – setTimeout / setInterval / requestAnimationFrame, window.location, window.history, URL, URLSearchParams, classList, style, Event-Konstruktoren, MutationObserver, DOMParser, FormData, localStorage, , - und -Events sowie den / -Umschalter. Die neue Testsuite erzielte auf einem G3 iMac . Diagnoseseiten live: , , , rendern alle echte Zähler. View Source rendert inline, Find-in-page öffnet einen echten Carbon-Dialog. Der Vorgänger lieferte TLS 1.3 mit mehreren Kurven; war das erste native TLS 1.3 auf Classic Mac OS; schloss das Entropie-Loch; war das Release mit dem Oberflächen-Redesign; war die Kaltstart-Beschleunigung (mactrove.com 30+s → ~2-3s); die erste nummerierte Alpha gibt es unter .
browser/netsurf/frontends/macos9/MacSurf.mcp in CodeWarrior 8 und wähle Build. Wer mit v1.4 auf einem v1.3.1-Workspace baut, muss eine neue Quelldatei zum Projekt hinzufügen: browser/netsurf/desktop/search.c (liefert browser_window_search für den neuen Such-Dialog; content/textsearch.c ist bereits enthalten). macTLS ist gegenüber v1.3.1 unverändert. Wer mit v1.3 auf einem v1.2-Workspace baut, muss für TLS 1.3 vier macTLS-Dateien hinzufügen: bearssl/src/ec/ec_c25519_m15.c, os9/ostls_tls13_keysched.c, os9/ostls_tls13_record.c, os9/ostls_tls13_handshake.c. Wer mit v1.2 auf einem 1.0-Workspace baut, benötigt desktop/download.c. Das früheste Release enthält einen BuildPack.sit-Snapshot mit vorkonfiguriertem CW8-Projekt, aber aktuelle Builds funktionieren direkt aus einem frischen Klon.Frühere Alpha-Notizen, falls du Kontext möchtest: docs/release-notes/MacSurf-0.1a1.md.
Den Browser bauenMacSurf wird unter Mac OS 9 mit CodeWarrior 8 Pro (8.3-Update) gebaut. Der Quellcode ist sauber cross-kompilierbar mit Retro68 PowerPC GCC, den wir für schnelle Syntaxprüfungen auf der Linux-Seite verwenden. |
![]() v0.2: JavaScript auf Mac OS 9 Erste echte Seite mit JavaScript im Praxiseinsatz. Duktape 2.7.0 ES5 wertet live aus: Math.sqrt, JSON und ES5-Array-Methoden.
|
![]() fixes73: CSS-Transformationen Natives transform: rotate() / scale() / translate(). Integer-Q15-Sin/Cos-Tabelle, keine FPU-Abhängigkeit, beliebige Winkel auf QuickDraw.
|
![]() fixes74d: radiale Verläufe Radiale Verläufe mit zwei Stopps über einen konzentrischen PaintOval-Stack. 16 Stufen werden beim Dekodieren weichgezeichnet. Shape- und Positions-Schlüsselwörter werden geparst.
|
![]() fixes77: CSS-Animationen Linearer Ping-Pong-Animation-Player auf Basis der fixes73-Rotation. Wiggle, Swing und volle 0°→359°-Drehung. |
![]() fixes79b: PNG-Transparenz QuickTime-Graphics-Importer, der den NetSurf-Bild-Content-Handler speist. PNG + GIF + BMP, alle mit echter Transparenz. |
![]() fixes136: word-break / overflow-wrap word-break: break-all, keep-all, white-space: nowrap, das alte word-wrap: break-word. Aggressiver Umbruch im URL-Stil.
|
![]() fixes147: Stacking-Contexts CSS-2.1-Zeichenreihenfolge. Opacity, Transformationen und explizites z-index erzeugen neue Stacking-Contexts, die auf echter Hardware korrekt gezeichnet werden.
|
![]() fixes151: CSS-Grid-Spaltenplatzierung grid-column: span N, 1 / -1 für einen Hero über die ganze Zeile, positionsbasiertes start / end, span + automatischer Zeilenumbruch. Echtes Grid-Layout auf OS 9.
|
![]() v1.0: Showcase Die neue Werkzeugleiste, ein gestochen scharfes URL-Feld und matte Symbole, die home.macsurf.org auf einem G3 iMac mit OS 9.2.2 rendern. Natives HTTPS über macTLS direkt zum Ursprungsserver, servergerendertes Portal, True-Color-Bilder durchgängig. | |
| Komponente | Sprache | Zweck |
|---|---|---|
browser/ | C (C89, CW8) | NetSurf-Fork mit einem macos9-Frontend. Carbon für die UI, QuickDraw für das Zeichnen, Open Transport für die Netzwerkfunktionen, Duktape für JS. |
proxy/ | Go (nur Standardbibliothek) | Der alte HTTP-Proxy zum Entfernen von TLS. Inzwischen weitgehend ausgemustert, da macTLS nativ funktioniert, aber weiterhin nützlich als Fallback oder auf Maschinen ohne CarbonLib. Der Mac sendet normales HTTP, der Proxy lädt per HTTPS und gibt normales HTTP zurück. |
macTLSSchwester-Repo | C (CW8) | Native TLS-1.2-Bibliothek für OS 9 – modernes HTTPS direkt vom Mac, kein Proxy erforderlich. BearSSL darunter, 121 Vertrauensanker eingebaut. |
|
Rendering-Pipeline
CSS – rund 150 Eigenschaften, die im Layout verarbeitet werden
|
JavaScript – Duktape 2.7.0, volles ES5
Bilder – alle fünf Formate
Netzwerk
Browser-Oberfläche
|
fetchloadDOMContentLoaded<details><summary>JS 19/19 pass, 0 failabout:cacheabout:memoryabout:configabout:perf