
Современный веб-браузер для Classic Mac OS 9 PowerPC. Настоящий CSS3, ES5 JavaScript, нативный HTTPS. Создан с помощью CodeWarrior на Carbon API.
Современный веб на 25-летнем Mac.
MacSurf — это веб-браузер для Classic Mac OS 9 PowerPC. CSS3, JavaScript ES5 и PNG с альфа-каналом — и всё это работает на G3 iMac.
MacSurf — это проект на полную ставку. Если он вернул ваш старый Mac в веб, каждый доллар помогает продолжать разработку. Следите за прогрессом также на Patreon, где публикуются dev-логи.[!NOTE] Ранняя альфа — она запускается, отрисовывает страницы и нативно говорит на TLS 1.3 на 233-МГц G3, но большая часть современного веба в ней пока не работает. Рассчитывайте на страницы, свёрстанные вручную, ретро-сайты и странный восторг от ES5 JavaScript на PowerPC. Не ждите плавного сёрфинга по произвольным современным сайтам, видео или чего-нибудь тяжёлого на React.
Если у вас завалялся Power Mac G3 или G4 — загрузите его и посмотрите, что сломается. Отчёты об ошибках и скриншоты с реального железа — именно то, что нужно этому проекту. Актуальный список нерешённых задач см. в docs/status.md.
Веб перерос Classic Mac OS двадцать лет назад. Современный HTTPS окончательно добил его примерно в 2016 году. Достань сегодня G3 или G4 из чулана — и он едва ли откроет хотя бы один живой сайт.
MacSurf — попытка исправить это на самой машине: никакого скриншот-прокси, никаких трюков с удалённым терминалом. Нативный браузер, собранный инструментами, которые уже были на платформе: CodeWarrior, Carbon, QuickDraw, Open Transport. Настоящие CSS3-раскладки и настоящий JavaScript, работающие в пределах 64 МБ памяти iMac 1999 года. С конца мая 2026 года он напрямую общается с современным вебом по TLS 1.2 через macTLS — стек на основе BearSSL, который поставляется внутри бинарника браузера со 121 якорем доверия из набора Mozilla CA. Прокси больше не нужен.
Насколько нам известно, это первый серьёзный порт NetSurf на Classic Mac OS и первый браузер, когда-либо выпущенный для Mac OS 9 с нативными CSS Grid, кастомными свойствами CSS и JavaScript ES5.
Каждый снимок ниже — реальная веха, снятая на Power Macintosh G3 под управлением Mac OS 9. Подписи с номерами фиксов соответствуют истории коммитов этого репозитория.
Последняя версия — MacSurf 1.68 — "macQJS" (2026-07-07): движок JavaScript был заменён — Duktape (ES5) → macQJS (QuickJS, ES2023), так что современный JavaScript работает нативно на Mac OS 9. Плюс работающий ввод текста (каретка / выделение / Tab), сохраняемые входы в аккаунты, меню закладок + менеджер загрузок, исправление отрисовки раздельной полосы прокрутки, загружаемые глифы иконок из веб-шрифтов и большой проход по производительности (почти мгновенный запуск, дисковый кэш изображений и шрифтов, ленивая загрузка изображений во viewport). Название дано в честь 68kmla.org, сообщества, которое двигало этот цикл. Полные заметки: release-notes/MacSurf-1.68.md.
Предыдущая версия — MacSurf v1.4 — Open House (2026-06-01): марафон по JavaScript завершён. 23 задачи JS-моста перешли из открытых в закрытые за один релиз — setTimeout / setInterval / requestAnimationFrame, window.location, window.history, URL, URLSearchParams, classList, style, конструкторы Event, MutationObserver, DOMParser, FormData, localStorage, , события / , плюс переключатель / . Новый набор тестов показал результат на G3 iMac. Диагностические страницы работают: , , , — все выводят реальные счётчики. Просмотр исходного кода (View Source) рендерится инлайн, поиск по странице (Find-in-page) открывает настоящий диалог Carbon. Предшественник принёс TLS 1.3 с несколькими кривыми; был первым нативным TLS 1.3 на Classic Mac OS; закрыл дыру с энтропией; стал релизом с редизайном интерфейса; — ускорением холодной загрузки (mactrove.com 30+ с → ~2-3 с); первая нумерованная альфа — .
browser/netsurf/frontends/macos9/MacSurf.mcp в CodeWarrior 8 и выберите Build. Тем, кто собирает v1.4 в воркспейсе v1.3.1, нужно добавить в проект один новый исходный файл: browser/netsurf/desktop/search.c (он даёт browser_window_search для нового диалога поиска; content/textsearch.c уже добавлен). macTLS не изменился с v1.3.1. Тем, кто собирает v1.3 в воркспейсе v1.2, нужно добавить четыре файла macTLS для 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. Тем, кто собирает v1.2 в воркспейсе 1.0, нужен desktop/download.c. Самый ранний релиз содержит снапшот BuildPack.sit с уже настроенным проектом CW8, но текущие сборки работают прямо из свежего клона.Заметки ранних альф, если нужен контекст: docs/release-notes/MacSurf-0.1a1.md.
Сборка браузераMacSurf собирается на Mac OS 9 в CodeWarrior 8 Pro (с обновлением 8.3). Исходники чисто кросс-компилируются с Retro68 PowerPC GCC — именно его мы используем для быстрых проверок синтаксиса на стороне Linux. |
![]() v0.2: JavaScript на Mac OS 9 Первая страница с реальным JS. Duktape 2.7.0 (ES5) вживую вычисляет: Math.sqrt, JSON, методы массивов ES5.
|
![]() fixes73: CSS-трансформации Нативные transform: rotate() / scale() / translate(). Целочисленная таблица sin/cos Q15, никакой зависимости от FPU, произвольные углы на QuickDraw.
|
![]() fixes74d: радиальные градиенты Двухточечные радиальные градиенты через концентрический стек PaintOval. 16 уровней, размываемых при декодировании. Разбираются ключевые слова shape + position.
|
![]() fixes77: CSS-анимации Линейный проигрыватель анимации «пинг-понг» поверх вращения из fixes73. Покачивание (wiggle), качание (swing) и полное вращение 0°→359°. |
![]() fixes79b: прозрачность PNG QuickTime Graphics Importer питает обработчик изображений NetSurf. PNG + GIF + BMP — все с настоящей прозрачностью. |
![]() fixes136: word-break / overflow-wrap word-break: break-all, keep-all, white-space: nowrap, устаревший word-wrap: break-word. Агрессивные переносы в стиле URL.
|
![]() fixes147: контексты наложения Порядок отрисовки CSS 2.1. Opacity, трансформации и явный z-index создают новые контексты наложения, корректно отрисовываемые на реальном железе.
|
![]() fixes151: размещение колонок в CSS Grid grid-column: span N, 1 / -1 — hero-блок на всю строку, позиционные start / end, span + авто-перенос. Настоящая Grid-раскладка на OS 9.
|
![]() v1.0: Showcase Новая панель инструментов, идеально чёткое поле URL и матовые иконки, отрисовывающие home.macsurf.org на G3 iMac под управлением OS 9.2.2. Нативный HTTPS через macTLS напрямую к источнику, портал с серверным рендерингом, полноцветные изображения по всей цепочке. | |
| Компонент | Язык | Назначение |
|---|---|---|
browser/ | C (C89, CW8) | Форк NetSurf с фронтендом macos9. Carbon для интерфейса, QuickDraw для отрисовки, Open Transport для сети, Duktape для JS. |
proxy/ | Go (stdlib only) | Старый HTTP-прокси, снимающий TLS. В значительной степени списан теперь, когда macTLS работает нативно, но всё ещё полезен как запасной вариант или на машинах без CarbonLib. Mac отправляет обычный HTTP, прокси забирает данные по HTTPS и возвращает обычный HTTP. |
macTLSсоседний репозиторий | C (CW8) | Нативная библиотека TLS 1.2 для OS 9: современный HTTPS прямо с Mac, прокси не требуется. Под капотом — BearSSL, встроен 121 якорь доверия. |
|
Конвейер отрисовки
CSS — около 150 свойств, применяемых в раскладке
|
JavaScript — Duktape 2.7.0, полный ES5
Изображения — все пять форматов
Сеть
Оболочка браузера
|
fetchloadDOMContentLoaded<details><summary>JS 19/19 pass, 0 failabout:cacheabout:memoryabout:configabout:perf