Infinite Mac 现在能在浏览器里跑 BeOS 了
BeOS 现在可以在 Infinite Mac 的浏览器里启动,而让它跑起来的代价,是修掉模拟器里那些只对 Mac OS 成立的假设。
中文
复制

简而言之,现在你可以在浏览器里运行多个 BeOS 版本了,就在 Infinite Mac 上。那是我做的网站,你可以在上面体验 1984 到 2005 年的 Macintosh 电影宇宙。这些安装和它们的 Mac 表亲完全对等,可以秒开(大容量磁盘以流式加载),把玩 Infinite HD 里预装的软件,插入来自 Internet Archive 的 CD-ROM,还能把工作保存到“Saved HD”盘上。
BeOS 是一个主打多媒体的多任务、多线程操作系统,最终被移植到了 90 年代中期的 Power Macintosh 上。它让 Mac 社区的许多人印象深刻,包括 Apple 自己。Apple 曾考虑收购创造它的 Be 公司。如果你一直在追 Apple 寻找下一代操作系统的那段往事,这次正好能让你看看那条没走的路是什么样子。

让 BeOS 跑起来
上一个 Infinite Mac 项目颇为复杂(但也很有成就感),这次我想找个轻松点的目标。BeOS 早就在我的关注清单上(有一阵子了),而且和 A/UX 不同,我跟它有些私人渊源。我记得在秋叶原见过一台 BeBox,还用 BeView 把自己的 Mac 伪装成 BeOS 的样子,最后在 Power Macintosh 8500 上装了 BeOS 双系统。我之前已经集成过的模拟器 DingusPPC 在运行 BeOS 方面进展不错,所以把它加进网站看起来主要就是准备几个额外的磁盘镜像的事。
一开始确实像我希望的那样顺利。我添加了一个 Power Macintosh 7300 配置(官方支持的 Power Mac 机型之一),找到一张安装光盘,做了个磁盘镜像,然后就跑起来了。但用得越多、装的版本越多,我发现的零碎 bug 和边缘情况也越多。
- BeOS 的引导程序以为所有修饰键都被按住了,原因是 ADB 模拟中的一个 bug;结果它每次都会弹出那个(丑陋的、仿 PC BIOS 风格的)分区选择界面。
- 切换色深时,需要通知视频控制器和数模转换器这两个硬件组件。DingusPPC 一直碰巧依赖 Mac OS 发送这两个通知的顺序;BeOS 恰好反着来,于是显示就花了。
- 早期版本的 BeOS 以小端模式更新显存1;DingusPPC 缺少对这项硬件能力的支持。
- 较新版本的 BeOS 能挂载 HFS 分区,但对我用 machfs Python 库生成的卷有问题。原来是 BeOS 在某些数据结构的填充方式上比 Mac OS 更严格(而且它是对的)。
- 还有 各种 其他问题,过去一个月我提交给 DingusPPC 上游的 commit 大多是为了提升 BeOS 兼容性。

SheepShaver 是一款至今仍在维护的 Power Macintosh 模拟器(Infinite Mac 也内嵌了它),最初诞生于 BeOS。很大程度上是出于好玩,再套一层 inception/模拟的乐趣,我想确认它也能跑起来。结果它同样需要一处兼容性修复。它依赖 ROM 映射到物理内存地址时的一个边界情况,而 DingusPPC 没有准确建模这一点。
这些 bug 修复大多有一个共同规律。DingusPPC(以及 Infinite Mac)一直主要面向运行 Mac OS,因此不知不觉依赖上了它的怪癖或实现选择。把一套独立开发的操作系统加进来,就走通了新的路径,最终也提升了模拟硬件的准确度。需要说明的是,DingusPPC 开箱即用的表现已经相当接近;这要归功于它的维护者。我相信经过这番工作,它是唯一能运行 PowerPC 版 BeOS 的模拟器2。我也希望这有助于把 MkLinux(我对它同样有回忆)和 Rhapsody 这类别的操作系统跑起来。

