12 points par xguru 2022-05-25 | 4 commentaires | Partager sur WhatsApp
  • Récit du processus de portage vers Linux de la version Unix de Lotus, vieille de 30 ans

Contexte

  • Passionné par Lotus, l’auteur avait fait de la rétro-ingénierie de l’ancienne version DOS pour créer un pilote d’affichage pour DosEmu et l’exécuter
  • Mais les anciens add-ins de Lotus ne fonctionnaient pas
    → Ils étaient développés dans un langage spécial appelé LPL, et il n’existait ni compilateur ni SDK
    → À l’époque, c’était un produit payant à 395 $, et il n’a trouvé personne qui le possédait
  • Puis, via un SYSOP qui exploitait un BBS dans les années 1990, il a récupéré depuis une sauvegarde sur bande une copie warez du SDK
    → ADK (Add-in Development Kit) for Lotus 1-2-3
  • Sur ce BBS, il y avait aussi une version warez de Lotus 1-2-3 for Unix
    → Un produit tombé dans l’oubli car il s’était peu vendu face à SCO Professional, un concurrent bureautique Unix bien connu

Lotus 1-2-3 for Unix

  • Le tout était constitué d’images disque compressées au format TD0, utilisé dans les années 1980
  • Conversion en image disque brute avec samdisk
  • Dans le contenu des disques, découverte de fichiers objet contenant des symboles de 1-2-3
    → Au début des années 1990, dlopen() n’était pas encore très utilisé, donc ce genre de chose était nécessaire

Hacking

  • Grâce à ces fichiers objet, de nombreuses questions sur la structure interne de Lotus 1-2-3 ont trouvé une réponse
  • Le pilote en cours de développement a alors pu en faire davantage

GNU objcopy

  • Quand ces fichiers objet ont été compilés, la première version de Linux n’était même pas encore sortie
  • Mais objcopy permet de convertir des fichiers objet COFF en ELF

Problème de portage

Appels système

  • Premier problème : Linux et UNIX n’ont pas la même interface d’appels système
  • UNIX utilise l’interface lcall7, il a donc décidé de repérer open() pour le faire appeler via glibc
    → Et si on remplaçait ce symbole par un symbole indéfini, le linker ne ferait-il pas le reste tout seul ?
    → Mais objcopy ne fonctionne pas ainsi, donc il a fini par écrire un outil appelé coffsyrup pour les supprimer de force
  • Toutes les fonctions incompatibles ont été modifiées avec objcopy + coffsyrup
    stat(), times(), uname(), fcntl(), ioctl()

Licence

  • Bien sûr, ce logiciel ne fonctionne pas sans licence
  • L’auteur possède bien légalement la boîte de Lotus 1-2-3 et, comme il s’agit aussi d’un abandonware vieux de 32 ans,
    il pense que même son créateur, Mitch Kapor, ne lui reprocherait probablement pas de contourner cette vérification de licence
    → (Mitch Kapor est connu pour avoir créé Lotus et est aussi cofondateur de l’EFF.)
  • Dans la fonction lic_init(), il suffit que le fichier LICENSE.000 contienne une date ainsi qu’un nom d’utilisateur et de système pour que cela fonctionne, donc il a passé l’étape ainsi

Résultat

  • Au final, Lotus 1-2-3 a été porté sur un nouvel OS, Linux
  • Il reste encore quelques parties bancales, mais c’est utilisable à 100 %

4 commentaires

 
nuthatch 2022-05-25

Mon Dieu… mais qu’est-ce que c’est que ça… 😱

 
jjpark78 2022-05-25

On dit que parmi les passionnés, les passionnés occidentaux sont les plus impressionnants… et franchement, c’est vraiment vrai.

 
xguru 2022-05-25

Waouh… une passion vraiment impressionnante. Je n’ai pas tant utilisé Lotus que ça, j’utilisais surtout Multiplan.
https://en.wikipedia.org/wiki/Multiplan

Multiplan a aussi eu une version coréenne, et à l’époque c’était le seul produit à prendre correctement en charge le coréen.
Il a été abandonné en 1994, mais en Corée beaucoup d’entreprises l’utilisaient encore, donc je crois l’avoir vu utilisé jusqu’aux environs de 1997.
Arrêt de Multiplan — la fin de l’ère DOS

 
xguru 2022-05-25

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

J’ai trouvé une annonce qui vend un package Multiplan coréen encore sous blister… Waouh…