
Un navegador web moderno para Classic Mac OS 9 PowerPC. CSS3 real, JavaScript ES5, HTTPS nativo. Construido con CodeWarrior sobre la API Carbon.
La web moderna, en un Mac de 25 años.
MacSurf es un navegador web para Classic Mac OS 9 PowerPC. CSS3, JavaScript ES5 y PNG con canal alfa: funcionando en un iMac G3.
MacSurf es un proyecto a tiempo completo. Si ha devuelto tu viejo Mac a la web, cada dólar ayuda a mantener el desarrollo. Sigue también el progreso en Patreon con los registros de desarrollo.
MacSurf se mantiene vivo gracias a sus patrocinadores — ¡gracias!
Patreon
Shlooom
Ko-Fi
kilgeist
[!NOTE] Alfa temprana: se ejecuta, renderiza y habla TLS 1.3 de forma nativa en un G3 a 233 MHz, pero la mayor parte de la web moderna aún no funcionará en ella. Espera páginas hechas a mano, sitios de estilo retro y la extraña emoción del JavaScript ES5 en PowerPC. No esperes navegación fluida en sitios modernos arbitrarios, vídeo ni nada con mucho React.
Si tienes un Power Mac G3 o G4 por ahí, cárgalo y mira qué se rompe: los informes de errores y las capturas de pantalla en hardware real son exactamente lo que este proyecto necesita. Consulta docs/status.md para ver la lista de pendientes actual.
La web superó a Classic Mac OS hace veinte años. El HTTPS moderno lo remató hacia 2016. Saca un G3 o G4 del armario hoy y apenas podrá acceder a un solo sitio web en funcionamiento.
MacSurf es un intento de arreglar eso en la propia máquina — sin proxy de capturas de pantalla, sin trucos de terminal remoto. Un navegador nativo, construido con las herramientas que ya estaban en la plataforma: CodeWarrior, Carbon, QuickDraw, Open Transport. Diseños CSS3 reales y JavaScript real, ejecutándose dentro del límite de memoria de 64 MB de un iMac de 1999. Desde finales de mayo de 2026 habla TLS 1.2 directamente con la web moderna mediante macTLS, una pila basada en BearSSL que viaja dentro del binario del navegador con 121 anclas de confianza del paquete de CA de Mozilla. Ya no se necesita ningún proxy.
Por lo que sabemos, este es el primer port serio de NetSurf a Classic Mac OS, y el primer navegador lanzado en Mac OS 9 con CSS Grid nativo, propiedades personalizadas de CSS y JavaScript ES5.
Cada captura siguiente es un hito real, tomada en un Power Macintosh G3 con Mac OS 9. Las anotaciones de número de fix coinciden con el historial de commits de este repositorio.
La última versión es MacSurf 1.68 — "macQJS" (2026-07-07): se reemplazó el motor de JavaScript — Duktape (ES5) → macQJS (QuickJS, ES2023), por lo que el JavaScript moderno se ejecuta de forma nativa en Mac OS 9. Además, entrada de texto funcional (cursor / selección / Tab), sesiones conservadas, menú de marcadores + gestor de descargas, la corrección de renderizado de la barra de desplazamiento dividida, glifos de iconos descargables de fuentes web y una gran ronda de optimización del rendimiento (inicio casi instantáneo, caché de imágenes/fuentes en disco, carga diferida de imágenes del viewport). Nombrada en honor a 68kmla.org, la comunidad que impulsó el ciclo. Notas completas: release-notes/MacSurf-1.68.md.
Su predecesora, MacSurf v1.4 — Open House (2026-06-01): maratón de JavaScript cerrado. 23 incidencias del puente JS pasaron de abiertas a cerradas en una sola versión: setTimeout / setInterval / requestAnimationFrame, window.location, window.history, URL, URLSearchParams, classList, style, constructores de Event, MutationObserver, DOMParser, FormData, localStorage, , eventos / , además del conmutador / . La nueva suite de pruebas obtuvo en un iMac G3. Las páginas de diagnóstico están activas: , , , renderizan contadores reales. Ver código fuente se renderiza en línea y Buscar en página abre un diálogo Carbon real. La predecesora incorporó TLS 1.3 de múltiples curvas; fue el primer TLS 1.3 nativo en Classic Mac OS; cerró el agujero de entropía; fue la versión de rediseño de la interfaz; fue la aceleración de carga en frío (mactrove.com de 30+s → ~2-3s); la primera alfa numerada en .
browser/netsurf/frontends/macos9/MacSurf.mcp en CodeWarrior 8 y elige Build. Quienes compilen v1.4 sobre un espacio de trabajo v1.3.1 deben añadir un archivo fuente nuevo al proyecto: browser/netsurf/desktop/search.c (proporciona browser_window_search para el nuevo diálogo de búsqueda; content/textsearch.c ya está incluido). macTLS no cambia respecto a v1.3.1. Quienes compilen v1.3 sobre un espacio de trabajo v1.2 deben añadir cuatro archivos de 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. Quienes compilen v1.2 sobre un espacio de trabajo 1.0 necesitan desktop/download.c. La primera versión incluye una instantánea de BuildPack.sit con el proyecto CW8 preconfigurado, pero las compilaciones actuales funcionan directamente desde un clon nuevo.Notas de alfas anteriores si quieres contexto: docs/release-notes/MacSurf-0.1a1.md.
Compilar el navegadorMacSurf se compila en Mac OS 9 con CodeWarrior 8 Pro (actualización 8.3). El código fuente se compila limpiamente de forma cruzada contra Retro68 PowerPC GCC, que es lo que usamos para las comprobaciones rápidas de sintaxis en Linux. |
![]() v0.2: JavaScript en Mac OS 9 Primera página real con JavaScript. Duktape 2.7.0 ES5 evaluando en vivo: Math.sqrt, JSON, métodos de array ES5.
|
![]() fixes73: transformaciones CSS Transformaciones nativas transform: rotate() / scale() / translate(). Tabla sin/cos Q15 de enteros, sin dependencia de FPU, ángulos arbitrarios en QuickDraw.
|
![]() fixes74d: gradientes radiales Gradientes radiales de 2 paradas mediante pila concéntrica de PaintOval. 16 niveles difuminados al decodificar. Se analizan las palabras clave de forma y posición.
|
![]() fixes77: animaciones CSS Reproductor de animación lineal tipo ping-pong sobre la rotación de fixes73. Wiggle, swing y giro completo de 0°→359°. |
![]() fixes79b: transparencia PNG El importador de gráficos de QuickTime alimenta el gestor de contenido de imágenes de NetSurf. PNG + GIF + BMP, todos con transparencia real. |
![]() fixes136: word-break / overflow-wrap word-break: break-all, keep-all, white-space: nowrap, el clásico word-wrap: break-word. Ajuste agresivo de líneas estilo URL.
|
![]() fixes147: contextos de apilamiento Orden de pintado CSS 2.1. La opacidad, las transformaciones y el z-index explícito crean nuevos contextos de apilamiento, pintados correctamente en hardware real.
|
![]() fixes151: colocación de columnas en CSS Grid grid-column: span N, 1 / -1 para héroe a fila completa, start / end posicionales, span + ajuste automático. Diseño Grid real en OS 9.
|
![]() v1.0: Showcase La nueva barra de herramientas multiusos, el campo de URL nítido y los iconos enmarcados renderizando home.macsurf.org en un iMac G3 con OS 9.2.2. HTTPS nativo vía macTLS directo al origen, portal renderizado en servidor e imágenes a todo color de principio a fin. | |
| Componente | Lenguaje | Propósito |
|---|---|---|
browser/ | C (C89, CW8) | Fork de NetSurf con frontend macos9. Carbon para la interfaz, QuickDraw para el dibujado, Open Transport para la red y Duktape para JS. |
proxy/ | Go (solo stdlib) | El antiguo proxy HTTP de eliminación de TLS. Prácticamente retirado ahora que macTLS funciona de forma nativa, pero aún útil como respaldo o en máquinas sin CarbonLib. El Mac envía HTTP simple, el proxy obtiene vía HTTPS y devuelve HTTP simple. |
macTLSrepositorio hermano | C (CW8) | Librería TLS 1.2 nativa para OS 9 — HTTPS moderno directamente desde el Mac, sin necesidad de proxy. BearSSL por debajo, 121 anclas de confianza integradas. |
|
Canal de renderizado
CSS — alrededor de 150 propiedades usadas en el layout
|
JavaScript — Duktape 2.7.0, ES5 completo
Imágenes — los cinco formatos
Red
Interfaz del navegador
|
fetchloadDOMContentLoaded<details><summary>JS 19/19 pass, 0 failabout:cacheabout:memoryabout:configabout:perf