1 puan yazan GN⁺ 2024-07-15 | 1 yorum | WhatsApp'ta paylaş
  • Fusion OS, x86-64 için geliştirilmiş hobi amaçlı bir işletim sistemidir ve uygulama dili olarak Nim kullanır
  • Hâlihazırda uygulanmış özellikler UEFI bootloader, bellek yönetimi, görev yönetimi, sistem çağrıları, IPC ve donanım desteği olarak ayrılır
  • Bellek ve görev yönetimi; demand paging, preemptive multitasking, öncelik tabanlı zamanlama ve ELF yükleyiciyi içerir
  • Çalışma ortamı şu anda QEMU'dur; derleme için Nim, LLVM'nin clang·lld araçları ve Just gereklidir
  • Gelecek planları arasında capability tabanlı güvenlik, disk I/O, dosya sistemi, shell, GUI ve ağ desteği yer alır

Fusion OS'ye genel bakış

  • Fusion, x86-64 için hobi amaçlı bir işletim sistemidir ve Nim ile geliştirilmiştir
  • Geliştirme süreci 0xc0ffee.netlify.app üzerinde belgelenmiştir
  • Ekran görüntüleri bölümünde UEFI bootloader ile çekirdeğin önyükleme ve çalışma ekranları yer alır
  • GUI ekran görüntüleri graphics branch'indeki durumu gösterir ve bu branch hâlâ geliştirme aşamasındadır

Şu anda uygulanmış özellikler

  • Boot

    • UEFI Bootloader uygulanmıştır
  • Bellek yönetimi

    • Single Address Space yapısına sahip Higher Half Kernel
    • Physical Memory Manager
    • Virtual Memory Manager
    • Demand Paging
  • Görev yönetimi

    • Kernel Tasks
    • User Mode Tasks
    • Preemptive Multitasking
    • Priority-based Scheduling
    • Demand Paged ve Relocation destekli ELF Loader
  • Sistem çağrıları

    • System Call Interface
    • User Mode Library
  • IPC

    • Channel-based IPC
    • Message Passing
  • Donanım

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

Planlanan özellikler

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

Derleme ve çalıştırma

  • Derleme için Nim, LLVM'nin clang·lld araçları ve Just gereklidir
  • clang ve lld ikilileri PATH içinde olmalıdır
    • PATH içinde değillerse .env dosyasında ilgili ikili dosya yolları belirtilebilir
  • Derleme komutu aşağıdaki gibidir
just build
  • Fusion şu anda QEMU üzerinde çalıştırılmaktadır
  • Çalıştırma komutu aşağıdaki gibidir
just run

Lisans

  • Lisans MIT'tir

