Some days ago, Tavis Ormandy‘s work aroused a lot of interest in the world of retrocomputing. The developer has indeed managed to patch the UNIX System V version of Lotus 1-2-3, released 32 years ago, in order to run it natively on Linux, without emulation! All aspects of this work are detailed in this article, written by Tavis himself. The author has also released his work in a dedicated repository.
For those unfamiliar with it, Lotus 1-2-3 is a spreadsheet that also integrates database and graph functionalites. Developed by Lotus starting in 1983, it soon became the de facto standard for this kind of applications in the PC / DOS environment, only to be superseded by Microsoft Excel on Windows.
I fondly remember using Lotus 1-2-3 for DOS in late middle school and in high school. In particular, albeit somewhat improperly, I used it as a word processor to write the research for my eighth grade exam. However, until a few days ago, I was not aware of the existence of a version for the UNIX OS. For these reasons, I was enthusiastic about the Linux port and I tried my hand at the build. The procedure is well described in the repository readme file; however I ran into a couple of problems, fortunately they can be solved quite easily.
Having a PC with Windows 10 available, I decided to perform the build procedure on the Debian 10 distribution that I had installed some time ago in the WSL (Windows Subsystem for Linux) 2 environment. Unfortunately, on this distribution the toolchain is rather old and I could not complete the build. Tavis kindly suggested to try either with the testing version of Debian or with Ubuntu; I chose to go for the latter.
Lotus 1-2-3 on Linux (WSL): the step-by-step procedure
From the Windows Command Prompt, I installed the Ubuntu distro version (20.04 LTS Focal Fossa) currently available in WSL:
wsl --install -d Ubuntu
After configuring user name and password, I updated the system with:
sudo apt-get update
Then, I installed prerequisites with:
sudo apt-get install build-essential
sudo apt-get install gcc-multilib
sudo apt-get install lib32ncurses-dev
After that, I downloaded the 123elf repository from GitHub:
git clone https://github.com/taviso/123elf.git
Then, I entered the project directory and downloaded the Lotus 1-2-3 for UNIX floppy disk images:
At this point, my attempt to run the script for compiling the
binutils package failed, due to missing
makeinfo. I solved the problem by installing
sudo apt install texinfo
After that, I could finally download and biuld the
Next, I copied the following tools:
ld-new (note: the latter must be renamed to:
ld) to current project directory:
cp binutils-2.38/binutils/objcopy .
cp binutils-2.38/binutils/objdump .
cp binutils-2.38/ld/ld-new .
mv ld-new ld
Before launching the build, the content of the previously downloaded floppy disk images must be extracted:
Finally, the build can be started:
If all goes well, Lotus 1-2-3 can be run with: