
Un navigateur web moderne pour Classic Mac OS 9 PowerPC. Véritable CSS3, JavaScript ES5, HTTPS natif. Conçu avec CodeWarrior sur l'API Carbon.
Le web moderne, sur un Mac de 25 ans.
MacSurf est un navigateur web pour Classic Mac OS 9 PowerPC. CSS3, JavaScript ES5 et PNG avec alpha — le tout tournant sur un iMac G3.
MacSurf est un projet à plein temps. S'il a ramené votre vieux Mac sur le web, chaque dollar aide à poursuivre le développement. Suivez aussi l'avancement sur Patreon avec des journaux de développement.
MacSurf est maintenu en vie par ses soutiens — merci à eux :
Patreon
Shlooom
Ko-Fi
kilgeist
[!NOTE] Alpha précoce — il s'exécute, affiche et parle TLS 1.3 nativement sur un G3 à 233 MHz, mais la majeure partie du web moderne ne fonctionnera pas encore avec. Attendez-vous à des pages faites main, des sites rétro et l'étrange excitation du JavaScript ES5 sur PowerPC. N'attendez pas une navigation fluide sur des sites modernes quelconques, la vidéo ou quoi que ce soit de lourd en React.
Si vous avez un Power Mac G3 ou G4 qui traîne, installez-le et voyez ce qui casse — les rapports de bogues et les captures d'écran sur matériel réel sont exactement ce dont ce projet a besoin. Voir docs/status.md pour la liste des points en suspens.
Le web a dépassé Classic Mac OS il y a vingt ans. Le HTTPS moderne l'a achevé vers 2016. Sortez un G3 ou un G4 du placard aujourd'hui et il peut à peine atteindre un seul site web vivant.
MacSurf est une tentative de corriger cela sur la machine elle-même — pas de proxy de captures d'écran, pas d'astuce de terminal à distance. Un navigateur natif, construit avec les outils déjà présents sur la plateforme : CodeWarrior, Carbon, QuickDraw, Open Transport. De véritables mises en page CSS3 et du vrai JavaScript, fonctionnant dans les 64 Mo de mémoire d'un iMac de 1999. Depuis fin mai 2026, il parle TLS 1.2 directement au web moderne via macTLS, une pile basée sur BearSSL embarquée dans le binaire du navigateur avec 121 ancres de confiance provenant du bundle CA de Mozilla. Plus aucun proxy nécessaire.
Autant que nous puissions en juger, c'est le premier port sérieux de NetSurf vers Classic Mac OS, et le premier navigateur jamais distribué sur Mac OS 9 avec un CSS Grid natif, des propriétés personnalisées CSS et du JavaScript ES5.
Chaque capture ci-dessous est une véritable étape clé, réalisée sur un Power Macintosh G3 tournant sous Mac OS 9. Les annotations de numéros de fixes correspondent à l'historique des commits de ce dépôt.
La dernière version est MacSurf 1.68 — "macQJS" (2026-07-07) : le moteur JavaScript a été remplacé — Duktape (ES5) → macQJS (QuickJS, ES2023), si bien que le JavaScript moderne tourne nativement sur Mac OS 9. En plus : une saisie de texte fonctionnelle (curseur / sélection / Tab), des sessions conservées, un menu de favoris + gestionnaire de téléchargements, le correctif de rendu de la barre de défilement scindée, des glyphes d'icônes de police web téléchargeables et une grosse passe de performances (démarrage quasi instantané, cache disque des images/polices, chargement paresseux des images dans le viewport). Nommée en l'honneur de 68kmla.org, la communauté qui a porté ce cycle. Notes complètes : release-notes/MacSurf-1.68.md.
Prédécesseur : MacSurf v1.4 — Open House (2026-06-01) : le marathon JavaScript est terminé. 23 problèmes du pont JS sont passés d'ouverts à fermés en une seule version — setTimeout / setInterval / requestAnimationFrame, window.location, window.history, URL, URLSearchParams, classList, style, constructeurs Event, MutationObserver, DOMParser, FormData, localStorage, , événements / , plus la bascule
JS 19/19 pass, 0 fail sur un iMac G3. Les pages de diagnostic sont en service : about:cache, about:memory, about:config, about:perf affichent toutes de véritables compteurs. View Source s'affiche en ligne, Find-in-page ouvre une véritable boîte de dialogue Carbon. Prédécesseur v1.3.1 "Forward, refined" a livré le TLS 1.3 multi-courbes ; v1.3 "Forward" fut le premier TLS 1.3 natif sur Classic Mac OS ; v1.2 "Sealed" a comblé la faille d'entropie ; v1.0 "Showcase" fut la version de la refonte du chrome ; v0.6.2 "Speed-Run" fut l'accélération du chargement à froid (mactrove.com de 30 s+ → ~2-3 s) ; la première alpha numérotée à v0.1a1.
browser/netsurf/frontends/macos9/MacSurf.mcp dans CodeWarrior 8 et choisissez Build. Pour compiler la v1.4 sur un espace de travail v1.3.1, ajoutez un nouveau fichier source au projet : (fournit pour la nouvelle boîte de dialogue Find ; est déjà présent). macTLS est inchangé depuis la v1.3.1. Pour compiler la v1.3 sur un espace de travail v1.2, ajoutez quatre fichiers macTLS pour le TLS 1.3 : , , , . Pour compiler la v1.2 sur un espace de travail 1.0, il faut . La toute première version fournit un instantané avec le projet CW8 pré-câblé, mais les versions actuelles se compilent directement depuis un clone frais.
![]() v0.2: JavaScript sur Mac OS 9 Première page réelle contenant du JS. Duktape 2.7.0 ES5 évaluant en direct : Math.sqrt, JSON, méthodes de tableau ES5.
|
![]() fixes73: transformations CSS transform: rotate() / scale() / translate() natif. Table sin/cos entière Q15, aucune dépendance au FPU, angles arbitraires sur QuickDraw.
|
![]() fixes74d: dégradés radiaux Dégradés radiaux à 2 arrêts via une pile concentrique PaintOval. 16 niveaux fondus au décodage. Mots-clés de forme et de position analysés.
|
![]() fixes77: animations CSS Lecteur d'animations linéaires en ping-pong par-dessus la rotation de fixes73. Wiggle, swing et rotation complète 0°→359°. |
![]() fixes79b: transparence PNG Le QuickTime Graphics Importer alimente le gestionnaire de contenu d'images de NetSurf. PNG + GIF + BMP, tous avec une vraie transparence. |
![]() fixes136: word-break / overflow-wrap word-break: break-all, keep-all, white-space: nowrap, word-wrap: break-word hérité. Césure agressive de type URL.
|
![]() fixes147: contextes d'empilement Ordre de peinture CSS 2.1. L'opacité, les transformations et le z-index explicite créent tous de nouveaux contextes d'empilement, correctement peints sur du matériel réel.
|
![]() fixes151: placement des colonnes CSS Grid grid-column: span N, hero pleine ligne 1 / -1, start / end positionnels, span + retour à la ligne automatique. Véritable mise en page Grid sur OS 9.
|
![]() v1.0: Showcase La nouvelle barre d'outils « ceinture à outils », le champ d'URL d'une netteté parfaite et les icônes mates affichant home.macsurf.org sur un iMac G3 tournant sous OS 9.2.2. HTTPS natif via macTLS directement vers l'origine, portail rendu côté serveur, images en vraies couleurs de bout en bout. | |
| Composant | Langage | Rôle |
|---|---|---|
browser/ | C (C89, CW8) | Fork de NetSurf avec un frontal macos9. Carbon pour l'interface, QuickDraw pour le dessin, Open Transport pour le réseau, Duktape pour le JS. |
proxy/ | Go (stdlib only) | L'ancien proxy HTTP qui retire le TLS. Largement retraité maintenant que macTLS fonctionne nativement, mais toujours utile comme repli ou sur les machines sans CarbonLib. Le Mac envoie du HTTP simple, le proxy récupère via HTTPS, renvoie du HTTP simple. |
macTLSdépôt frère | C (CW8) | Bibliothèque TLS 1.2 native pour OS 9 — HTTPS moderne directement depuis le Mac, aucun proxy requis. BearSSL en dessous, 121 ancres de confiance intégrées. |
|
Pipeline de rendu
CSS — environ 150 propriétés prises en compte dans la mise en page
|
JavaScript — Duktape 2.7.0, ES5 complet
Images — les cinq formats
Réseau
Chrome du navigateur
|
fetchloadDOMContentLoadedbrowser/netsurf/desktop/search.cbrowser_window_searchcontent/textsearch.cbearssl/src/ec/ec_c25519_m15.cos9/ostls_tls13_keysched.cos9/ostls_tls13_record.cos9/ostls_tls13_handshake.cdesktop/download.cNotes des premières alphas si vous voulez du contexte : docs/release-notes/MacSurf-0.1a1.md.
Compiler le navigateurMacSurf est compilé sur Mac OS 9 avec CodeWarrior 8 Pro (mise à jour 8.3). Les sources sont propres en compilation croisée avec Retro68 PowerPC GCC, ce que nous utilisons pour des vérifications de syntaxe rapides côté Linux. |