1 yorum

 
GN⁺ 2024-07-15
Hacker News yorumları
  • Yazarı benim. Sorularınız varsa yanıtlayabilirim

    • Nim'in garbage collector'ı hiç zorluk çıkardı mı?
      Çıkarmadıysa, bunun Nim'e özgü stop-the-world olmayan GC sayesinde olduğunu düşünüyor musunuz?
      https://nim-lang.org/1.4.0/gc.html
    • Projede en baş ağrıtan kısım neydi? Ayrıca sıfırdan bir işletim sistemi yazmak isteyen birine tavsiyeniz var mı?
    • Ekran görüntüleri nerede?
    • Nim kullanmıyorum ama ilginç bir dil olduğunu düşünüyorum. Eski projeleri yeniden derlediğinizde her seferinde düzeltme gerektiğine dair şikâyetler görmüştüm; bu yüzden uyumluluğu bozan değişikliklerin ne kadar sık ve ne kadar ciddi yaşandığını merak ediyorum
    • Neden Swift yerine Nim seçtiniz?
      Şu anda ikisi epey benzer görünüyor, ama Swift'in pratikte daha fazla sınanmış olduğunu düşünüyorum
  • Blog ve dokümantasyon harika. Gösterme ile açıklama arasındaki denge çok iyi; böyle paylaştığınız için teşekkürler

    • Yazma süreci, tasarımı ve implementasyonu iyileştirmeme birçok kez yardımcı oldu. Yazmak, sahip olduğum varsayımları sorgulamama ve okuyucunun bu kararları neden aldığımı anlayıp anlayamayacağını kendime sormama yol açıyor
      Yaptığınız her şeyi gerekçelendirmek zorunda kalmak, gereksiz karmaşıklığı ortadan kaldırmaya ve daha önemli kısımlara odaklanmaya yardımcı oluyor
  • Fusion yazarının geliştirme günlüğü:
    https://0xc0ffee.netlify.app/osdev/01-intro.html

  • Böyle şeyleri görmek güzel. Birkaç yıldır Nim ekosistemine ara sıra dahil oluyorum; bu küçük ve keyifli projenin ilerlemeye devam ettiğini görmek sevindirici

  • Harika. ELF modülünü açıp baktım; okunması kolay olduğu için keyifliydi
    Bir gün Nim ile gerçek zamanlı işletim sistemi yazmayı isterim. Nim ile embedded programlar yazmayı seviyorum, bu yüzden bir RTOS yapmak da eğlenceli olabilir

    • RTOS yapmaya karar verirseniz mutlaka takip etmek isterim
    • ELF çok basit bir dosya formatıdır. Okuması zor olsaydı asıl buna şaşırırdım
  • Nim nedir ve Fusion'ın genel tasarım hedefleri nelerdir?
    Umarım fazla temel bir soru değildir. Hiç arka plan bilgim yok; biri açıklarsa iyi olur

    • Diğerlerinin de söylediği gibi Nim, statik tipli bir programlama dili ve C, C++, JavaScript'e derleniyor. C ile birlikte çalışabilirliği iyi olduğu için sistem programlamayı kolaylaştırıyor
      Neden Nim olduğu konusunda, birlikte hazırladığımız sitede şöyle açıklamıştık:

      Neden Nim? Nim, deterministik bellek yönetimi, destructor'lar ve move semantics ile düşük seviyeli sistem programlamaya imkân veren az sayıdaki dilden biridir. Garbage collector isteğe bağlıdır. Statik tipli olduğu için tip güvenliği de daha yüksektir. İşletim sistemi geliştirme için vazgeçilmez olan inline assembly'yi de destekler. Diğer seçenekler C, C++, Rust ve Zig'dir. Hepsi mükemmel diller, ancak sadeliği, zarafeti ve performansı nedeniyle Nim'i seçtik.
      Fusion'ın genel tasarım hedefleri oldukça iddialı ve aynı sayfada listeledik. Bir Unix türevi işletim sistemi daha yapmak istemiyoruz; tek adres alanı ve koruma için capability tabanlı güvenlik gibi işletim sistemi tasarımının temel meselelerini denemek istiyoruz
      Ayrıca araştırmak istediğimiz bir diğer konu da process ve task'ların nasıl modelleneceği. Ben bunların, statik olarak tiplenmiş kanallar üzerinden birbirleriyle iletişim kuran durum makineleri olarak modellenmesi gerektiğini düşünüyorum. Bu yeni bir fikir değil; Singularity OS'te daha önce denenmişti
      Kernel'da kanallar ve kullanıcı alanında kanal kullanımı için temel destek var, ancak henüz erken aşamada
      [0] https://0xc0ffee.netlify.app/osdev/01-intro.html
      [1] https://en.wikipedia.org/wiki/Singularity_(operating_system)

    • Nim, Ada ve Python'dan esinlenmiş hissi veren harika bir dil
    • Proje dokümantasyonunda yer alıyor:
      https://0xc0ffee.netlify.app/osdev/01-intro.html
  • Daha fazla Nim projesi görmek beni mutlu eder. Çoğunlukla Python ve JavaScript kullanıyorum, ama modern ve hızlı statik tipli bir dili daha bilmenin avantajları ilgimi çekiyor
    Go, Rust, Zig ve Nim arasında Nim en çok hoşuma gidiyor. Kodu okurken sözdizimsel gürültünün az olması anlamında en Pythonvari geleni o
    Yeni kodun prototipini çıkarırken REPL kullanmayı çok seviyorum; INim bunu iyi yapıyor
    Nim'in şu anki en büyük sorunu topluluk ölçeğinin küçük olması. Bu yüzden kullanılabilir ve bakımı yapılan kütüphaneler dünyası, diğer dil topluluklarına göre daha küçük. Tavuk-yumurta problemi ama daha fazla geliştirici, ben dahil, “dünyada görmek istediği değişimin kendisi olarak” bunu çözebilir

    • Açıkçası topluluk ölçeğini hiç sorun olarak hissetmedim. Nim forumları aktif ve yardım istemeye gittiğinizde genellikle hızlı ve doğru yanıt alıyorsunuz
      Dil de dikkatli biçimde gelişiyor; Araq liderliğinde uzun vadede daha iyiye gidecek gibi görünüyor
      Ekosistem Python veya Rust kadar büyük değil, ama şaşırtıcı şekilde standart kütüphanede ihtiyaç duyulan çoğu şey var. Bir şey yapmak için üçüncü taraf paket aramak nadiren gerekiyor
      Elbette Nim'in daha az bilinen diller arasında olduğunu kabul ediyorum. Yine de bu, yapılması gereken işi çok iyi yapan umut vadeden bir dil olduğu gerçeğini değiştirmiyor
      Topluluğun daha fazla odaklanması gereken alanın IDE desteği olduğunu düşünüyorum. VSCode eklentisi fena değil ama pürüzlü tarafları var. Ben JetBrains IDE'leri daha çok tercih ediyorum; resmî Nim eklentisi ise en iyi ihtimalle oldukça yetersiz
      Nim için JetBrains eklentisi yapmaya yönelik bir yan projem de var, ancak henüz çok ilerletemedim
      [0] https://forum.nim-lang.org
      [1] https://github.com/khaledh/nimjet
  • Nim harika bir sistem programlama dili ve daha popüler olmalı

    • Yaşlandığım için mi bilmiyorum ama girintilemeyi iki boşluk olarak zorunlu kılmak Nim kodunu okumayı zorlaştırıyor. Kod blokları neredeyse göze çarpmıyor ve dili okunabilir kılmak için IDE'ye bağımlı olmak istemiyorum