Arcan:网络隐迹十年回顾

Lobsters Hottest 新闻

摘要

Arcan项目十年回顾,详述其作为日记项目起源——构建用于调试与可视化的显示服务器,并附带个人反思与历史。

<p><a href="https://lobste.rs/s/cssoxa/arcan_10_years_online_obscurity">评论</a></p>
查看原文
查看缓存全文

缓存时间: 2026/06/10 00:22

# Arcan:十年的网络隐匿岁月 来源:https://arcan-fe.com/2026/06/02/arcan-10-years-of-online-obscurity/ ……以及23年繁琐的“野牦牛剃毛”。十年前,我那篇相当寒酸的关于Arcan项目的帖子开始流传开来。它引起了足够的关注,以至于我当时就想立刻停下来。我不太在意关注度;我的大多数其他开源工作都是匿名的,或者用的是临时马甲号,而且我至今仍时常撞见自己过去那些“劣迹”的影子。为了哀悼这个时刻,在我彻底抹去这些记忆之前,写下一些历史似乎颇为合适。这一轮我会略过资金故事、它隐藏在内的商业项目、那些险些成功的初创公司,或者我们差点卖身给风投的那一次。即使在十年前,这个项目已经开源并存在了好几年,伪装成一个“DIY街机柜的前端”,但我们稍后会回到这一点。 真正的故事始于2003年左右。那时我差不多已经“搞定”了计算旅程中的编程语言部分——那是我能想到的最无聊的话题;乐趣在于音乐本身,而非乐谱。在构思要创作什么时,我被一种烦人且无法治愈的“示波器羡慕症”击中了。当那些酷炫的电子孩子们可以随处接上探头,看到电路在工作时,我们搞计算的却仍然被困在原始人式的“打印”日志,或者像电锯辅助手术一样的符号调试器中。我希望随着计算机构造信息之网,我能听到、感受到并看到它的运作。如果这样的事情真的可能,那需要对视觉、听觉和触觉进行相当精确的控制,以确保采样和呈现的内容正是你想要的。而这需要与科技史上最糟糕的一些公司角力。但你必须从某处开始开辟自己的空间,所以我掸去老旧克劳塞维茨著作上的灰尘,勾勒出一个计划。 首先,我肯定缺乏适当的技能。这些技能必须以某种方式获得。你无法知道自己不知道什么,诸如此类;想法多如牛毛。去构建这个东西,看看它在何处以及为何有缺陷。答案存在于老茧中,而非提示里。计划是建立一个日记项目,记录这次洞穴探险,并将其分为三个阶段。在每一个转折点,评估是否还值得继续,或者是否该止损,去做些不那么不负责任的事情。每个阶段都应该有一些实际的应用,满足个人对更务实项目的需求。这就像是路标,既避免迷失方向和过度消耗,也作为一种“好吧,这很蠢,但至少我得到了一件T恤”的防御机制,来对抗沉没成本谬误。既然是日记,也要记下经历中的其他部分,比如获得的爱情和逝去的生命。结果表明,后者要多得多。每次发布帖子时,都意味着有人去世了,帖子里面隐藏着一两篇悼文。 这三个阶段分别是“娱乐与游戏”(Arkanoid)、“挑战既定秩序”(Arcane)和“庇护所”(Arkham)。把它们拼在一起,你就得到了 Arcan。 ## 支线任务 为了弥补技能上的不足,并推迟那整个“长大成人”的事情,我寻求了些明智的建议。运气不好的是,我得到了与当地某位大牌计算机教授会面的机会;他是一个留着胡子的家伙,有些名声,对数学情有独钟,对系统思维有着敏锐的嗅觉。经过一番交流,我们一致认为,如果我把目标瞄准博士学位,那将是最好的(但也许对我来说并非如此)。他正好在经费中拨了一笔款。不是用来做调试,天哪,不是。那是留给指甲里有泥土的人干的,不是给手里拿粉笔的人的。但调试基本上就是安全,如果你眯着眼看的话——而安全要容易资助得多。监控和监视是同一枚安全硬币的两面,而电网作为SCADA(监控与数据采集)系统的一部分,确实喜欢一些监控。这基本上就是企业IT安全,但总是落后时代15-20年。 *智能微电网*将成为研究热点,并且要由从可疑来源采购的“商用现成”(COTS)组件构建,供应链肯定已遭破坏。这也意味着要把整个系统完全翻个底朝天,而监控所有那些东西更接近于我原本寻找的目标,所以好吧,这就是研究目标。关于这个岔路还有更多能说的,但我们没时间了,再说我也无法承受重温那些记忆所需的血液酒精浓度,所以让我们转向更有趣的话题。 ## 第一阶段 – 娱乐与游戏 这一阶段的目标是建立必要的基础设施——媒体处理管线、输入设备、权限分离以及一个将它们联系在一起的脚本API。那么,什么是一个有趣的目标应用,既能满足所有条件,又能驱动设计呢?一个非传统的模拟器前端。 ## 背景故事 我曾经痴迷于街机及其自然栖息地——往日的街机厅。现在依然如此,尽管我的兴趣已经更多地转向那些难以保存或复制的软性方面。目前的一个副业是一个运动模拟装置,只差几个焊点,我就能在自己地下室舒适地重温《Metal Hawk》(https://adb.arcadeitalia.net/dettaglio_mame.php?game_name=metlhawk)的辉煌了。那时我的兴趣在于模拟和模拟器开发的具体细节。从你面前的一个实物出发,一路走到一个可工作的软件复制品,这是一堂全面的计算机速成课。这包括逆向电路图以理解如何连线;转储代码和数据隐藏于其中的ROM;翻阅古老且不精确的CPU和DSP规格说明,然后发现并复制那些巧妙开发者所利用的所有小错误;编写并调试第一个有缺陷的处理器实现;破解定制的复制保护方案、异域密码学(https://media.recreativas.org/uploads/201911/ds5002fp.pdf)等等。在你甚至能看到真正的生命迹象之前,还有很长一段路要走。请穿舒适的鞋子。 街机模拟的黄金标准——MAME(https://mamedev.org/)——是一个巨大的艺术作品和开源文化遗产;它的代码应该成为任何认真对待计算机及其遗产的人的必读材料。我对它的看重程度远高于像Linux内核这样琐碎无趣的东西。不过,它在实际使用方面留下了一些想象空间,早期采用者社区通过编写图形启动器(即前端)来弥补这一点。 现在,我之前曾用翻垃圾箱找到的废料建造了自己的街机柜。那是在一个宽敞的16平方米公寓里。过程中我踩到了烙铁;热熔胶粘满了整只手的手指;被CRT的阳极电击过;在足够多的MDF粉尘中睡觉,以至于这成了个令人担忧的问题。 ## 第一个应用:Gridle 我定制的街机那部分“前端”只是一些游戏列表和一个光标。选择一项会启动一个模拟器并附带一些游戏特定设置,仅此而已。所以我开始编写一个新的,带齐所有花哨功能:视频预览、相关艺术和历史描述、音效和背景音乐、滤镜、视频录制和流媒体、存档管理、输入映射等等。基本上就是今天Steam所做的,只是不包括“购买和下载”部分——而显然这才是赚钱的地方。好吧。 非传统之处在于,不是简单地启动模拟器让它自行运作,而是前端脚本应该路由输入并控制合成效果。你知道,就像一个(伏笔)显示服务器。最终,Gridle让游戏在相应机柜的3D模型显示器部分运行;支持网络远程控制;屏幕键盘;动态LED控制;CRT和矢量显示模拟等等。我现在已经没有它运行时的录音或演示了,但代码(https://github.com/letoram/gridle)还在(真糟糕),这是一张它在机柜上运行的照片: 一张公寓内的照片,展示了一台自制的街机,旁边是一台《迷离时空》弹球机。机柜屏幕显示了一个“Joust”街机柜的3D模型,其显示器上有静态噪点,表明当前未运行。 它也在第一次公开演示的幻灯片中短暂出现: 演示幻灯片标题为“Arcan”,并列出了项目改进或定义的引擎部分。有两张截图,一张是运行游戏,另一张是劫持的《魔兽世界》实例,带有一些覆盖的控件。 https://speakerdeck.com/letoram/arcan?slide=13 这里的一个细节是《魔兽世界:熊猫人之谜》(大约2012年)登录界面的截图。它实际上通过一些进程注入技巧运行在WINE中,但被Arcan:Gridle合成在内,并添加了CRT效果。这是另一个支线任务,我仅使用注入的鼠标/键盘事件和计算机视觉来编写机器人,自动寻找游戏逻辑漏洞,而不触发“守望者”反作弊系统。那是另一个故事了——Gridle已经完成了它的使命;大约90%的实际API已经落地,IPC系统按预期工作,是时候更进一步了。 ## 第二个应用:Arcan Workbench (AWB) Gridle前端部分满足了我的游戏习惯,以及家庭影院PC上的电影和音乐收藏,但桌面电脑仍在Xorg上运行Window Maker,所以下一个目标就是这个。我的第二台电脑是Amiga 500,我对早期版本的“Workbench”窗口系统有些挥之不去的怀旧之情,它有着奇形怪状的图标和刺眼的配色方案。我能否重现它,但融入我日常工作所需的所有部分呢? 关于这个我没有太多要说的,因为演示视频还在: 最终,它通过NetSurf(https://www.netsurf-browser.org/)拥有原生网页浏览器;视频和录制工具可以通过VNC交互式共享标记的窗口;它原生运行在第一代树莓派的专有软件栈上;它仍然可移植到OSX、Windows和BSD,以及一个非公开的分支,该分支替换了大部分Android ~4.3的用户空间,并且能在一些索尼爱立信设备上工作。它成了我在家和工作的日常使用系统。 现在,是时候让项目进入下一阶段了。 ## 第二阶段 – 既定秩序 “娱乐与游戏”阶段是一段方便但短暂的复古计算罗曼史。方便,因为你可以不用想太多就做事。不那么浪漫的形式是你确实需要动动脑筋,去*理解*遗产,努力改进事物,避免最终只是缓慢地重复历史(https://wayland.freedesktop.org/)。你可以试图作弊,只是取笑前辈而不真正做工作——正如莱克特博士所说:“你看了,但你没看见。”缺点在于,这最终会回过头来咬你,而且会反复咬。真正的工作在于理解*为什么*某件事以某种方式运作,而不仅仅是复制*它*做了什么。 我再次踏上逆向之旅,投入战斗。在仔细研读了数百万行Xorg、Chromium和Xterm代码、反汇编、相关规范和邮件列表口水战后,我带着满身伤痕归来。或许也变得更聪明了,但我对此表示怀疑。选择这些目标是有意为之。对于不知情的人来说,这些东西看起来不同。它们并非如此。它们是同一“功能原型”和SCADA类系统的实例。我已在旧帖子中写过足够多的内容;如果要挑几篇,那就是: - Sunetting Cursed Terminal Emulation(https://arcan-fe.com/2025/01/27/sunsetting-cursed-terminal-emulation/) - Arcan vs Xorg: Feature Parity and Beyond(https://arcan-fe.com/2020/12/03/arcan-versus-xorg-feature-parity-and-beyond/) - Arcan as Operating System Design(https://arcan-fe.com/2021/09/20/arcan-as-operating-system-design/) - 以及 Arcan Explained – A browser for different webs(https://arcan-fe.com/2026/01/26/arcan-explained-a-browser-for-different-webs/) 这一阶段的实际应用更加多样,并且以一些不太明显的方式相互关联,所以让我们稍微分解一下。 ### 第一个应用:Durden Workbench已经待得太久了。偷瞄了一眼一位同事以平铺为中心的流程,短暂地觉得“这样更好”,但也存在一些粗糙之处——而我想要别的东西。碰巧的是,我有合适的打磨工具。我退后一步,思考了一下情况。所有窗口管理器都不过是一个事件触发器(比如按钮按下),然后以各种古怪的方式重新堆叠和重新配置漂亮的像素框。窗口系统提供的构建块将决定这件事有多困难。我通常对“万物皆XYZ”那套说辞深度过敏,尤其是“文件”这东西。管道与过滤器设计乍一看很吸引人,但随着管线中步骤的增加,它会迅速退化。在这里,它确实有道理,因为你不需要拼接太多操作来模仿任何正常的窗口管理方案。 于是这成了Durden应用的构建块。它是一个文件系统,其中的文件要么是值类型,比如`global/config/visual/font/size=14`,要么是动作,比如`target/window/clipboard/paste`。每个输入动作、装饰按钮等等都只绑定到路径。有一个面向用户的界面来导航和绑定东西,但同样可以通过socket挂载或访问;一个`bash`脚本加上`socat`就足以实现大多数传统方案。下面的老剪辑展示了使用界面内菜单导航并激活当前约700条路径之一的操作:slice-region to new window。工作区以平铺模式运行,媒体窗口设置为缩放适应、平铺分配、保持宽高比。 ## 第二个应用:Senseye Senseye项目是我很久以前真正想构建的东西的第一个迭代。最后的公开生命迹象在《Digging for Pixels》(https://arcan-fe.com/2015/05/24/digging-for-pixels/)和《Senseye 0.3》(https://arcan-fe.com/2015/10/01/senseye-0-3/)中有所涉及。它拥有*传感器*、*翻译器*和*表示器*。每个离散的*传感器*对数据源(如文件、进程内存或网络流)进行采样。它们附带基本控制,如定位、采样窗口大小控制、预处理滤镜等。*翻译器*接受某个大小和打包方式的采样缓冲区,并生成它的高级版本,如图像解码或机器码反汇编。由于这些解析器处理的是不受信任的数据,它们被严格沙箱化,任何崩溃都作为信号,表明应该进一步检查解析器漏洞。*表示器*是可视化和统计工具,如映射到直方图、彩色图案、2D双字母组、希尔伯特曲线、3D点云、与参考模式的差异比较等。 开发过程中,测试目标是像进程寄生虫(也称为无盘恶意软件)之类的东西,随机注入到托管Chrome进程的虚拟机中,所有进程都调谐到同一网站。任务就是仅使用上述工具试图定位受感染的进程。发布版本有一个用户界面,用一些胶带将AWB的碎片拼凑在一起。略微改进的版本 ca.

相似文章

Project Xanadu:更多回顾

Hacker News Top

回顾Project Xanadu的失败与遗产,强调硬件限制和缺乏实际迭代如何阻碍了其超文本愿景,并与像Gwern.net这样的现代系统形成对比。

唯有回首时

Lobsters Hottest

关于维护一个网站25年的个人反思,回顾从早期8位计算机到现代高性能系统的技术变革。

Artichoke Ruby 项目收尾

Hacker News Top

作者宣布基于 Rust 的 Ruby VM 实现 Artichoke Ruby 在历经六年后将逐步收尾并归档,并回顾了项目的起源、成就以及结束的原因。

Jason Scott 的 ASCII

Hacker News Top

Jason Scott 关于 ASCII 艺术和数字保存的新项目或纪录片。