
Classic Mac OS 9 PowerPC向けのモダンなWebブラウザ。本格的なCSS3、ES5 JavaScript、ネイティブHTTPSに対応。CodeWarriorを使用し、Carbon API上で構築。
最新のウェブを、25 年前の Mac で。
MacSurf は Classic Mac OS 9 PowerPC 向けのウェブブラウザです。CSS3、ES5 JavaScript、アルファチャンネル付き PNG——そのすべてが G3 iMac で動作します。
MacSurf はフルタイムのプロジェクトです。MacSurf のおかげで古い Mac が再びウェブにつながるようになったなら、どんな金額でも開発の継続を支えてくれます。また、Patreon では開発ログで進捗をフォローできます。[!NOTE] 初期アルファ版です——233 MHz の G3 上でネイティブに動作し、描画し、TLS 1.3 で通信しますが、現代のウェブの大半はまだ動作しません。手作りのページ、レトロ風サイト、そして PowerPC で ES5 JavaScript が動く不思議なスリルを期待してください。任意の現代サイトでのスムーズなブラウジング、動画、React 多用のものは期待しないでください。
Power Mac G3 や G4 が手元にあるなら、動かしてどこが壊れるか試してみてください——バグ報告と実機スクリーンショットこそ、このプロジェクトが必要としているものです。現在の課題リストは docs/status.md を参照してください。
ウェブは 20 年前に Classic Mac OS を追い越しました。近代的な HTTPS が 2016 年頃にそれをとどめました。今日、クローゼットから G3 や G4 を取り出しても、生きたウェブサイトにはほとんどたどり着けません。
MacSurf は、その問題をマシン自身で解決しようという試みです——スクリーンショットのプロキシも、リモートターミナルのトリックもありません。プラットフォームに元々あったツール、CodeWarrior、Carbon、QuickDraw、Open Transport で作られたネイティブブラウザです。本物の CSS3 レイアウトと本物の JavaScript が、1999 年製 iMac の 64 MB というメモリ下限の中で動作します。2026 年 5 月下旬以降は macTLS を通じて現代のウェブと直接 TLS 1.2 で通信します。macTLS は BearSSL ベースのスタックで、Mozilla CA バンドル由来の 121 個のトラストアンカーを同梱し、ブラウザのバイナリ内に収められています。もうプロキシは不要です。
私たちが知る限り、これは Classic Mac OS 向けとしては初の本格的な NetSurf 移植であり、Mac OS 9 に搭載されたブラウザとして、ネイティブの CSS Grid、CSS カスタムプロパティ、ES5 JavaScript を備えた初のものです。
以下の各ショットは、Mac OS 9 を搭載した Power Macintosh G3 で撮影された実際のマイルストーンです。fix 番号の注釈は、このリポジトリのコミット履歴に対応しています。
最新版は MacSurf 1.68 ——「macQJS」(2026-07-07)です:JavaScript エンジンが置き換えられました——Duktape(ES5)→ macQJS(QuickJS、ES2023)。これにより、モダンな JavaScript が Mac OS 9 上でネイティブに動作します。 さらに、動作するテキスト入力(キャレット / 選択 / Tab)、ログイン状態の保持、ブックマークメニュー + ダウンロードマネージャ、分割スクロールバーの描画修正、ダウンロード可能なウェブフォントのアイコン用グリフ、そして大幅なパフォーマンス改善(ほぼ即座の起動、画像 / フォントのディスクキャッシュ、ビューポートでの画像の遅延読み込み)も含まれます。このサイクルを牽引したコミュニティである 68kmla.org に敬意を表して命名されました。詳細なノート: release-notes/MacSurf-1.68.md。
1 つ前の MacSurf v1.4 — Open House(2026-06-01):JavaScript マラソンが完結しました。 1 回のリリースで 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 を搭載。 は Classic Mac OS 初のネイティブ TLS 1.3。 はエントロピーの穴を塞ぎました。 は UI を再設計したリリース。 はコールドロードの高速化(mactrove.com が 30 秒以上 → 約 2〜3 秒)。最初の番号付きアルファ版は です。
browser/netsurf/frontends/macos9/MacSurf.mcp を開いて Build を選択します。v1.3.1 のワークスペースで v1.4 をビルドする場合は、1 つの新しいソースファイルをプロジェクトに追加する必要があります: browser/netsurf/desktop/search.c(新しい Find ダイアログ用の browser_window_search を提供します。content/textsearch.c は既に含まれています)。macTLS は v1.3.1 から変更ありません。v1.2 のワークスペースで v1.3 をビルドする場合は、TLS 1.3 用に 4 つの macTLS ファイルを追加する必要があります: bearssl/src/ec/ec_c25519_m15.c、os9/ostls_tls13_keysched.c、os9/ostls_tls13_record.c、os9/ostls_tls13_handshake.c。v1.0 のワークスペースで v1.2 をビルドする場合は desktop/download.c が必要です。最初のリリースには CW8 プロジェクトがあらかじめ設定された BuildPack.sit スナップショットが同梱されていますが、現在のビルドは新規クローンからそのまま動作します。文脈が必要な場合は初期アルファ版のノート: docs/release-notes/MacSurf-0.1a1.md。
ブラウザのビルドMacSurf は Mac OS 9 上で CodeWarrior 8 Pro(8.3 アップデート)を使ってビルドされます。ソースは Retro68 PowerPC GCC に対してクロスコンパイルがクリーンです。これは Linux 側で高速な構文チェックを行うために使用しているものです。 |
![]() v0.2:Mac OS 9 で JavaScript 初の実用的な JS 搭載ページ。Duktape 2.7.0 の ES5 がライブで動作: Math.sqrt、JSON、ES5 の配列メソッド。
|
![]() fixes73:CSS トランスフォーム ネイティブの transform: rotate() / scale() / translate()。整数 Q15 の sin/cos テーブル、FPU 非依存、QuickDraw 上で任意角度。
|
![]() fixes74d:放射状グラデーション 同心円状の PaintOval スタックによる 2 ストップの放射状グラデーション。デコード時に 16 レベルをスミア処理。シェイプと位置のキーワードをパース。
|
![]() 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、位置指定の start / end、span + 自動折り返し。OS 9 で本物の Grid レイアウト。
|
![]() v1.0:ショーケース 新しいツールベルトツールバー、シャープな URL フィールド、マット仕上げのアイコンで、OS 9.2.2 を搭載した G3 iMac 上で home.macsurf.org を描画。macTLS によるオリジン直結のネイティブ HTTPS、サーバーサイドレンダリングのポータル、エンドツーエンドのトゥルーカラー画像。 | |
| コンポーネント | 言語 | 目的 |
|---|---|---|
browser/ | C (C89, CW8) | macos9 フロントエンドを備えた NetSurf フォーク。UI は Carbon、描画は QuickDraw、ネットワークは Open Transport、JS は Duktape。 |
proxy/ | Go (stdlib only) | 旧式の TLS ストリッピング HTTP プロキシ。macTLS がネイティブで動作するようになった現在はほぼ退役していますが、フォールバックや CarbonLib のないマシンでは今でも有用です。Mac は平文 HTTP を送信し、プロキシが HTTPS で取得して平文 HTTP を返します。 |
macTLS兄弟リポジトリ | C (CW8) | OS 9 向けのネイティブ TLS 1.2 ライブラリ——Mac から直接モダンな HTTPS へ、プロキシ不要。内部は BearSSL、121 個のトラストアンカーを内蔵。 |
|
レンダリングパイプライン
CSS —— レイアウトで約 150 のプロパティに対応
|
JavaScript —— Duktape 2.7.0、完全な ES5
画像 —— 全 5 形式
ネットワーク
ブラウザ UI
|
fetchloadDOMContentLoaded<details><summary>JS 19/19 pass, 0 failabout:cacheabout:memoryabout:configabout:perf