12 Punkte von xguru 2022-05-25 | 4 Kommentare | Auf WhatsApp teilen
  • 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

 
nuthatch 2022-05-25

Mein Gott ... was zum ... krass

 
jjpark78 2022-05-25

Unter Nerds sind die westlichen Nerds wohl die Nerds unter den Nerds ... und das stimmt wirklich ...

 
xguru 2022-05-25

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

 
xguru 2022-05-25

https://www.hellomarket.com/item/162929337

Ich habe einen Beitrag gefunden, in dem ein ungeöffnetes koreanisches Multiplan-Paket verkauft wird … wow …