12 पॉइंट द्वारा xguru 2022-05-25 | 4 टिप्पणियां | WhatsApp पर शेयर करें
  • 30 साल पुराने Lotus के Unix वर्ज़न को Linux पर पोर्ट करने की प्रक्रिया का सार

पृष्ठभूमि

  • Lotus के प्रशंसक होने के कारण, लेखक ने मौजूदा DOS वर्ज़न का reverse engineering करके DosEmu के लिए एक display driver बनाया और उसे चलाया
  • लेकिन पुराने Lotus Add-in चल नहीं सके
  • वे LPL नाम की एक विशेष भाषा में विकसित किए गए थे, और उसके लिए compiler/SDK उपलब्ध नहीं था
    → उस समय यह $395 का paid product था, और किसी ऐसे व्यक्ति को ढूँढना संभव नहीं हुआ जिसके पास यह हो
  • फिर 90 के दशक में BBS चलाने वाले एक SYSOP के ज़रिए tape backup से SDK की Warez कॉपी मिली
    → Lotus 1-2-3 के लिए ADK(Add-in Development Kit)
  • उस BBS पर Lotus 1-2-3 for Unix का Warez वर्ज़न भी था
    → प्रसिद्ध Unix office प्रतिस्पर्धी उत्पाद SCO Professional की वजह से यह ज़्यादा नहीं बिका और भुला दिया गया उत्पाद था

Lotus 1-2-3 for Unix

  • यह TD0 नाम के 80 के दशक में इस्तेमाल होने वाले compressed disk image format में बना था
  • samdisk से इसे raw disk image में बदला गया
  • disk की सामग्री में 1-2-3 के symbols शामिल object files मिले
    → 90 के दशक की शुरुआत में dlopen() का ज़्यादा उपयोग नहीं होता था, इसलिए ऐसी चीज़ की ज़रूरत पड़ती थी

हैकिंग

  • इन object files की वजह से Lotus 1-2-3 की आंतरिक संरचना को लेकर मौजूद कई सवालों के जवाब मिले
  • इससे बनाया जा रहा driver और अधिक काम करने लगा

GNU objcopy

  • जब ये object files compile किए गए थे, तब Linux का पहला वर्ज़न भी जारी नहीं हुआ था
  • लेकिन objcopy से COFF object files को ELF में बदला जा सकता था

Porting Problem

System Calls

  • पहली समस्या यह थी कि Linux और UNIX का system call interface एक जैसा नहीं है
  • UNIX lcall7 interface का उपयोग करता है, इसलिए open() को ढूँढकर उसे glibc के ज़रिए call करने का निर्णय लिया गया
    → क्या इस symbol को undefined में बदल देने पर linker खुद ही संभाल लेगा?
    → लेकिन objcopy ऐसा काम नहीं करता, इसलिए अंततः ज़बरदस्ती हटाने के लिए coffsyrup नाम का एक टूल लिखा गया
  • असंगत कुछ functions को objcopy + coffsyrup से सब बदल दिया गया
    stat(), times(), uname(), fcntl(), ioctl()

Licensing

  • स्वाभाविक रूप से, यह software license के बिना नहीं चलता
  • लेखक Lotus 1-2-3 बॉक्स का वैध मालिक भी है, और यह 32 साल पुराना abandonware भी है, इसलिए
    शायद डेवलपर Mitch Kapor को भी इस license check को bypass करने पर आपत्ति न होती
    → (Mitch Kapor Lotus के डेवलपर के रूप में प्रसिद्ध हैं, और EFF के सह-संस्थापक भी हैं.)
  • lic_init() function में अगर LICENSE.000 फ़ाइल में तारीख और user/system name मौजूद हो तो यह काम करता है, इसलिए उन्हें मिलाकर check पास कर लिया गया!

Result

  • नतीजे में Lotus 1-2-3 को नए OS (Linux) पर पोर्ट कर लिया गया
  • अभी भी कुछ उलझे हुए हिस्से हैं, लेकिन यह 100% उपयोग करने योग्य है

4 टिप्पणियां

 
nuthatch 2022-05-25

हे भगवान... ये क्या है.. हदद

 
jjpark78 2022-05-25

कहते हैं, उस्तादों में भी असली उस्ताद विदेशी फैन होते हैं.. सच में, यह बात सही लगती है..

 
xguru 2022-05-25

वाह.. सच में कमाल का जुनून। मैंने Lotus का इतना ज़्यादा इस्तेमाल नहीं किया, मैं ज़्यादातर Multiplan इस्तेमाल करता था
https://en.wikipedia.org/wiki/Multiplan

Multiplan का एक Korean version भी आया था, इसलिए उस दौर में ठीक से Korean support देने वाला यही एकमात्र प्रोडक्ट था।
94 में यह बंद हो गया था, लेकिन कोरिया में कई कंपनियाँ अब भी इसका इस्तेमाल कर रही थीं, इसलिए लगता है कि यह लगभग 97 तक चला।
Multiplan का बंद होना - DOS युग का अंत

 
xguru 2022-05-25

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

मुझे एक पोस्ट मिली जो अनखुला Korean MultiPlan पैकेज बेच रही है.. उफ़..