HN शोकेस: खुद लिखे गए hobby OS को आखिरकार vintage IBM ThinkPad पर चला लिया गया
(github.com/joexbayer)- RetrOS-32 i386 आर्किटेक्चर पर केंद्रित एक पूरी तरह custom 32-bit hobby operating system है, जिसमें graphics, multitasking और networking शामिल हैं
- kernel, utilities और build system C और Assembly में लिखे गए हैं, जबकि user-space applications C++ में लिखे गए हैं, और build के लिए Make तथा Docker का उपयोग होता है
- tested real hardware में Lenovo x240, Asus Eee PC series, Dell Optiplex 780, Samsung N150 Plus, Samsung NP-NC10, और IBM Thinkpad a21p शामिल हैं
- run करने के तरीके QEMU, copy.sh का v86, और real hardware boot को support करते हैं; real device पर
.isofile को USB या CD पर burn करके GRUB ISO के साथ चलाया जाता है - roadmap में bootloader, preemptive multithread scheduling, filesystem, graphical window manager, network stack, user-space threads, और TCP remote virtual terminal जैसे implementation-complete items सूचीबद्ध हैं
RetrOS-32 अवलोकन
- RetrOS-32 i386 आर्किटेक्चर पर केंद्रित 32-bit hobby operating system project है
- project description इसे graphics, multitasking और networking वाले 32-bit hobby operating system के रूप में बताती है
- शुरुआत की तारीख 12 मई 2022 दी गई है
- project page Project OSHub page पर उपलब्ध है
लॉगिन और उपयोगकर्ता
- default users system, admin, guest ये 3 हैं
- admin का password
adminहै, और guest का कोई password नहीं है - अभी admin और guest के बीच कोई अंतर नहीं है
- user को
admin create <username> <password>command से बनाया जा सकता है
implementation language और build configuration
- kernel, utilities, और build system C और Assembly में लिखे गए हैं
- user-space applications C++ में लिखे गए हैं
- compilation के लिए Make का उपयोग होता है
- cross-platform compilation के लिए Docker का उपयोग होता है
tested hardware
- tested real hardware की सूची इस प्रकार है
- Lenovo x240
- Asus Eee PC series
- Dell Optiplex 780
- Samsung N150 Plus
- Samsung NP-NC10
- IBM Thinkpad a21p
build और run करने का तरीका
- cross-platform environment में image file compile करने के लिए Docker और emulation के लिए QEMU चाहिए
- native compilation dependencies platform के अनुसार अलग हैं
- MacOS:
i386-elf-gcc,i386-elf-ld,i386-elf-g++ - Linux / WSL Ubuntu:
build-essential,gcc-multilib - अगर GRUB को bootloader के रूप में इस्तेमाल करना हो तो
grub2,xorriso,xxdभी चाहिए
- MacOS:
- Linux पर repository clone,
./debian.sh, Git submodule initialization,make compile,make img,make qemuके क्रम में build और run किया जाता है - MacOS पर build tools 32-bit x86 code पर निर्भर होने के कारण अभी native compilation संभव नहीं है, इसलिए Docker सबसे सरल तरीका है
- Windows पर Docker या WSL का उपयोग किया जाता है
- run करने के तीन तरीके हैं
- copy.sh v86 में
.imgfile को hard disk image के रूप में upload करना - QEMU में
make qemuयाqemu-system-i386 <image name>चलाना - real hardware में
.isofile को USB या CD पर burn करके GRUB ISO का उपयोग करना
- copy.sh v86 में
project structure
- repository structure kernel, drivers, graphics, network, filesystem, libraries, user-space apps, tests, और tools directories में बंटी हुई है
bootमें custom bootloader औरmultiboot.ldहैkernelमें मुख्य kernel source, architecture-specific code, और kernel thread code हैappsमें user-space applications औरlibcore.a,libgraphic.a,libnet.aहैंnetमें networking code है, औरfsमें filesystem से जुड़ा code हैtoolsमें build tools और scripts शामिल हैं
implemented items और बाकी काम
- boot से जुड़े items में custom bootloader, GRUB compatibility, और Stage 2 bootloader पूरा हो चुका है
- kernel और system features में निम्न शामिल हैं
- multithread preemptive scheduling
- GDT और TSS आधारित kernel/user-space separation
- interrupt handling
- IPC
- system calls
- user-space threads
- drivers और hardware features में PS/2 keyboard/mouse, PIT, VESA
640x480x8, RTC, Serial, E1000, PCI शामिल हैं - filesystem और storage features में ATA IDE driver, Ext2-जैसा filesystem, FAT16, और read/write पूरे हो चुके हैं
- FAT16 अधिकतम 32MB file को support करता है
- Atapi अभी अधूरा है
- memory features में 32-bit virtual memory, kernel
kalloc/kfree, और user-spacemalloc/freeशामिल हैं - graphics features में window manager, GFXLib, double framebuffer rendering, mouse events, dynamic resize, fullscreen, और widget library शामिल हैं
- Custom HTML to Widgets अभी अधूरा है
- network stack में Ethernet, IP, ARP, UDP, Socket API, Loopback interface, DHCP, DNS, TCP, और netcat-style commands पूरे हो चुके हैं
- Webserver, FTP, IRC, SSH, Telnet, HTTP, HTML अभी अधूरे हैं
- applications और tools में terminal, window server, process info, Finder, C compiler/bytecode interpreter, bytecode execution के लिए custom VM, syntax-highlighting editor, calculator, 3D game, text-mode Snake game, TCP remote virtual terminal, और LZ compression library शामिल हैं
- proposed features और known issues की पूरी सूची open issues में है
license और project links
- RetrOS-32 MIT License के तहत वितरित किया जाता है
- project link https://github.com/joexbayer/RetrOS-32 है
1 टिप्पणियां
Hacker News टिप्पणियाँ
ऐसे प्रोजेक्ट फीके AI से कहीं ज़्यादा अच्छे लगते हैं। शायद यह बिकने वाली चीज़ न हो, लेकिन यह एक तकनीकी व्यक्ति को अपनी skills रचनात्मक तरीके से दिखाते हुए दिखाता है
मैंने अपने late teens में hobby OS development काफी पढ़ा था, वह वाकई शानदार था, और आज भी कभी-कभी छोटे kernel बनाकर देखता हूँ। आख़िरी वाला एक छोटा RISC-V kernel था जो मेरे partner के लिए message print करता था
default system font का कोई ज़्यादा narrow variant होता तो अच्छा होता। उससे system बहुत ज़्यादा polished लगेगा, और कई जगहों पर अक्षरों को horizontal space की ज़्यादा ज़रूरत भी दिखती है
हर character की width घटानी चाहिए और character spacing भी जितनी हो सके उतनी कम करनी चाहिए। अभी जो font size और resolution इस्तेमाल हो रहा है, उसमें 1-pixel spacing काफी लगती है
मुझे font system की ज़्यादा जानकारी नहीं है, लेकिन मैंने मान लिया कि यह fixed-width bitmap font है। अगर codebase में बदलना बहुत मुश्किल हो तो ध्यान न दें
मैं भी कुछ समय से एक web OS site scratch से बना रहा हूँ, और हाल ही में पूरी font class फिर से लिखी है, इसलिए यह हिस्सा खास तौर पर नज़र आ रहा है
proper font rendering भी देखी है और वह todo list में है, लेकिन लगातार टालता रहा हूँ
“मैंने operating system बनाया!”
“हम्म, font अच्छा नहीं है”
यही तो HN की पराकाष्ठा लगती है
शानदार। अगर आज फिर से शुरू करते, तो क्या अलग करते, यह जानने की उत्सुकता है
low-level हिस्सों के लिए आपको कौन-सी language उपयुक्त लगती है, यह भी जानना चाहूँगा। जैसे C पर टिके रहेंगे, C++ का कोई simple subset इस्तेमाल करेंगे, या कोई newer language consider करेंगे
resources तो बहुत हैं, लेकिन दूसरों का code copy करने के बजाय project को लगातार interesting कैसे रखा, यह भी जानना चाहूँगा
शायद UNIX dependency भी कम करने की कोशिश करता
language के मामले में basic syntax और सीधे core पर जाने वाले style की वजह से C पसंद है। user-space applications के लिए दूसरी languages consider कर सकता हूँ
शुरू से ही सब कुछ खुद लिखना चाहता था, और software port न करना project का core था। कुल मिलाकर “code नहीं, ideas copy करो” वाला rule follow किया
1977 में Commodore PET 2001 इस्तेमाल करने वाले व्यक्ति के नज़रिए से भी यह वाकई शानदार है। KolibriOS और MenuetOSx64 के साथ प्रयोग कर रहा था, और अब खुद OS बनाने का मन हो रहा है। यह कर दिखाना कमाल है
project सच में impressive है और बधाई देना चाहता हूँ। teenage years से OS development पसंद रहा है, और ऐसी achievement को सच में implement होते देखना अच्छा लगता है
graphics subsystem कैसे initialize होता है, यह भी थोड़ा जानने की उत्सुकता है। शुभकामनाएँ
https://github.com/joexbayer/RetrOS-32/blob/development/grap...
https://github.com/joexbayer/RetrOS-32/blob/development/grap...
काश मैं भी ऐसे passion project के लिए समय निकाल पाता
practicality भूलकर, go-to-market strategy भूलकर, product-market fit भूलकर, बस बनाना और सीखना
उनमें से एक toy OS था, लेकिन low-level OS development असली job बन गई तो वह project रुक गया
मैं इस field में दशकों से हूँ और OS development सीखने की कोशिश कर रहा हूँ। FASM, NASM, FASM-G कुछ हद तक जानता हूँ
लेकिन assembler program के output को study करके समझना चाहता हूँ कि OS binary level पर सच में कैसे काम करता है
क्या आपने किसी specific architecture के instruction codes सीखे, device driver programs कैसे किए, और क्या आप खुद OS develop करने के steps summarize कर सकते हैं, यह जानना चाहूँगा
कुछ tutorials भी हैं, लेकिन उनमें अक्सर bugs होते हैं और अंत में उनके OS को फिर से बनाने जैसा हो जाना आसान है
instruction codes में इतना गहराई तक नहीं गया; C compiler बनाते समय जितना देखा, उतना ही, इसलिए बस सबसे common basic instructions जानता हूँ
https://forum.osdev.org/
https://wiki.osdev.org/Expanded_Main_Page
वाकई शानदार। काश early computing spirit और ज़्यादा लौटे, जब लोग application level से ज़्यादा computer itself से छेड़छाड़ करते थे
long-term hobby project के रूप में personal computer बनाने के बारे में सोचता रहा हूँ। ऐसा computer जिसमें पूरा software stack खुद बनाया हो, और system में जाने वाले हर bit का source पता हो
hardware पर उसी level का control रखना मुश्किल होगा, जब तक FPGA से इतना performance न मिल जाए कि सब चला सके, लेकिन कम से कम software तो संभव लगता है
अब तक यह unrealistically difficult लगता था, लेकिन आपने दिखा दिया कि यह संभव है। लगता है hobby C compiler भी implement कर रहे हैं: https://github.com/joexbayer/C-Compiler
C compiler इसी OS के लिए बनाया था और OS के अंदर चलता है। project बहुत बड़ा हो गया था, इसलिए इसे OS repository से अलग करना चाहता था, खासकर क्योंकि यह Linux पर भी चलता है
अच्छा होगा अगर आप और समझाएँ कि यह compiler operating system से कैसे interact करता है। खासकर structs जैसी features को कैसे handle करता है, और इस area की current limitations और planned improvements क्या हैं
structs को members के आधार पर size तय होने वाले memory regions की तरह handle करता हूँ, और member access उस region के अंदर offsets से होता है
अभी limitations काफी हैं, जैसे सिर्फ int और char हैं और switch statement भी नहीं है। standard C से सबसे बड़ा अंतर structs के अंदर functions allow करना, और struct function होने पर struct को implicitly function में pass करना है। ज्यादा details यहाँ देख सकते हैं:
https://github.com/joexbayer/C-Compiler
यहाँ देखे गए passion projects में से काफी समय बाद यह सबसे impressive में से एक है। जानना चाहूँगा कि आपने अपना C compiler इस्तेमाल करने का फैसला क्यों किया