1 poin oleh GN⁺ 2024-07-15 | 1 komentar | Bagikan ke WhatsApp
  • Fusion OS adalah sistem operasi hobi untuk x86-64 yang menggunakan Nim sebagai bahasa implementasinya
  • Fitur yang saat ini sudah diimplementasikan terbagi menjadi bootloader UEFI, manajemen memori, manajemen tugas, system call, IPC, dan dukungan perangkat keras
  • Manajemen memori dan tugas mencakup demand paging, multitasking preemptif, penjadwalan berbasis prioritas, dan loader ELF
  • Lingkungan eksekusi saat ini adalah QEMU, dan untuk build dibutuhkan Nim, clang·lld dari LLVM, serta Just
  • Rencana ke depan mencakup keamanan berbasis capability, disk I/O, sistem berkas, shell, GUI, dan jaringan

Gambaran umum Fusion OS

  • Fusion adalah sistem operasi hobi untuk x86-64 yang diimplementasikan dengan Nim
  • Proses pengembangannya didokumentasikan di 0xc0ffee.netlify.app
  • Bagian tangkapan layar mencakup bootloader UEFI, proses boot kernel, dan layar saat berjalan
  • Tangkapan layar GUI adalah tampilan dari branch graphics, dan branch tersebut masih dalam pengerjaan

Fitur yang saat ini sudah diimplementasikan

  • Boot

    • UEFI Bootloader telah diimplementasikan
  • Manajemen memori

    • Higher Half Kernel dengan struktur Single Address Space
    • Physical Memory Manager
    • Virtual Memory Manager
    • Demand Paging
  • Manajemen tugas

    • Kernel Tasks
    • User Mode Tasks
    • Preemptive Multitasking
    • Priority-based Scheduling
    • ELF Loader yang mendukung Demand Paging dan Relocation
  • System call

    • System Call Interface
    • User Mode Library
  • IPC

    • Channel-based IPC
    • Message Passing
  • Perangkat keras

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

Fitur yang direncanakan

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

Build dan menjalankan

  • Untuk build dibutuhkan Nim, clang·lld dari LLVM, dan Just
  • Binary clang dan lld harus ada di PATH
    • Jika tidak ada di PATH, Anda dapat menentukan path binary tersebut di file .env
  • Perintah build adalah sebagai berikut
just build
  • Fusion saat ini berjalan di QEMU
  • Perintah untuk menjalankannya adalah sebagai berikut
just run

Lisensi

  • Lisensinya adalah MIT

