7 पॉइंट द्वारा GN⁺ 2025-06-24 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • Rust में विकसित 64-बिट DOS-स्टाइल operating system, जिसमें kernel loading के लिए कुछ x86 assembly भी इस्तेमाल की गई है
  • VGA text mode (80x25), FAT12 filesystem, और SLIP के ज़रिए IPv4 network stack (ICMP/UDP/TCP/HTTP) का implementation
  • QEMU-आधारित virtual machine में चलाया और विकसित किया जाता है, और कुछ वास्तविक floppy media भी support करता है
  • साधारण text editor, TAB file/directory auto-completion, Snake game जैसी बुनियादी utilities शामिल हैं

आर्किटेक्चर और bootloader

  • लक्ष्य CPU x86_64 है, और भविष्य में ARM (aarch) architecture support की योजना है
  • शुरुआती version में खुद लिखा गया bootloader kernel को memory में लोड करके चलाता था
  • 64-बिट kernel में GRUB2 bootloader का उपयोग Long Mode में प्रवेश और Protected Mode transition को संभालने के लिए किया गया है
  • stage2 bootloader GDT, IDT, paging setup और Multiboot2 pointer allocation जैसे कार्य करता है
  • kernel shell command handler और विभिन्न custom components से बना है

QEMU में emulation और image

  • QEMU के माध्यम से virtual machine environment में development और testing की जाती है
  • ISO image बनाना: grub2-mkrescue और xorriso का उपयोग
  • FAT12 floppy image बनाना और mount support, जिसे वास्तविक device या QEMU flag (-fda fat.img) के साथ उपयोग किया जा सकता है

initialization प्रक्रिया

  • kernel में प्रवेश के समय Long Mode, Multiboot2 tags, FAT12 filesystem, VGA state आदि की जांच
  • ASCII art logo दिखाने के बाद, control shell loop को सौंप दिया जाता है

filesystem

  • FAT12 filesystem support: file read/write/search/delete, directory create/delete आदि का support
  • text file बनाना और overwrite करना, subdirectory support
  • fsck tool के साथ filesystem consistency check की सुविधा शामिल
  • आगे चलकर FAT32 support की भी योजना

network stack

  • SLIP protocol आधारित IPv4 packet send/receive
  • Ethernet frame processing support (testing अभी अधूरा)
  • ICMP Echo (Request/Reply), UDP, TCP (SYN/SYNACK state machine) आदि का support
  • साधारण HTTP server: static HTML page serve करता है

Snake game

  • Snake game built-in है, और भविष्य में multiplayer (P2P TCP) version की भी योजना है
  • game data (level, score) को text file में save और load किया जा सकता है
  • ESC से game बंद होता है, और score के अनुसार High Score save होता है

project का महत्व और उपयोग बिंदु

  • Rust में लिखा गया operating system होने के कारण, low-level software development में safety और productivity बढ़ने का व्यावहारिक अनुभव मिलता है
  • SLIP/ICMP testing, आसान deployment, और real hardware support के कारण यह OS experiments और custom implementation सीखने के लिए उपयुक्त है
  • Rust और x86 assembly से बने DOS-जैसे system structure का प्रत्यक्ष अनुभव किया जा सकता है

