- 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 टिप्पणियां
हे भगवान... ये क्या है.. हदद
कहते हैं, उस्तादों में भी असली उस्ताद विदेशी फैन होते हैं.. सच में, यह बात सही लगती है..
वाह.. सच में कमाल का जुनून। मैंने Lotus का इतना ज़्यादा इस्तेमाल नहीं किया, मैं ज़्यादातर Multiplan इस्तेमाल करता था
https://en.wikipedia.org/wiki/Multiplan
Multiplan का एक Korean version भी आया था, इसलिए उस दौर में ठीक से Korean support देने वाला यही एकमात्र प्रोडक्ट था।
94 में यह बंद हो गया था, लेकिन कोरिया में कई कंपनियाँ अब भी इसका इस्तेमाल कर रही थीं, इसलिए लगता है कि यह लगभग 97 तक चला।
Multiplan का बंद होना - DOS युग का अंत
https://www.hellomarket.com/item/162929337
मुझे एक पोस्ट मिली जो अनखुला Korean MultiPlan पैकेज बेच रही है.. उफ़..