एक वीडियो गेम जिसमें आप ऑपरेटिंग सिस्टम बनते हैं
(plbrault.com)- You’re the OS एक ऐसा गेम है जिसमें खिलाड़ी ऑपरेटिंग सिस्टम की भूमिका निभाता है—CPU core, process, memory page और swap space को मैनेज करता है और user को reboot करने से रोकता है
- बेसिक flow में idle process को CPU पर assign करना और active process को हटाना शामिल है; लंबे समय तक अनदेखे छोड़े गए process starvation level से गुजरकर terminate हो जाते हैं
- समय के साथ process की संख्या और memory pressure बढ़ता है, इसलिए disk पर मौजूद pages को RAM में वापस लाने वाली memory swapping भी खुद handle करनी पड़ती है
- implementation Python/Pygame पर आधारित है, और pygbag से WebAssembly build बनाकर इसे browser में भी चलाने योग्य बनाया गया है
- यह ऑपरेटिंग सिस्टम का सटीक simulation नहीं है, लेकिन premise स्पष्ट कर दिया जाए तो process scheduling और RAM की कमी वाली स्थितियों को समझाने में इस्तेमाल किया जा सकता है
ऑपरेटिंग सिस्टम बनने वाले गेम का आइडिया
- गेम इस कल्पना से शुरू होता है कि खिलाड़ी ऑपरेटिंग सिस्टम बनकर CPU core, process, memory page और swap space को मैनेज करता है
- लक्ष्य है कि user को system बहुत slow न लगे, इसके लिए processes को CPU time देना और जरूरत पड़ने पर memory pages को swap करना
- सरल 2D game के हिसाब से पूरे game engine के बजाय Pygame चुना गया
- Python को फिर से इस्तेमाल करके देखने की इच्छा भी चयन का कारण थी
- Pygame को pygbag के जरिए WebAssembly में compile किया जा सकता है, इसलिए browser execution के लिए यह सुविधाजनक है
- development period 8 महीनों के दौरान बिखरे हुए कुछ हफ्तों के आसपास था
Process scheduling और game over की शर्तें
- गेम का मुख्य interaction process और CPU management है
- idle process पर click करने से वह available CPU पर assign हो जाता है
- active process पर click करने से वह संबंधित CPU से हट जाता है
- idle process समय के साथ रंग और emoji से दिखाए जाने वाले 6 स्तरों के starvation level से गुजरता है
- अंतिम स्तर पर बहुत देर तक रहने पर user उस process को terminate कर देता है
- 10 processes terminate होने पर user, ऑपरेटिंग सिस्टम बने खिलाड़ी को reboot करता है और game खत्म हो जाता है
- लंबे समय तक टिके रहने के लिए हर process को सभी starvation levels पार करने से पहले पर्याप्त CPU time मिलना चाहिए
I/O और memory swapping
- active process I/O event का इंतजार करते हुए blocked state में जा सकता है
- blocked process CPU time waste करता है, इसलिए उसे CPU से हटाना बेहतर है
- I/O event को उस button पर click करके handle किया जाता है जिसका shape event आने पर बदलता है
- समय के साथ अधिक processes आते हैं और difficulty बढ़ती है
- एक समय के बाद सभी processes द्वारा इस्तेमाल की जा रही memory RAM से ज्यादा हो जाती है, इसलिए RAM और disk के बीच page swapping जरूरी हो जाती है
- अगर active process disk पर मौजूद page access करने की कोशिश करता है, तो process और संबंधित page blink करते हैं
- इस indication को देखकर जरूरी page को swap करना होता है
- disk पर मौजूद page का इंतजार कर रहा process तब तक blocked state में रहता है जब तक वह page RAM में वापस नहीं आ जाता
- अगर blocked state बहुत देर तक जारी रहे, तो वह starvation levels से गुजरता रहेगा और आखिरकार terminate हो सकता है
Difficulty और custom settings
- गेम में कई difficulty levels हैं
- difficulty CPU की संख्या, RAM capacity, शुरुआत में मौजूद processes की संख्या, I/O event probability आदि को प्रभावित करती है
- custom mode में इन settings को अलग-अलग स्वतंत्र रूप से adjust किया जा सकता है
शैक्षणिक मूल्य और सीमाएँ
- यह गेम सबसे पहले एक game है, और इसे realism से ज्यादा playability को प्राथमिकता देकर design किया गया है
- कुछ हिस्से वास्तविक ऑपरेटिंग सिस्टम को सटीक रूप से नहीं दिखाते
- खिलाड़ी से वास्तविक computer जितनी तेजी से react करने की उम्मीद नहीं की जाती
- processes वास्तविक आम processes की तुलना में बहुत कम memory pages इस्तेमाल करते हैं
- user द्वारा नए process अनंत रूप से चलाते रहने की संरचना difficulty बढ़ाने के लिए game mechanism है
- इसे शैक्षणिक उद्देश्य से नहीं बनाया गया, लेकिन अगर यह स्पष्ट कर दिया जाए कि यह सटीक depiction नहीं है, तो ऑपरेटिंग सिस्टम के principles introduce करने में इसका मूल्य हो सकता है
- process scheduling और memory swapping समझाने के example के रूप में इस्तेमाल किया जा सकता है
- CPU cores ज्यादा होने का मतलब क्या है और RAM कम पड़ने पर क्या होता है, यह दिखा सकता है
WebAssembly compilation और deployment
- WebAssembly compilation pygame-web documentation की वजह से उम्मीद से आसान था
- मुख्य steps pygbag install करना और documentation में दिए code changes apply करना थे
- सबसे बड़ी समस्या यह थी कि emoji rendering के लिए इस्तेमाल की गई pygame-emojis library pygbag के साथ काम नहीं कर रही थी
- इसकी जगह OpenMoji से SVG files download की गईं
- GIMP से size adjust करके PNG में export कर इस्तेमाल किया गया
- browser version मूल रूप से desktop version जैसा aspect ratio बनाए रखते हुए browser viewport के हिसाब से resize होता है
- अगर desktop version छोटा window size इस्तेमाल करे, तो screen stretched दिख सकती है
- यह गेम retro style का है, इसलिए pixelation बहुत गंभीर नहीं लगी
- गेम itch.io पर browser में खेला जा सकता है
- source code GitHub पर public है
1 टिप्पणियां
Hacker News की रायें
एक शानदार आइडिया के तौर पर defragmentation game दिमाग में आता है। मूल रूप से circular layout वाला Tetris, जिसमें अक्सर इस्तेमाल होने वाले data blocks को outer tracks पर, और पुरानी files या archive file types को inner tracks पर भेजने पर ज़्यादा points मिलें
पहले graphical defragmentation tools को जादू की तरह चलते देखना मुझे पसंद था, और अगर कोई defragmentation game आए तो मैं सच में उसे खेलना चाहूंगा
यह top-down 2D game है, और आप एक बड़े खाली warehouse में अकेले होते हैं। कुछ-कुछ अंतराल पर एक truck पीछे की तरफ कई चीज़ें उतारता है, और सामने counter पर कुछ लोग खास चीज़ें मांगते हैं। आपका काम warehouse में सामान को इस तरह रखना है कि requests को जितना हो सके उतनी जल्दी पूरा किया जा सके। रंग, function, नाम आदि—जो तरीका आपको सूट करे, उसके हिसाब से organize कर सकते हैं
जैसे-जैसे game आगे बढ़ता है, truck और ज़्यादा तरह-तरह की चीज़ें लाता है, आम तौर पर कई categories में आने वाली चीज़ें भी बढ़ती हैं, और requests भी धीरे-धीरे complex होती जाती हैं। आखिर में यह पूरे game के दौरान warehouse कैसे बदला, उसका timelapse दिखाता है, जिससे आप देख सकते हैं कि आपकी strategy समय के साथ कैसे evolve हुई
काफ़ी अच्छी तरह बनाया गया है और simple है। असल में HN comments में इसके developers में से एक के जरिए मुझे इसके बारे में पता चला
https://boardgamegeek.com/boardgame/376284/defrag
https://www.defraggame.com
मुझे याद है कि पहले मैंने कुछ पुराने games भी खेले थे जो इनसे भी ज़्यादा सीधे simulation जैसे थे, लेकिन पता नहीं कोई और उन्हें ढूंढ पाएगा या नहीं
Ender's Game की तरह, यह सोचना अच्छा लगता है कि top-level players अनजाने में कहीं critical infrastructure की memory allocate कर रहे हैं
https://xkcd.com/1897/
इस website का आधा वाक्य पढ़ते ही मैं पूरी तरह convinced हो गया
इस तरह की problem को समझने के सबसे अच्छे तरीकों में से एक है। “अब तुम memory manager हो। शुभकामनाएं।”
आइडिया वाकई अच्छा है। इसे cute बनाकर restaurant management simulation जैसा भी बनाया जा सकता है। बस restaurant computer है और customers resources हैं
Human Resource Machine भी इस मामले में शानदार था। मुझे याद है एक पल मैंने सोचा था, “रुको, क्या मैंने अभी-अभी linked list बनाई?”
सच कहूं तो मुझे लगता है कि इंसानी जीवन एक तरह के operating system जैसा है। हम हर दिन tasks, resources, input/output, storage, cache और state संभालते हुए जीते हैं
Dashboard operating system का ज़रूरी tool है, और human scale पर ये banks, to-do list, calendar, inbox जैसी चीज़ें हैं। इसलिए कई “self-improvement” concepts operating system की best practices में साफ़-साफ़ translate हो जाते हैं। जैसे allocation management के लिए FIFO या LIFO, deadlock तोड़ने के लिए pre-planning, concurrency management, और just-in-time garbage collection जैसी चीज़ें
[0] https://algorithmstoliveby.com/
उदाहरण के लिए, जब gears cutting-edge technology हुआ करते थे, तब लोग दिमाग में gears घूमने की तस्वीर बनाते थे और सोचने की क्रिया को gears की movement से compare करते थे। Cartoons वगैरह में मुझे लगता है कि आज भी कभी-कभी ऐसा expression दिख जाता है
https://en.m.wikipedia.org/wiki/Autonomic_nervous_system
संदर्भ के लिए, यह 30 सितंबर को HN पर आया था लेकिन बिल्कुल attention नहीं मिला, और पोस्ट करने वाले ने अपना comment भी delete कर दिया
उस समय भी मैंने लिखा था, लेकिन यह सचमुच अच्छा concept है। इसमें levels जोड़ना अच्छा रहेगा। उदाहरण के लिए किसी interesting product के अंदर microcontroller, smartphone, SaaS company का load balancer या API server—इस तरह levels बांटे जाएं तो concepts एक-एक करके introduce किए जा सकते हैं। तब यह university-level operating systems course बन जाएगा
Automation के लिए थोड़ी programming डालें, और operating system cache algorithms तक गहराई से जाएं तो अच्छा होगा। LRU अच्छा है। यह ऐसा course होता जिसे high school खत्म होने से पहले पूरा किया जा सकता था
https://news.ycombinator.com/item?id=36938032
आइडिया शानदार है, लेकिन मेरे लिए बहुत मुश्किल। सामान्य मोड में भी गेम शुरू होने के 20 सेकंड के भीतर मैं पागलों की तरह क्लिक करने लगता हूँ, और अटकी हुई प्रक्रियाओं को घुमाने पर भी लाल प्रक्रियाएँ जमा होती जाती हैं
कुछ प्रक्रियाएँ इसलिए मर गईं क्योंकि I/O event आखिर तक आया ही नहीं। आसान मोड भी वैसा ही लगता है, या शायद और भी मुश्किल। मैं उस बिंदु तक पहुँच भी नहीं पाता जहाँ memory समस्या बनती है, और इस रफ्तार पर पहुँचने का मन भी नहीं है
हो सकता है मैं बूढ़ा हो गया हूँ, और मैं समझता हूँ कि operating system बनना तनावपूर्ण है, लेकिन मेरा काम पहले से ही तनावपूर्ण है। मुझे एक और काम नहीं चाहिए
अगर शुरुआत आसान हो और धीरे-धीरे ऊपर जाए, लेकिन इतनी उदार गति पर कि मेरे comfort zone के ठीक बाहर ही रहे, तो यह बहुत मजेदार गेम हो सकता है
ऐसे गेम्स का भविष्य मजबूत है
Unity या Unreal जैसे game engines जो दे सकते हैं, उसके दायरे से आगे जाकर innovation करने वाले गेम, design के लिहाज से आजकल आने वाली चीजों की तुलना में सफलता की अधिक संभावना वाली दिशा में जा रहे हैं
अगर आप ऐसा ultra-nerd गेम बनाते हैं जो engine users के छूने की पहुँच से बाहर के क्षेत्र में है, तो आप अलग league में खड़े होते हैं। गेम अस्त-व्यस्त दिखे, तो भी अगर मजेदार और usable है तो काफी है
इंडी गेम 5 साल पहले वाले अर्थ में indie game के रूप में मर चुका है। अब ऐसी चीजें ही नए indie game हैं। GG. संदर्भ के लिए, मैं एक असफल indie developer हूँ जिसने 2 से अधिक commercial titles निकाले हैं
अफसोस है कि Zachtronics रुक गया। वे हमेशा आगे थे
और यह गेम Unity में भी बनाया जा सकता है
अगर मतलब है “एक अप्रत्याशित breakthrough बनकर गेम्स की दिशा बदल देने वाला hit होना”, तो दोनों तरफ probability बेहद कम है, लेकिन box के बाहर वाले game में वह probability ज्यादा हो सकती है
home run की probability ज्यादा है, लेकिन out होने की probability भी ज्यादा है, और hit लगाने की probability कम है
हाल के वर्षों में भी कई technical nerd games आए हैं, लेकिन ऐसा कोई नहीं जिसे hit कहा जा सके। शायद आप अपना game बना सकते हैं, लेकिन audience स्वभावतः छोटी होती है, इसलिए सफलता की ceiling भी सीमित रहती है। मुझे नहीं लगता कि आगे यह बदलेगा
बल्कि उल्टा होने की संभावना ज्यादा है। युवा पीढ़ी कम nerdy होती दिख रही है, और low-level topics व technology से और दूर जा रही है
जैसे-जैसे game high utilization पर कठिन होता जाए, milestones या performance goals हासिल करके मिले tokens से छोटी repetitive tasks को automate करने वाले upgrades “खरीदने” की सुविधा होनी चाहिए। Universal Paperclips जैसा अहसास
फिर game सरल automation में बाधा डालने वाले pathological workloads फेंके, जिन्हें user को manually हल करना पड़े। तब user थोड़ा बेहतर automation खरीदता है, लेकिन फिर थोड़ा और pathological workload उसे रोक देता है। इस तरह gameplay loop पूरा होता है
जल्द ही operating system काम automate करने के लिए scripting language देगा, है न?
आह, समझ गया...
बहुत शानदार। पिछले हफ्ते पोस्ट हुए एक गेम की याद आ गई। क्या वह Defcon से जुड़ा था? Tetris blocks जैसी squares गिरती थीं जिनमें operation codes होते थे, और user को Rube Goldberg जैसी sequences लगानी पड़ती थीं ताकि सबसे बड़ा number “score” memory register में मिलाया जा सके
https://news.ycombinator.com/item?id=37083309