- Zusammenfassung des Prozesses, die 30 Jahre alte Unix-Version von Lotus auf Linux zu portieren
Hintergrund
- Als Lotus-Fan wurde die bestehende DOS-Version per Reverse Engineering untersucht, ein Display-Treiber für DosEmu erstellt und so ausgeführt
- Allerdings waren die alten Add-ins von Lotus damit nicht möglich
Sie wurden in einer speziellen Sprache namens LPL entwickelt, und es gab weder Compiler noch SDK
→ Damals war das ein kostenpflichtiges Produkt für stolze 395 US-Dollar, und es ließ sich niemand finden, der es besaß
- Über einen SYSOP, der in den 90ern ein BBS betrieb, wurde dann aus einem Tape-Backup eine Warez-Kopie des SDK beschafft
→ ADK (Add-in Development Kit) for Lotus 1-2-3
- Auf diesem BBS gab es auch eine Warez-Version von Lotus 1-2-3 for Unix
→ Ein heute vergessenes Produkt, weil es sich wegen des bekannten konkurrierenden Unix-Office-Produkts SCO Professional kaum verkaufte
Lotus 1-2-3 for Unix
- Es bestand aus komprimierten Disk-Images im Format TD0, das in den 80ern verwendet wurde
- Mit
samdisk in rohe Disk-Images konvertiert
- Im Inhalt der Disketten wurde entdeckt, dass Objektdateien mit 1-2-3-Symbolen enthalten waren
→ Anfang der 90er wurde dlopen() noch nicht häufig verwendet, deshalb war so etwas nötig
Hacking
- Durch diese Objektdateien wurden viele offene Fragen zur internen Struktur von Lotus 1-2-3 geklärt
- Der in Entwicklung befindliche Treiber konnte dadurch deutlich mehr leisten
GNU objcopy
- Als diese Objektdateien kompiliert wurden, war noch nicht einmal die erste Version von Linux erschienen
- Mit
objcopy lassen sich COFF-Objektdateien aber in ELF umwandeln
Portierungsprobleme
System Calls
- Das erste Problem war, dass Linux und UNIX nicht dieselbe System-Call-Schnittstelle haben
- UNIX verwendet die
lcall7-Schnittstelle, daher wurde beschlossen, open() zu finden und stattdessen über glibc aufzurufen
→ Wenn dieses Symbol auf undefined gesetzt wird, erledigt der Linker das vielleicht von selbst?
→ objcopy arbeitet jedoch nicht so, daher wurde am Ende ein Tool namens coffsyrup geschrieben, das es zwangsweise entfernt
- Einige inkompatible Funktionen wurden mit
objcopy + coffsyrup vollständig angepasst
→ stat(), times(), uname(), fcntl(), ioctl()
Lizenzierung
- Natürlich läuft diese Software nicht ohne Lizenz
- Der Autor besitzt selbst eine originale Lotus-1-2-3-Box und ist rechtmäßiger Eigentümer, außerdem handelt es sich um 32 Jahre alte Abandonware
Daher geht er davon aus, dass selbst Entwickler Mitch Kapor nichts dagegen hätte, diese Lizenzprüfung zu umgehen
→ (Mitch Kapor ist bekannt als Entwickler von Lotus und außerdem Mitgründer der EFF.)
- In der Funktion
lic_init() läuft das Programm, wenn in der Datei LICENSE.000 das Datum sowie der Benutzer- und Systemname stehen, also wurde das entsprechend angepasst und die Prüfung so bestanden
Ergebnis
- Als Ergebnis wurde Lotus 1-2-3 auf ein neues OS, nämlich Linux, portiert
- Es gibt noch ein paar hakelige Stellen, aber es ist zu 100 % benutzbar
4 Kommentare
Mein Gott ... was zum ... krass
Unter Nerds sind die westlichen Nerds wohl die Nerds unter den Nerds ... und das stimmt wirklich ...
Wow … wirklich beeindruckende Leidenschaft. Ich selbst habe Lotus nicht so viel benutzt, sondern hauptsächlich Multiplan.
https://en.wikipedia.org/wiki/Multiplan
Von Multiplan gab es auch eine koreanische Version, daher war es damals das einzige Produkt, das Koreanisch ordentlich unterstützte.
Obwohl es 1994 eingestellt wurde, gab es in Korea noch viele Firmen, die es nutzten, deshalb wurde es, glaube ich, noch bis etwa 1997 verwendet.
Die Einstellung von Multiplan – das Ende der DOS-Ära
https://www.hellomarket.com/item/162929337
Ich habe einen Beitrag gefunden, in dem ein ungeöffnetes koreanisches Multiplan-Paket verkauft wird … wow …