1 komentar

 
GN⁺ 2024-07-15
Opini Hacker News
  • Saya penulisnya. Kalau ada pertanyaan, saya akan menjawab

    • Apakah garbage collector Nim pernah menimbulkan kesulitan?
      Kalau tidak, apakah menurut Anda itu berkat GC khas Nim yang bukan stop-the-world?
      https://nim-lang.org/1.4.0/gc.html
    • Bagian apa yang paling merepotkan dalam proyek ini? Dan apakah ada saran untuk orang yang ingin menulis sistem operasi dari nol?
    • Di mana screenshot-nya?
    • Saya tidak memakai Nim, tapi menurut saya ini bahasa yang menarik. Saya pernah melihat keluhan bahwa setiap kali mengompilasi ulang proyek lama selalu perlu perbaikan, jadi saya penasaran seberapa sering dan seberapa parah perubahan yang memutus kompatibilitas terjadi
    • Mengapa memilih Nim alih-alih Swift?
      Sekarang keduanya tampak cukup mirip, sementara Swift sepertinya sudah lebih banyak teruji di penggunaan nyata
  • Blog dan dokumentasinya bagus sekali. Keseimbangan antara menunjukkan dan menjelaskan sangat baik, dan terima kasih sudah membagikannya seperti ini

    • Proses menulis berkali-kali membantu memperbaiki desain dan implementasi. Menulis membuat saya meragukan asumsi yang saya miliki, dan bertanya pada diri sendiri apakah pembaca akan bisa memahami mengapa saya mengambil keputusan seperti ini
      Karena harus membenarkan semua yang dilakukan, itu membantu menghilangkan kompleksitas yang tidak perlu dan lebih fokus pada bagian yang lebih penting
  • Catatan pengembangan dari penulis Fusion:
    https://0xc0ffee.netlify.app/osdev/01-intro.html

  • Senang melihat hal seperti ini. Saya beberapa tahun ini sesekali terlibat di ekosistem Nim, dan menyenangkan melihat proyek kecil yang menyenangkan ini terus berjalan

  • Keren. Saya membuka modul ELF-nya, dan karena mudah dibaca, itu menyenangkan
    Suatu hari saya ingin mencoba menulis sistem operasi real-time dengan Nim. Saya suka menulis program embedded dengan Nim, jadi membuat RTOS juga sepertinya akan menyenangkan

    • Kalau Anda memutuskan membuat RTOS, saya pasti ingin mengikutinya
    • ELF adalah format berkas yang sangat sederhana. Kalau ternyata sulit dibaca, saya justru akan terkejut
  • Apa itu Nim, dan apa tujuan desain umum Fusion?
    Semoga ini bukan pertanyaan yang terlalu mendasar. Saya sama sekali tidak punya latar belakang, jadi akan bagus kalau ada yang menjelaskan

    • Seperti yang dikatakan orang lain, Nim adalah bahasa pemrograman bertipe statis dan dikompilasi ke C, C++, JavaScript. Interoperabilitasnya dengan C bagus, sehingga memudahkan pemrograman sistem
      Tentang mengapa Nim, di situs yang kami buat bersama dijelaskan seperti ini:

      Mengapa Nim? Nim adalah salah satu dari sedikit bahasa yang memungkinkan pemrograman sistem tingkat rendah dengan manajemen memori deterministik, destructor, dan move semantics. Garbage collector bersifat opsional. Karena bertipe statis, keamanan tipe juga lebih tinggi. Nim juga mendukung inline assembly, yang esensial untuk pengembangan sistem operasi. Pilihan lain adalah C, C++, Rust, Zig. Semuanya bahasa yang bagus, tetapi kami memilih Nim karena kesederhanaan, keanggunan, dan performanya.
      Tujuan desain keseluruhan Fusion cukup ambisius, dan sudah kami cantumkan di halaman yang sama. Kami tidak ingin membuat satu lagi sistem operasi turunan Unix, melainkan ingin bereksperimen dengan persoalan mendasar dalam desain sistem operasi, seperti single address space dan capability-based security untuk perlindungan
      Bagian lain yang ingin dieksplorasi adalah bagaimana memodelkan proses dan task. Menurut saya, hal-hal ini seharusnya dimodelkan sebagai state machine yang saling berkomunikasi melalui channel yang bertipe statis. Ini bukan ide baru, dan sudah pernah dicoba di Singularity OS
      Di kernel sudah ada dukungan dasar untuk channel dan penggunaan channel dari user space, tetapi masih tahap awal
      [0] https://0xc0ffee.netlify.app/osdev/01-intro.html
      [1] https://en.wikipedia.org/wiki/Singularity_(operating_system)

    • Nim adalah bahasa keren yang terasa terinspirasi dari Ada dan Python
    • Ada di dokumentasi proyek:
      https://0xc0ffee.netlify.app/osdev/01-intro.html
  • Saya senang kalau lebih banyak proyek Nim terlihat. Saya terutama memakai Python dan JavaScript, tetapi tertarik pada manfaat mengetahui satu lagi bahasa modern, cepat, dan bertipe statis
    Di antara Go, Rust, Zig, dan Nim, Nim yang paling saya sukai. Rasanya paling Pythonic dalam arti ada sedikit noise sintaks saat membaca kode
    Saya sangat suka memakai REPL ketika membuat prototipe kode baru, dan INim melakukannya dengan baik
    Masalah terbesar Nim saat ini adalah ukuran komunitas yang kecil. Karena itu, dunia library yang bisa digunakan dan dipelihara lebih kecil dibanding komunitas bahasa lain. Ini masalah ayam dan telur, tetapi bisa diselesaikan jika lebih banyak developer, termasuk saya, memilih untuk “menjadi perubahan yang ingin dilihat di dunia”

    • Sejujurnya, saya tidak pernah merasa ukuran komunitas adalah masalah. Forum Nim aktif, dan kalau pergi ke sana untuk meminta bantuan, biasanya mendapat jawaban yang cepat dan tepat
      Bahasanya juga berkembang dengan hati-hati, dan selama dipimpin Araq, sepertinya akan semakin baik dalam jangka panjang
      Ekosistemnya tidak sebesar Python atau Rust, tetapi mengejutkannya, standard library sudah berisi sebagian besar hal yang diperlukan. Jarang saya perlu mencari paket pihak ketiga untuk melakukan sesuatu
      Tentu saya mengakui Nim termasuk bahasa yang kurang dikenal. Meski begitu, itu tidak menghilangkan keunggulannya sebagai bahasa menjanjikan yang melakukan tugasnya dengan sangat baik
      Menurut saya bagian yang perlu lebih difokuskan komunitas adalah dukungan IDE. Ekstensi VSCode lumayan, tetapi masih ada bagian yang kasar. Saya lebih menyukai IDE JetBrains, dan plugin resmi Nim, kalau mau dikatakan halus, masih sangat kurang
      Saya juga punya side project untuk membuat plugin JetBrains bagi Nim, tetapi belum terlalu banyak kemajuannya
      [0] https://forum.nim-lang.org
      [1] https://github.com/khaledh/nimjet
  • Nim adalah bahasa pemrograman sistem yang sangat bagus, dan seharusnya lebih populer

    • Mungkin karena saya sudah tua, tetapi kalau indentasi dipaksakan memakai dua spasi, kode Nim jadi sulit dibaca. Blok kode hampir tidak terlihat jelas, dan saya tidak ingin bergantung pada IDE hanya agar bahasa lebih mudah dibaca