Lotus 1-2-3 与 20 世纪 90 年代

Tavis Ormandy是一位世界级的白帽黑客,就职于Google Project Zero。
Hacker News(“HN”)是由知名创业孵化器Y Combinator 运营的新闻聚合器和评论区。
几天前,Tavis 在 HN 上发布了一篇关于他自己的新博客文章,揭示了另一个重大的黑客技术:Tavis 让 Lotus 1-2-3 及其插件在 Linux上原生运行!
Lotus 1-2-3是一款电子表格软件,最初是为微软磁盘操作系统(“MS-DOS”)编写的。据维基百科记载,Lotus 1-2-3 于 1983 年首次发布。
在20世纪80年代末和90年代初,Lotus 1-2-3与WordPerfect一起,似乎完全统治了办公软件市场。我记得当时去参加一个电脑展。展厅一端是巨大的Lotus展位,另一端是巨大的WordPerfect展位。两个庞大的展位都挤满了人,热闹非凡。
Lotus/WordPerfect 在 MS-DOS 上的时代在 20 世纪 90 年代中期意外终结,当时微软推出了 Windows 以及 Word 和 Excel。那时,我的软件在 MS-DOS 上运行得非常流畅。我继续使用 MS-DOS 一段时间后,转而使用Linux,然后是NetBSD,最后是贝尔实验室的 Plan 9。想象一下 Lotus 1-2-3 在 Linux 上原生运行,真是令人感慨万千,仿佛回到了过去。简直太棒了!
Tavis 成功让 Lotus 1-2-3 在 Linux 上原生运行!
之前,Tavis 通过DOSEMU 模拟器在 Linux 系统上运行 Lotus 1-2-3。Tavis在 GitHub 上维护着一个显示驱动程序,以帮助 DOSEMU 与 Lotus 1-2-3 流畅运行。
然而,Lotus 1-2-3 的插件仍然未能恢复,而插件正是实现扩展性的关键。Tavis 在他的新博文中谈到插件时说:“理论上,你可以添加对现代电子表格函数的支持,或者与 Google Finance 集成等等!”
最近,Tavis 发现了一份旧版的 Lotus 1-2-3软件开发工具包(“SDK”)。据 Tavis 称,他利用该 SDK 构建了一些用 Lotus 特有的“LPL”语言编写的插件。
接下来发生的一件令人惊讶的事是,Tavis 找回了一份旧版的 Lotus 1-2-3 UNIX 版本。正如 Tavis 在他的博客文章中详细描述的那样,这份 UNIX 版 Lotus 1-2-3 附带了一个“原始的未剥离符号表的目标文件”,其中包含“近 20,000 个符号,包括私有符号和调试信息”。为了减小编译后的目标文件大小,调试信息通常会被剥离。
为了让 Lotus 1-2-3 在 Linux 上原生运行,Tavis 需要将之前从 UNIX 系统恢复的 Lotus 目标文件转换为现代的 Linux可执行文件和链接文件格式 (ELF)。在尝试使用GNU objcopy 进行转换后, Tavis 最终编写了自己的coffsyrup程序以及一个用于移除不兼容指令的包装脚本。此外,Tavis 还必须找到一种变通方法来应对 Lotus 1-2-3 的许可证请求。
这一切最终带来了一个惊人的结果:Tavis 成功地在现代 Linux 系统上原生运行了 Lotus 1-2-3,无需任何模拟器。Tavis 的博客文章以一段令人振奋的 YouTube 视频结尾,视频展示了make 命令的输出结果,以及 Lotus 1-2-3 的原生运行画面!