LowEndBox - Cheap VPS, Hosting and Dedicated Server Deals

Lotus 1-2-3 Resurrected! -- Runs Natively On Linux After Hack By Tavis Ormandy!


Lotus 1-2-3 And The 1990s

Lotus 1-2-3 logo

Tavis Ormandy is a world class white hat hacker who works at Google Project Zero.

Hacker News (“HN”) is a news aggregator and comment board run by the well known startup incubator, Ycombinator.

A few days ago Tavis posted on HN about his own new blog post revealing yet another momentous hack: Tavis got Lotus 1-2-3 plus plugins running natively on Linux!

Lotus 1-2-3 is spreadsheet software originally written for the Microsoft Disk Operating System (“MS-DOS”). According to Wikipedia, Lotus 1-2-3 was first released in 1983.

Together with WordPerfect, Lotus 1-2-3 seemed entirely to rule the office software marketplace throughout the late 1980s and early 1990s. I remember back then going to a computer show. The show had a huge Lotus booth at one end of the display hall and a huge WordPerfect booth at the opposite end. Both gargantuan booths were filled with people and surrounded by activity.

The unexpected end of the Lotus/WordPerfect-on-MS-DOS Era arrived in the mid-1990s as Microsoft introduced and developed Windows and Word and Excel. At the time, I had my software running just fine on MS-DOS. I continued running MS-DOS for awhile, but then moved to Linux, then to NetBSD, and finally to Plan 9 from Bell Labs. Just imagining Lotus 1-2-3 running natively on Linux takes me way back in time. Beyond amazing!

Tavis’ Gets Lotus 1-2-3 Working Natively On Linux!

Previously Tavis ran Lotus 1-2-3 on Linux via the DOSEMU emulator. Tavis maintains a display driver on Github to help DOSEMU work smoothly with Lotus 1-2-3.

What still remained unrecovered, however, was Lotus 1-2-3 plugins, which enable extensibility. In his new blog post, Tavis says, about plugins, “in theory you could add support for modern spreadsheet functions or integrate with Google Finance or something!”

Recently, Tavis discovered an old copy of the Lotus 1-2-3 Software Development Kit (“SDK”). Using the SDK, Tavis reports having been able to build a few plugins written in Lotus’ special “LPL” language.

The next remarkable thing that happened was that Tavis recovered an old copy of Lotus 1-2-3 for UNIX. As discussed in detail in Tavis’ blog post, the UNIX copy of Lotus 1-2-3 was accompanied by “an original unstripped object file” containing “nearly 20,000 symbols including private symbols and debug information.” Debugging information often is stripped out of compiled object files in order to make the files smaller.

To get Lotus 1-2-3 working natively on Linux, Tavis needed to convert the old, recovered-from-UNIX Lotus object file to the contemporary Linux Executable and Linkable Format (“ELF”). After trying the conversion with GNU objcopy, Tavis ended up writing his own coffsyrup program plus a wrapper script to remove incompatible instructions. Additionally, Tavis had to devise a workaround to Lotus 1-2-3’s request for a license.

The result of all this is that, amazingly, Tavis got Lotus 1-2-3 working natively on modern Linux, no emulator needed. Tavis’ blog post ends with a triumphant Youtube video showing the output of make and then Lotus 1-2-3 running natively!


  1. As a vintage computing enthusiast, I will have to try this. I probably still remember “Lotus finger macros” – streams of letters that were keyboard shortcuts to menu items. Back in the day, people would say things like “so you do a slash fsa, then slash dfr and then…”

    May 26, 2022 @ 4:53 pm | Reply
  2. Hayden Sterling:

    Not to diminish this achievement, but this is a vastly inferior version of Lotus 123, compared to its final windows Release 9.8.2, dating from 2002.

    June 7, 2022 @ 11:04 am | Reply

Leave a Reply

Some notes on commenting on LowEndBox:

  • Do not use LowEndBox for support issues. Go to your hosting provider and issue a ticket there. Coming here saying "my VPS is down, what do I do?!" will only have your comments removed.
  • Akismet is used for spam detection. Some comments may be held temporarily for manual approval.
  • Use <pre>...</pre> to quote the output from your terminal/console, or consider using a pastebin service.

Your email address will not be published. Required fields are marked *