- 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 को जोड़ने वाली यह एक प्रायोगिक उपलब्धि है
अभी कोई टिप्पणी नहीं है.