在 Infinite Mac 这边,有些变化一眼可见,比如我给自定义控件做了“BeOS”外观,也在为软件库收集软件。我还需要往磁盘上叠加一些动态生成的内容,让操作系统预先选中与浏览器窗口匹配的屏幕分辨率(做法类似当初为 A/UX 所做的)。这类琐碎的逆向工程活儿,AI agent(我用的仍然是 Codex)又一次帮上了忙。观察到操作系统会把屏幕尺寸存进磁盘上的某个文件是一回事,能复现它的全部细节是另一回事,尤其是这个格式在后来的版本里还变过。
Developer Release 8.2 是 Power Mac 上的首个 BeOS 版本,它带有一个时间炸弹,1997 年 4 月 1 日之后就再也无法启动。这不只是为了制造紧迫感。它捆绑了一个授权字体渲染器,Be 无法无限期地分发它。DR8.3 解决了这个问题,但为了让这个值得纪念的初版能够启动,我确实得靠自定义日期支持,在选择该磁盘时硬编码一个可用的日期。
BeOS 印象
BeOS 当红的时候我确实试过几下,但印象只停留在“挺快;可惜我常用的第三方软件都没有”,再多的说不上来。About This Particular Macintosh 有当时的报道,包括 Be 在波士顿 Macworld Expo 的第一次和第二次亮相,以及 R3 和 R4.5 的评测,读起来很有意思。Be 自己发布的这段视频也演示了他们眼中的长处。
用 2026 年的眼光看,它的速度仍然让我吃惊。启动快,用起来也快,尤其是和同期那些功能少得多的 Mac OS 版本相比(比如实时拖动窗口直到 Mac OS X 才出现)。POSIX 子系统和类 Unix 的 shell 也很有现代感(不像 A/UX 的),我用终端四处翻看毫无障碍。创新之处也不少,不过其中有些(带属性和实时查询的 BFS)比其余的更有意思(replicants 算是小组件的前身,但我想不出能拿它做什么)。
这套系统用起来也像是一个面向开发者、仍在建设中的东西。自带的很多应用都是技术演示(不过谁不喜欢 Utah 茶壶呢),而当时 Be 的主页直接链到开发者发布说明,还讨论 CodeWarrior 的各个版本以及如何访问 bug tracker。这种未完成感也延伸到第三方软件。我在这张 Amiga 杂志光盘上翻到过一些 BeOS 软件,大多带着“0.1 版”的气质,无论是字面上还是比喻意义上。公平地说,我也找到了一些更成型的软件,比如出自前 ClarisWorks 团队的 Gobe Productive。它和其他软件都在 Infinite HD 上,想试的话可以试试(最好用较晚的 OS 版本)。
这个界面在当时看来很新颖,不过我怀疑它放到今天还能不能站得住3。别具一格的标签式窗口标题看着很利落,但可拖拽的区域变小了,每次想移动窗口都得多想一下。默认光标是一只手,点起来不如传统箭头精准(“手指”上到底哪个像素是热点?)。UI 的其他部分则像是一个没完全协调好的 Windows/Mac 混合体。Deskbar 能模拟开始菜单4,菜单项上有 Alt 键加速键,但同时又有弹簧加载文件夹和空间式的 Finder Tracker。
说到 Tracker,我之前没意识到 Be 已经把它开源了(甚至合并了开源版本的改动)。那段时间 Be 正转向互联网家电。如果对外只暴露一个全屏浏览器应用,就没必要在文件管理器上投入工程资源了。这篇采访 Tracker 开发者的文章讲了更多来龙去脉。

相比之下,NeXTStep 显得更成熟。它也经历过类似的波折(从专有硬件转向市售 PC、公司战略转向),但也许是因为时间更充裕,它应对得从容一些。比如 NeXT 支持能在 68K、Intel、PA-RISC 等架构上运行的“胖”二进制文件。而在 BeOS 上,则必须是各自独立的可执行文件,用户得自己选运行哪个,分发也因此更麻烦(这让我更难找到可以收进 Infinite HD 的软件)。更糟的是,CD-ROM 上还得有并行的磁盘分区。BFS 使用宿主机的字节序,所以 PowerPC 安装写出的磁盘在 Intel 机器上读不了,反过来也一样。不过,我偏向 NeXT 也许只是因为我知道 Apple 最后选了哪个系统。
站点的其他改进
距离上次更新没过多久,但我还是挤进了几项体验改进。现在你可以对模拟机的屏幕截图和录屏(带声音)。这是捕捉图像内容的高保真方式,因为它直接导出的是屏幕上原本会显示的内容。

我还扩充了操作系统光盘的收藏,加入了 Rhapsody 和 Mac OS X 开发者预览版之类的东西。它们目前还只是愿景(DingusPPC 还跑不了它们),但确实满足了我的收藏癖。这些光盘镜像放在我自己的 Cloudflare R2 存储桶里,并从那里提供。Internet Archive 是个了不起的资源(你可以捐款支持他们),但从上面串流越来越不稳定。我不想给这个问题添乱,而且多亏了我的赞助者,我负担得起提供几个 GB 的流量。
至于接下来做什么,这条另类的 Mac 时间线已经讲完了,也许是时候探索一段前传了。