1 पॉइंट द्वारा GN⁺ 2024-07-15 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • Fusion OS x86-64 के लिए एक hobby operating system है, जिसमें implementation language के रूप में Nim का उपयोग किया गया है
  • वर्तमान में लागू किए गए features UEFI bootloader, memory management, task management, system calls, IPC, और hardware support में विभाजित हैं
  • memory और task management में demand paging, preemptive multitasking, priority-based scheduling, और ELF loader शामिल हैं
  • runtime environment फिलहाल QEMU है, और build के लिए Nim, LLVM के clang·lld, और Just की आवश्यकता है
  • future plans में capability-based security, disk I/O, file system, shell, GUI, और networking शामिल हैं

Fusion OS का overview

  • Fusion x86-64 के लिए एक hobby operating system है और Nim में implement किया गया है
  • development process को 0xc0ffee.netlify.app पर document किया गया है
  • screenshots section में UEFI bootloader, kernel booting और execution screens शामिल हैं
  • GUI screenshot graphics branch की screen है, और वह branch अभी work in progress है

वर्तमान में लागू किए गए features

  • Boot

    • UEFI Bootloader implement किया गया है
  • Memory management

    • Single Address Space structure वाला Higher Half Kernel
    • Physical Memory Manager
    • Virtual Memory Manager
    • Demand Paging
  • Task management

    • Kernel Tasks
    • User Mode Tasks
    • Preemptive Multitasking
    • Priority-based Scheduling
    • Demand Paged और Relocation को support करने वाला ELF Loader
  • System calls

    • System Call Interface
    • User Mode Library
  • IPC

    • Channel-based IPC
    • Message Passing
  • Hardware

    • PCI Device Enumeration
    • ACPI Configuration
    • Local APIC Timer
    • I/O APIC Interrupts
    • PS/2 Keyboard Driver
    • Bochs Graphics Adapter Driver

Planned features

  • Capability-based Security
  • Event-based Task State Machines
  • Disk I/O
  • File System
  • Shell
  • GUI
  • Networking

Build और run

  • build के लिए Nim, LLVM के clang·lld, और Just की आवश्यकता है
  • clang और lld binaries PATH में होनी चाहिए
    • अगर वे PATH में नहीं हैं, तो .env file में संबंधित binary paths specify किए जा सकते हैं
  • build command इस प्रकार है
just build
  • Fusion फिलहाल QEMU में चलता है
  • run command इस प्रकार है
just run

License

  • license MIT है