1 टिप्पणियां

 
GN⁺ 2025-06-24
Hacker News की राय
  • मेमोरी सेफ्टी की गारंटी देने वाली भाषा का उपयोग, x86_64 आधारित और Arm सपोर्ट भी योजना में, अपना नेटवर्किंग स्टैक मौजूद, CD और multiboot से बूट संभव, मेरा हॉबी प्रोजेक्ट DOS से बेहतर अनुभव देता है
    • DOS से प्रतिस्पर्धा करनी है तो Doom और BASIC चलाने का सपोर्ट ज़रूरी है, यही औपचारिक रूप से DOS-स्टाइल का बेसलाइन बनता है
    • Rust और x86 assembly का संयोजन, इसलिए अगर मेमोरी सेफ्टी लक्ष्य है तो क्या इसका वाकई व्यावहारिक मूल्य है, ऐसा विचार आता है; आजकल Rust कभी 3D printing की तरह ज़रूरत से ज़्यादा मार्केट किया गया महसूस होता है, इसके mainstream होने की प्रक्रिया में वास्तविक लाभ सीमित लगते हैं, और प्रोजेक्ट में पुराने software के साथ compatibility हो तो अच्छा है, वरना यह educational या enthusiast प्रोजेक्ट के ज़्यादा करीब लगता है; practical use तक पहुँचने में अभी लंबा रास्ता लगता है
  • नेटवर्किंग स्टैक में SLIP और slattach(1) का उपयोग होना मुझे सच में बहुत पसंद आया, जब मैंने खुद एक साधारण TCP/IP स्टैक बनाया था तब Linux में pty के जरिए SLIP कनेक्शन करके kernel के साथ जोड़ा था, macOS में भी पहले slattach(1) था लेकिन अब शायद हटा दिया गया है, क्या किसी ने macOS में SLIP इस्तेमाल करके cross-platform networking API बनाया है, यह जानना चाहता हूँ; विकल्प के तौर पर Linux में tun/tap और macOS में utun हैं, लेकिन SLIP कहीं ज़्यादा सरल है
  • x86 क्यों चुना गया, यह जानने की जिज्ञासा है; क्या इसलिए कि resources ज़्यादा हैं, या इसके अनोखे instruction format की वजह से, या boot sequence की complexity की वजह से, या फिर DOS को जस का तस follow करने की रणनीति है; कहा गया है कि ARM architecture का सपोर्ट भी जल्द आएगा, लेकिन DOS खुद hardware और software के काफ़ी घनिष्ठ जुड़ाव पर आधारित है, इसलिए कई architecture में सपोर्ट कैसे होगा, यह जानना दिलचस्प है
    • मैंने इस प्रोजेक्ट को सीधे नहीं देखा, लेकिन मेरा अनुमान है कि x86 platform में ऐतिहासिक legacy compatibility की वजह से बहुत तरह के interface पहले से built-in होते हैं, इसलिए बहुत पतला और सरल ‘DOS-जैसा OS’ बनाना आसान होता है; device tree parsing, MMU setup, PCI(e) जैसी जटिल bus handling की ज़रूरत नहीं पड़ती, इसलिए सरल तरीके से शुरुआत की जा सकती है; ARM में bootstrap खुद ही कठिन है, इसलिए simplicity बनाए रखनी हो तो अधिक constraints स्वीकारने पड़ते हैं, MMU के बिना बहुत कुछ सीमित हो जाता है, और BIOS interface भी नहीं होता, इसलिए x86 की तरह sector पढ़ना या key input का इंतज़ार करना आसान नहीं है
    • x86 चुनने की वजह यह है कि यह सिस्टम Turbo C में BIOS interrupt और inline assembly पर आधारित पहले संस्करण से निकला है; यह केवल MS-DOS की नकल करने के लिए नहीं है, लेकिन उससे काफ़ी प्रेरित है; कई architecture सपोर्ट करने की संभावना Rust compiler के target architecture specification feature की वजह से है, build से पहले target तय कर दें तो build process में वह सीधे लागू हो जाता है
  • मौजूदा UEFI environment और shell की जगह ऐसा FLOSS-आधारित 64-bit DOS-फॉर्मेट solution बेहतर होता, ऐसा लगता है; retro boot manager या system diagnostics tool के रूप में यह बढ़िया लगता, क्या यह EFI system partition से चल सकता है, यह जानना चाहूँगा; fat12 सपोर्ट की पुष्टि हुई है, लेकिन gpt सपोर्ट कैसा है, और क्या यह video hardware को सीधे नियंत्रित करता है या terminal-जैसा output देता है, यह भी जानना है
    • अभी EFI system partition से बूट की टेस्टिंग नहीं हुई है, केवल FAT12 filesystem को आधिकारिक सपोर्ट है (memory disk फीचर है, लेकिन अभी काम नहीं कर रहा), gpt फिलहाल unsupported है, FAT32 सपोर्ट को प्राथमिकता दी जा रही है (आमतौर पर flash disk FAT32 इस्तेमाल करती हैं), और आख़िरी सवाल के जवाब में OS सीधे VGA memory buffer में लिखता है, GRUB से 80x25 resolution मिलता है
  • यह प्रोजेक्ट मुझे काफ़ी शानदार लगा, बस “यह तो सिर्फ़ एक हॉबी है, Linux जितना बड़ा और प्रोफेशनल नहीं बनेगा” वाला मशहूर कथन छूट गया, इसका अफ़सोस है
  • क्या Czech उच्चारण चिह्नों के सपोर्ट की योजना है, यह जिज्ञासा है
    • इस संस्करण में केवल English सपोर्ट की योजना है, पहला संस्करण शुरू में Czech में बनाया गया था
  • क्या इसमें Rust में पूरी तरह नया लिखा गया VGA driver इस्तेमाल हो रहा है
  • क्या यह सही समझ है कि इसका स्टाइल DOS जैसा है लेकिन DOS compatibility नहीं है
    • यह विश्लेषण सही है, पहला संस्करण 16-bit था और MS-DOS के लगभग compatible बनने के लिए डिज़ाइन किया गया था, और मेरा मानना है कि अगर यह सिर्फ़ साधारण disk I/O संभाल सके, तो व्यापक अर्थ में इसे DOS सिस्टम की श्रेणी में रखा जा सकता है
    • यानी MS-DOS compatibility, Alley Cat या Dune 2, Doom चलाने के स्तर का मतलब
  • async runtime सपोर्ट के लिए event queue की ज़रूरत पर राय
    • एक परिपक्व event loop implementation के बारे में क्या विचार हैं
  • Crysis चल पाएगा या नहीं, इस पर मज़ेदार सवाल