HN पर उपलब्ध: शुरुआत से लिखा गया Unix-जैसा ऑपरेटिंग सिस्टम Banan-OS
(github.com/Bananymous)banan-os
यह प्रोजेक्ट C++ में लिखा गया एक hobby operating system है, जो x86_64 और i686 architectures को support करता है। यह अन्य products या मौजूदा open source projects की तुलना में एक अनूठा learning experience प्रदान करता है।
फीचर्स
-
सामान्य
- Ring3 user space
- SMP (multiprocessing)
- linear framebuffer (VESA और GOP)
- network stack
- ELF executable loading
- AML interpreter (आंशिक)
- basic graphical environment
- terminal emulator
- status bar
- program launcher
- कुछ उपयोगी apps
- ELF dynamic linking
- copy-on-write memory
- file mapping
- anonymous mapping
-
ड्राइवर
- NVMe disk
- ATA (IDE, SATA) disk
- E1000 और E1000E NIC
- RTL8111/8168/8211/8411 NIC
- PS2 keyboard (सभी scancode sets)
- PS2 mouse
- USB
- keyboard
- mouse
- mass storage
- hub
- virtio devices (network, storage)
-
नेटवर्क
- ARP
- ICMP
- IPv4
- UDP
- TCP (आंशिक और bugs मौजूद हैं)
- Unix domain sockets
- SSL
-
फ़ाइल सिस्टम
- virtual file system
- Ext2
- FAT12/16/32
- Dev
- Ram
- Proc
- Sys
- 9P
-
बूटलोडर सपोर्ट
- GRUB
- custom BIOS bootloader
- custom UEFI bootloader
कोड संरचना
हर major component और library की अपनी subdirectory है। हर directory में एक include directory होती है, जिसमें उस component के सभी header files शामिल होते हैं। सभी headers को absolute paths के साथ include किया जाता है।
बिल्ड
आवश्यक पैकेज
-
apt (Ubuntu 22.04 पर test किया गया)
build-essential,git,ninja-build,texinfo,bison,flex,libgmp-dev,libmpfr-dev,libmpc-dev,parted,qemu-system-x86,cpu-checker
-
pacman
base-devel,git,wget,cmake,ninja,parted,qemu-system-x86
कंपाइल
-
इस operating system के लिए toolchain build करने के लिए आप यह command चला सकते हैं। यह step केवल एक बार करना होता है, और इसमें काफी समय लग सकता है।
./bos toolchain
-
operating system को build करने के लिए आप नीचे दिए गए commands में से कोई एक चला सकते हैं। disk image बनाने/modify करने के लिए root permissions चाहिए।
./bos qemu./bos qemu-nographic./bos qemu-debug./bos bochs
-
kernel या disk image को run किए बिना भी build किया जा सकता है।
./bos kernel./bos image
-
किसी दूसरी architecture के लिए build करने हेतु environment variable
BANAN_ARCH=_arch_सेट करें (e.g.BANAN_ARCH=i686)। -
bootloader बदलने के लिए environment variable
BANAN_BOOTLOADERसेट करें। supported values हैंBANAN(custom bootloader) औरGRUB। -
UEFI में run करने के लिए environment variable
BANAN_UEFI_BOOT=1सेट करें। साथ हीOVMF_PATHको सही OVMF पर सेट करना होगा (default/usr/share/ovmf/x64/OVMF.fd)। -
अगर disk image corrupt हो गई हो या आप नई बनाना चाहते हों, तो
_build/banan-os.img_को manually delete कर सकते हैं या यह command चला सकते हैं।./bos image-full
-
zsh के लिए shell completion script भी generate होती है। आप
_script/shell-completion/zsh/_bos_फ़ाइल को/usr/share/zsh/site-functions/में copy कर सकते हैं या.zshrcकेfpathमें_script/shell-completion/zsh_जोड़ सकते हैं।
योगदान
-
upstream एक personal server पर host किया गया है, इसलिए contributions को merge करना GitHub जितना सरल नहीं है। अगर आप GitHub पर PR भेजते हैं, तो diff डाउनलोड करके उसे manually apply किया जा सकता है। चाहें तो आपको private git server पर एक account दिया जा सकता है। इस स्थिति में email या Discord के जरिए संपर्क करें।
-
यह मुख्य रूप से एक learning experience है, इसलिए नए features जोड़ने से पहले email, Discord, issue आदि के जरिए पहले संपर्क करें। अगर आप बिना पूछे ऐसे काम पर PR भेजते हैं जिसे मैं पहले से plan कर रहा था, तो PR बंद किए जाने की संभावना ज्यादा है। bug fixes हमेशा स्वागतयोग्य हैं।
-
commit message को इस तरह format किया जाना चाहिए:
- पहली पंक्ति " Subject: Description " format में होनी चाहिए, जहाँ Subject प्रभावित area (Kernel, Shell, BuildSystem आदि) को दर्शाता है, और Description बदलाव का संक्षिप्त विवरण होना चाहिए। पहली पंक्ति 72 characters से अधिक नहीं होनी चाहिए।
- message body में बदलाव और बदलाव के कारण को विस्तार से समझाया जाना चाहिए।
-
सभी commits को
.pre-commit-config.yamlमें परिभाषित pre-commit hooks pass करने चाहिए। pre-commit setup करने के निर्देशों के लिए pre-commit.com देखें।
1 टिप्पणियां
Hacker News राय
cat doom1.wadटाइप करके सिस्टम को क्रैश कर दिया गयाPlatanOSसुझाया गया