1 टिप्पणियां

 
GN⁺ 2024-07-15
Hacker News की टिप्पणियां
  • मैं लेखक हूं। कोई सवाल हो तो जवाब दूंगा

    • क्या Nim के garbage collector ने कभी मुश्किलें पैदा की हैं?
      अगर नहीं, तो क्या आपको लगता है कि यह Nim के खास non-stop-the-world GC की वजह से है?
      https://nim-lang.org/1.4.0/gc.html
    • प्रोजेक्ट में सबसे सिरदर्द वाला हिस्सा क्या था? और जो कोई शुरुआत से operating system लिखना चाहता है, उसके लिए कोई सलाह?
    • screenshots कहां हैं?
    • मैं Nim इस्तेमाल नहीं करता, लेकिन इसे एक दिलचस्प भाषा मानता हूं। मैंने पहले यह शिकायत देखी है कि पुराने projects को फिर से compile करते समय हर बार बदलाव करने पड़ते थे, इसलिए जानना चाहता हूं कि compatibility तोड़ने वाले changes कितनी बार और कितनी गंभीरता से होते हैं
    • आपने Swift के बजाय Nim क्यों चुना?
      अभी दोनों काफी मिलते-जुलते लगते हैं, और लगता है Swift की real-world validation ज्यादा हुई है
  • ब्लॉग और docs शानदार हैं। दिखाने और समझाने के बीच बहुत अच्छा संतुलन है, और इसे शेयर करने के लिए धन्यवाद

    • लिखने की प्रक्रिया ने design और implementation को बेहतर बनाने में कई बार मदद की। लेखन मुझे अपनी assumptions पर सवाल उठाने के लिए मजबूर करता है, और खुद से पूछने पर मजबूर करता है कि reader समझ पाएगा या नहीं कि ये decisions क्यों लिए गए
      जो भी करता हूं उसे justify करना पड़ता है, इसलिए यह unnecessary complexity हटाने और ज्यादा जरूरी हिस्सों पर focus करने में मदद करता है
  • Fusion लेखक का development journal:
    https://0xc0ffee.netlify.app/osdev/01-intro.html

  • ऐसी चीजें देखकर अच्छा लगता है। मैं कई वर्षों से Nim ecosystem से कभी-कभार जुड़ा रहा हूं, और यह देखकर खुशी है कि यह छोटा और मजेदार project लगातार आगे बढ़ रहा है

  • बढ़िया है। मैंने ELF module खोला, और यह पढ़ने में आसान था, इसलिए मजा आया
    कभी Nim में real-time operating system लिखकर देखना चाहता हूं। मुझे Nim में embedded programs लिखना पसंद है, इसलिए RTOS बनाना भी मजेदार होगा

    • अगर आप RTOS बनाने का फैसला करें, तो मैं जरूर follow करना चाहूंगा
    • ELF एक बहुत simple file format है। अगर इसे पढ़ना मुश्किल होता, तो मुझे बल्कि हैरानी होती
  • Nim क्या है, और Fusion के overall design goals क्या हैं?
    उम्मीद है यह बहुत basic सवाल नहीं है। मेरे पास कोई background knowledge नहीं है, इसलिए अच्छा होगा अगर कोई समझा दे

    • जैसा दूसरों ने कहा, Nim एक statically typed programming language है और C, C++, JavaScript में compile होती है। C के साथ interoperability अच्छी है, इसलिए system programming आसान हो जाती है
      Nim क्यों, इस बारे में हमने साथ बनाई site पर यह लिखा है:

      Nim क्यों? Nim उन कुछ भाषाओं में से एक है जो deterministic memory management, destructors, move semantics के साथ low-level system programming संभव बनाती है। garbage collector optional है। statically typed होने से type safety भी ज्यादा है। operating system development के लिए जरूरी inline assembly भी support करती है। दूसरे options C, C++, Rust, Zig हैं। ये सभी बेहतरीन languages हैं, लेकिन simplicity, elegance और performance की वजह से हमने Nim चुना।
      Fusion के पूरे design goals काफी ambitious हैं, और उसी page पर listed हैं। हम एक और Unix-like operating system नहीं बनाना चाहते, बल्कि operating system design की fundamental problems पर experiment करना चाहते हैं, जैसे single address space और protection के लिए capability-based security
      एक और चीज जिसे explore करना है, वह है processes और tasks को कैसे model किया जाए। मेरा मानना है कि इन्हें ऐसे state machines के रूप में model किया जाना चाहिए जो statically typed channels के जरिए आपस में communicate करते हैं। यह नया idea नहीं है; Singularity OS में पहले ही आजमाया जा चुका है
      kernel में channels और user space में channels इस्तेमाल करने के लिए बुनियादी support है, लेकिन अभी शुरुआती stage है
      [0] https://0xc0ffee.netlify.app/osdev/01-intro.html
      [1] https://en.wikipedia.org/wiki/Singularity_(operating_system)

    • Nim एक शानदार भाषा है जो Ada और Python से प्रेरित लगती है
    • project docs में लिखा है:
      https://0xc0ffee.netlify.app/osdev/01-intro.html
  • Nim projects और ज्यादा दिखें तो खुशी होगी। मैं मुख्य रूप से Python और JavaScript इस्तेमाल करता हूं, लेकिन एक और modern, तेज statically typed language जानने के फायदे में रुचि है
    Go, Rust, Zig, Nim में मुझे Nim सबसे ज्यादा पसंद है। code पढ़ते समय syntax noise कम होने के अर्थ में यह सबसे ज्यादा Python-जैसी लगती है
    नए code को prototype करते समय मुझे REPL इस्तेमाल करना बहुत पसंद है, और INim यह काम अच्छी तरह करता है
    अभी Nim की सबसे बड़ी समस्या community size का छोटा होना है। इसलिए usable और maintained libraries की दुनिया दूसरी language communities से छोटी है। यह chicken-and-egg problem है, लेकिन ज्यादा developers, जिनमें मैं भी शामिल हूं, “दुनिया में जो बदलाव देखना चाहते हो, वह खुद बनो” अपनाकर इसे हल कर सकते हैं

    • सच कहूं तो मुझे कभी community size समस्या नहीं लगी। Nim forums active हैं, और मदद मांगने पर आमतौर पर जल्दी और सही जवाब मिल जाता है
      भाषा भी सावधानी से evolve हो रही है, और Araq के नेतृत्व में लंबे समय में और बेहतर होगी ऐसा लगता है
      ecosystem Python या Rust जितना बड़ा नहीं है, लेकिन हैरानी की बात है कि standard library में ज्यादातर जरूरी चीजें मौजूद हैं। कुछ करने के लिए third-party package ढूंढने की जरूरत कम ही पड़ती है
      बेशक, मानता हूं कि Nim कम known languages में आता है। फिर भी, इससे इसका यह फायदा खत्म नहीं होता कि यह promising language है और जो करना है, उसे बहुत अच्छे से करती है
      मेरा मानना है कि community को जिस हिस्से पर और focus करना चाहिए, वह IDE support है। VSCode extension ठीक है, लेकिन उसमें rough edges हैं। मुझे JetBrains IDE ज्यादा पसंद हैं, और official Nim plugin, नरम शब्दों में कहें तो, काफी कमज़ोर है
      Nim के लिए JetBrains plugin बनाने का एक side project भी है, लेकिन अभी बहुत आगे नहीं बढ़ पाया हूं
      [0] https://forum.nim-lang.org
      [1] https://github.com/khaledh/nimjet
  • Nim एक बेहतरीन system programming language है, और इसे और popular होना चाहिए

    • शायद उम्र बढ़ने की वजह से ऐसा हो, लेकिन indentation को दो spaces पर enforce करने से Nim code पढ़ना मेरे लिए मुश्किल हो जाता है। code blocks लगभग दिखाई ही नहीं देते, और मैं language को readable बनाने के लिए IDE पर निर्भर नहीं रहना चाहता