12 pontos por xguru 2022-05-25 | 4 comentários | Compartilhar no WhatsApp
  • Resumo do processo de portar a versão Unix do Lotus, com 30 anos de idade, para Linux

Contexto

  • Como fã do Lotus, ele fez engenharia reversa da versão antiga para DOS e criou um driver de vídeo para o DosEmu para executá-la
  • Porém, os antigos add-ins do Lotus não eram possíveis
    Foram desenvolvidos em uma linguagem especial chamada LPL, e não havia compilador/SDK
    → Na época, era um produto pago que custava US$ 395, e ele não conseguiu encontrar ninguém que o tivesse
  • Então, por meio de um SYSOP que administrava uma BBS nos anos 90, conseguiu uma cópia warez do SDK a partir de um backup em fita
    → ADK (Add-in Development Kit) para Lotus 1-2-3
  • Nessa BBS também havia uma versão warez do Lotus 1-2-3 for Unix
    → Um produto esquecido porque vendeu pouco por causa do SCO Professional, um famoso concorrente de escritório para Unix

Lotus 1-2-3 for Unix

  • Era composto no formato TD0, um formato de imagem de disco comprimida usado nos anos 80
  • Convertido para imagem de disco raw com samdisk
  • Entre o conteúdo dos discos, foi encontrado um arquivo object contendo símbolos do 1-2-3
    → No começo dos anos 90, dlopen() ainda não era muito usado, então isso era necessário

Hacking

  • Graças a esse arquivo object, muitas dúvidas que ele tinha sobre a estrutura interna do Lotus 1-2-3 foram resolvidas
  • O driver que estava criando passou a poder fazer muito mais coisas

GNU objcopy

  • Quando esse arquivo object foi compilado, a primeira versão do Linux ainda nem tinha sido lançada
  • Mesmo assim, é possível converter arquivos object COFF para ELF com objcopy

Problema de portabilidade

Chamadas de sistema

  • O primeiro problema era que Linux e UNIX não têm a mesma interface de chamadas de sistema
  • Como o UNIX usa a interface lcall7, a ideia foi localizar open() e fazer a chamada via glibc
    → Se esse símbolo fosse alterado para undefined, será que o linker resolveria isso sozinho?
    → Mas o objcopy não funciona assim, então no fim ele escreveu uma ferramenta chamada coffsyrup para removê-lo à força
  • Várias funções incompatíveis foram alteradas com objcopy + coffsyrup
    stat(), times(), uname(), fcntl(), ioctl()

Licenciamento

  • Claro, esse software não funciona sem licença
  • Como ele é o proprietário legítimo de uma caixa do Lotus 1-2-3 e também se trata de abandonware com 32 anos,
    acha que talvez nem o próprio Mitch Kapor, o desenvolvedor, se importasse com ignorar essa verificação de licença
    → (Mitch Kapor é famoso por ter desenvolvido o Lotus e também é cofundador da EFF.)
  • Na função lic_init(), ele funciona se o arquivo LICENSE.000 contiver a data e o nome do usuário/sistema, então ele ajustou isso e passou na verificação!

Resultado

  • Como resultado, o Lotus 1-2-3 foi portado para um novo sistema operacional (Linux)
  • Ainda há algumas partes complicadas, mas ele já está 100% utilizável

4 comentários

 
nuthatch 2022-05-25

Nossa... mas que diabos é isso... pqp

 
jjpark78 2022-05-25

Dizem que, entre os geeks, os melhores são os geeks gringos... e realmente isso parece ser verdade...

 
xguru 2022-05-25

Uau... realmente uma paixão impressionante. Eu não usei tanto o Lotus; usava principalmente o Multiplan.
https://en.wikipedia.org/wiki/Multiplan

O Multiplan também teve uma versão em coreano, então, naquela época, este era o único produto com suporte adequado ao coreano.
Embora tenha sido descontinuado em 94, na Coreia ainda havia muitas empresas usando-o, então acho que continuou em uso até por volta de 97.
Descontinuação do Multiplan - o fim da era DOS

 
xguru 2022-05-25

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

Achei um post vendendo um pacote lacrado do Multiplan em coreano.. uau..