• 13KiB आकार की एकल फ़ाइल में चलने वाला Snake गेम, जो Windows, Linux और ब्राउज़र—तीनों पर एक ही source से सपोर्ट करता है
  • साँप को नियंत्रित करके खाना खाना और दीवार से टकराने से बचना—यह क्लासिक Snake नियमों का पालन करता है, और इसमें स्कोर, लेवल और maze संरचना शामिल है
  • हर प्लेटफ़ॉर्म के लिए इसे C(WinAPI/X11) और JavaScript(HTML5 Canvas) में लागू किया गया है, और प्रत्येक को 3~5KiB स्तर तक compress और merge किया गया है
  • Windows में असामान्य PE header और apphelp mechanism, Linux में lzma compression और shell dropper, और ब्राउज़र में HTML/CSS tricks का उपयोग करके इसे चलाया जाता है
  • तीनों implementations को मिलाकर 13,312 bytes की एक single executable फ़ाइल बनाई गई, जो multi-platform executable संरचना की प्रायोगिक संभावना दिखाती है

Cosmopolitan libc से प्रेरित multi-platform प्रयास

  • Cosmopolitan libc एक toolkit है जो C source code को कई operating systems पर चलने वाले single binary में compile कर सकती है
    • Windows, Linux, BSD जैसे विभिन्न OS पर native execution को सपोर्ट करती है
  • GUI सपोर्ट न होने और binary size के बड़े होने की सीमा के कारण, लेखक ने 16KiB से छोटे video game को खुद बनाने की चुनौती चुनी
    • लक्ष्य था Windows, Linux और ब्राउज़र—तीनों पर चलने वाला single-source आधारित गेम बनाना

गेम की संरचना और नियम

  • गेम एक standard Snake game है, जिसे arrow keys या WASD से नियंत्रित किया जाता है
    • ESC से exit, R से reset, P से pause, और spacebar से start
  • हर बार खाना खाने पर स्कोर बढ़ता है; सामान्य खाना 10 points देता है, जबकि पीला खाना (15% संभावना) 20 points देता है
    • खाना कुछ समय बाद गायब हो जाता है, और गायब होने का समय साँप की speed (लंबाई के अनुपात में) पर निर्भर करता है
  • 10 खाने खाने पर अगला level आता है, और दीवारों की व्यवस्था random रूप से बदल जाती है
    • maze इस तरह बनाई जाती है कि खाने तक पहुँचने का रास्ता हमेशा मौजूद रहे
    • साँप की शुरुआती position भी random होती है, लेकिन उसे ऐसी दिशा में रखा जाता है जहाँ कम से कम 5 cells की खाली जगह हो
  • पूर्ण गेम फ़ाइल का आकार 13,772 bytes है

तीनों प्लेटफ़ॉर्म पर implementation का तरीका

  • Windows version WinAPI-आधारित C code में लिखी गई है, जिसमें compression script और decompressor stub शामिल हैं
    • PE header के MZ signature के बाद मनचाहे control वाले bytes का उपयोग करके shell script embed की जाती है
    • इससे यह फ़ाइल Windows executable होने के साथ-साथ Linux shell script के रूप में भी valid रहती है
    • पहली बार चलाने पर “The application was unable to start correctly (0xc0000005)” त्रुटि आ सकती है, लेकिन दोबारा चलाने पर यह सामान्य रूप से काम करती है
  • Linux version में lzma compression का उपयोग होता है, और छोटा shell dropper compressed ELF64 binary को extract और execute करता है
    • इसे फ़ाइल के आगे और पीछे के कुछ हिस्सों को छोड़कर चलने के लिए बनाया गया है
  • HTML version ब्राउज़र के उस व्यवहार का उपयोग करती है जिसमें वह फ़ाइल के अनावश्यक शुरुआती हिस्से को अनदेखा कर HTML को process करता है
    • CSS के ज़रिए अनावश्यक data को स्क्रीन पर दिखाई देने से रोका जाता है

single file संयोजन और संरचना

  • तीनों प्लेटफ़ॉर्म की फ़ाइलों को एक निश्चित क्रम में concatenate किया गया, ताकि हर environment सिर्फ अपने हिस्से को execute करे
    • Windows PE section, Linux ELF section, और ब्राउज़र HTML section को पहचानता है
  • अंतिम फ़ाइल का आकार 13,312 bytes है, और इस तरह तीनों environments में चलने वाला polyglot binary तैयार हुआ
  • फ़ाइल के भीतर Windows PE header, Linux के लिए LZMA compressed code, और HTML/CSS/JavaScript code क्रम से शामिल हैं
    • उदाहरण code block में MZ signature, ks marker, <html> tag, <script> block आदि क्रम से मौजूद हैं

तकनीकी महत्व

  • एक ही फ़ाइल में Windows, Linux और ब्राउज़र—तीनों को सपोर्ट करने वाली execution संरचना को लागू किया गया
  • PE, ELF और HTML formats के nested उपयोग से प्लेटफ़ॉर्म-विशिष्ट execution path को branch किया गया
  • 13KiB जैसे बेहद छोटे आकार में compression, format hacking और multi-platform execution को जोड़ने वाली यह एक प्रायोगिक उपलब्धि है

अभी कोई टिप्पणी नहीं है.

अभी कोई टिप्पणी नहीं है.