MacSurf 1.68发布:可在OS 9上运行的NetSurf浏览器
速览
MacSurf 1.68版本已发布,主要特性是可以在经典的Mac OS 9操作系统上运行NetSurf网页浏览器。对于怀旧用户或需要兼容老系统的场景有一定意义。此次更新可能包含了针对OS 9的优化和bug修复。
AI 深度解读
背景
MacSurf 是一款为 Classic Mac OS(PowerPC 架构,Mac OS 9.1–9.2.2)设计的原生网页浏览器。它不依赖代理或辅助机器,直接在老旧 Mac 硬件上运行,支持真正的 HTTPS 和现代 JavaScript 引擎。最新版本 1.68 被命名为 "macQJS",向 68kmla.org 社区致敬——该社区是推动本轮开发工作的核心力量。项目通过 Patreon 和 Ko-Fi 接受赞助,以维持全职开发。
核心内容
MacSurf 1.68 最大的变化是用 macQJS 替换了原有的 JavaScript 引擎。macQJS 是 QuickJS 针对 Classic Mac OS 的移植版,能够在 PowerPC 上的 Mac OS 9 中原生执行现代 ES2023 JavaScript。此前使用的 Duktape 仅支持 ES5,导致浏览器需要内置一个 ES6→ES5 转译器来预处理现代打包代码——该转译器在重写 async/await 时会静默破坏压缩后的包。现在,macQJS 原生支持 let/const、箭头函数、类、模板字面量、Promise、生成器、现代正则表达式等特性。真实网站的脚本无需降级即可运行,实际站点打包代码直接在设备上执行。同时,macQJS 设有每堆内存上限和执行时限(约 20 秒),以防止失控或恶意脚本导致系统挂起或内存耗尽。
本轮修复了大量影响可用性的关键问题:
- 文本输入字段现在会显示闪烁的文本光标,点击拖拽可选择文本,剪切/复制/粘贴通过 Mac Scrap Manager 正确路由到焦点字段。
- 登录状态得到持久化——登录后不再反复提供已缓存的未登录页面。
- 方向键正常移动光标或滚动页面,不再将整个视口推偏。
- Tab 键可在表单字段间循环切换。
- 浏览器启动几乎瞬间完成——之前每次启动都会运行一个诊断自测,执行繁重的 JavaScript 基准测试,导致约 17 秒冻结。
- Cookie 同意条/粘性横幅可点击:点击 "Accept" 按钮时不再穿透到背景页面。
- 第二个窗口不再关闭第一个窗口,窗口生命周期已修复。
- 最大化(缩放框)正常工作,"关于 MacSurf" 菜单项可弹出。
在站点兼容性方面,重点针对 68kmla 论坛(基于 XenForo)进行适配:
- 回复/发帖编辑器恢复正常工作。引擎切换导致 XenForo 的
preamble、core、editor等真实打包代码原生运行后崩溃(parentNode 为 null → jQuery Sizzle → jQuery.support → XF.Element 级联错误),导致编辑器坍缩为单行输入框。通过为这三个包提供小型 ES5 垫片,设置has-js、定义XF.Element、展示并调整编辑器大小,使得从 Mac OS 9 机器上正式发帖成为可能。 - 对于注定会出错的 XenForo 功能包(如 lightbox、媒体库等),现在直接跳过解析,避免抛出异常,从而节省页面加载时间。
渲染与 CSS 方面:
- 修复了分割滚动条/页面宽度失控的 bug:一个未解析的盒子保留了其 "诞生" 时的宽度
INT_MAX,导致文档内容宽度膨胀到约 21 亿像素,在狭窄的内容列旁出现巨大的空白画布和虚假的水平滚动条。XenForo 论坛(68kmla、tinkerdifferent)现在能正确全宽布局。 - 可下载的网页字体图标字形现在能正确渲染——Material Design Icons / FontAwesome 的
@font-face图标字体首次在 Classic Mac OS 上显示,通过 sfnt cmap 解析 + QuickDraw 区域填充实现。 - 文本单词合并问题也得到改进。
用户界面与实用功能新增:
- 书签菜单:保存的书签显示为可点击的菜单项,重启后保留。
- 下载管理器:HTTPS 下载现可正常工作,自动保存到
Downloads文件夹(使用服务器建议的文件名,经过 HFS 安全处理并去重);一个无模态的下载窗口显示实时字节进度,每行可取消。 MacSurfData文件夹放在应用程序旁边,统一存放Cache/、Downloads/子文件夹、书签和调试日志,不再将文件散落在启动盘桌面上。
网络与登录:
- 登录会话持久化(登录后重定向不再提供过期的已缓存页面)。
- Cookie 罐持久化到
MacSurfData磁盘上,使登录状态在重启后仍有效。 - 支持按主机设置 User-Agent 覆盖,RFC-6265 规范的 Cookie 罐仍然启用。
关键要点
- macQJS 引擎替换:Duktape (ES5) → 基于 QuickJS (ES2023) 的 macQJS,标志着 Classic Mac OS 浏览器首次原生支持现代 JavaScript。
- ES6→ES5 转译器退役:此前为防止现代语法崩溃而采用的内部转译工具已被移除,因为它会静默破坏压缩后的包。
- 安全性保障:内存上限和约 20 秒执行时限防止脚本失控。
- 文本输入终于可用:光标、选择、剪切/粘贴、键盘导航(方向键、Tab、Home/End、Page Up/Down)全部修复。
- 登录状态持久化:从 Mac OS 9 机器上登录网站后可以保持登录状态,包括重启后。
- 176 项修复与改进:版本号 1.68 致敬 68kmla.org 社区,该社区提供了海量真实世界渲染、登录和 JavaScript 测试用例。
- 浏览器启动时间从 17 秒大幅降至 <1 秒:去除了每次启动时运行的重诊断基准测试。
- 网页字体图标首次在 Classic Mac OS 上渲染:Material Design Icons / FontAwesome 字体图标通过 sfnt cmap 解析 + QuickDraw 区域填充实现。
- 文件组织结构优化:
MacSurfData文件夹统一管理 Cache、Downloads、书签和日志,不再杂乱分散。
意义与影响
MacSurf 1.68 的发布是 Classic Mac OS 生态中一项里程碑式的成就。它证明,即使在 20 多年前的硬件和操作系统(Mac OS 9)上,也能通过现代工程手段实现真正的 HTTPS 浏览和 ES2023 JavaScript 执行。这不仅仅是怀旧复古,更具有实际意义:收藏家和修复者手中的 Power Mac G3/G4 电脑可以重新接入现代互联网,访问使用真实 HTTPS 和现代 JavaScript 的网站,如论坛、博客甚至某些动态 Web 应用。
macQJS 作为一个独立项目,将让其他 Classic Mac OS 软件也能受益于现代 JavaScript 引擎。修复的 176 个问题(如光标、登录持久化、窗口管理、滚动条 bug 等)从根本上提升了浏览器的可用性,从“技术演示”进化为“可日常使用的工具”。社区驱动的开发模式(以 68kmla.org 为核心测试平台)让项目能针对真实世界页面进行打磨,这种模式对于维护古老平台软件的生命力至关重要。
该项目也反映了数字保存和复古计算的深层价值:通过技术手段延长经典硬件的使用寿命,保留对早期互联网历史的访问能力,同时让新一代开发者理解过去的软件栈。MacSurf 的全职开发模式依赖社区赞助,体现了小规模、高度专注的开源项目如何依靠热情和支持者持续运行。
