- 30年前のLotusのUnix版をLinuxへ移植した過程をまとめたもの
背景
- Lotusのファンだったため、既存のDOS版をリバースエンジニアリングしてDosEmu向けのディスプレイドライバを作り、動かしていた
- しかし昔のLotusのAdd-inは使えなかった。これはLPLという特殊言語で開発されており、コンパイラ/SDKがなかった
→ 当時は$395もする有料製品で、持っている人を見つけられなかった
- その後、90年代にBBSを運営していたSYSOPを通じて、テープバックアップからSDKのWarez版を入手
→ ADK(Add-in Development Kit) for Lotus 1-2-3
- そのBBSにはLotus 1-2-3 for UnixのWarez版もあった
→ 有名なUnix向けオフィス競合製品のSCO Professionalのせいであまり売れず、忘れられた製品
Lotus 1-2-3 for Unix
- TD0という80年代に使われていた圧縮ディスクイメージ形式で構成されていた
samdisk でrawディスクイメージに変換
- ディスク内容の中に、1-2-3のシンボルを含むobjectファイルが入っているのを発見
→ 90年代初頭にはdlopen()があまり使われていなかったため、こうしたものが必要だったとのこと
ハッキング
- このオブジェクトファイルによって、Lotus 1-2-3の内部構造について抱いていた多くの疑問が解けた
- 作っていたドライバが、さらに多くのことをできるようになった
GNU objcopy
- このオブジェクトファイルがコンパイルされた当時、Linuxの最初のバージョンはまだリリースされていなかった
- しかし
objcopyでCOFFオブジェクトファイルをELFへ変換できる
Porting Problem
System Calls
- 最初の問題は、LinuxとUNIXが同じシステムコールインターフェースを持っていないこと
- UNIXは
lcall7インターフェースを使うため、open()を見つけてglibc経由で呼び出すことにした
→ このシンボルをundefinedに変えてしまえば、リンカが勝手に処理してくれるのではないか?
→ しかしobjcopyはそのようには動作しなかったため、結局は強制的に削除するcoffsyrupというツールを作成
- 互換性のないいくつかの関数を、objcopy + coffsyrupでまとめて変更
→ stat(), times(), uname(), fcntl(), ioctl()
Licensing
- もちろんこのソフトウェアはライセンスなしでは動作しない
- 本人はLotus 1-2-3の箱入り製品も持つ正規所有者であり、しかも32年物のabandonwareでもあるため、
おそらく開発者のMitch Kaporもこのライセンスチェックをパスすることに文句は言わないだろうと考えた
→ (Mitch KaporはLotusの開発者として有名で、EFFの共同創設者でもあります。)
lic_init()関数では、LICENSE.000ファイルに日付とユーザー名/システム名があれば動作するため、それを合わせてパス
Result
- 結果としてLotus 1-2-3が新しいOS(Linux)へ移植された
- まだ少し問題はあるものの、100%使用可能
4件のコメント
まさか…これはいったい何なんだ… ガクブル
オタクの中でも最高なのは西洋オタクだというけれど……本当にその通りですね……
わあ……本当にすごい情熱ですね。私は Lotus はそこまで多く使っておらず、主に Multiplan を使っていました。
https://en.wikipedia.org/wiki/Multiplan
Multiplan は日本語版も出ていたので、あの時代に日本語がきちんとサポートされていたのはこの製品だけでした。
94年に販売終了になりましたが、国内では会社で使っているところが多く、97年ごろまで使っていた気がします。
Multiplan販売終了 - DOS時代の終焉
https://www.hellomarket.com/item/162929337
未開封の韓国語版マルチプランのパッケージを販売している投稿を見つけましたね.. うおお..