3 puan yazan GN⁺ 2024-05-25 | 1 yorum | WhatsApp'ta paylaş

Yeni bir programlama projesi: Bunnix

Projenin arka planı

  • Kısa süreliğine "gerçek iş"ten uzaklaşmak için, düşük riskli ve tamamen boş zaman için yeni bir programlama projesine başladım.
  • 21 Nisan'dan itibaren x86_64 hedefi için Unix benzeri bir işletim sistemini yaklaşık bir ayda ne kadar ileri götürebileceğimi görmeye karar verdim.
  • Ortaya çıkan işletim sisteminin adı Bunnix.
  • Bu projeye toplam 27 gün ayırdım.

Bunnix demosu

  • Bunnix 0.0.0 ISO dosyası sunuluyor.
  • QEMU kullanarak önyükleyebilirsiniz:
    qemu-system-x86_64 -cdrom bunnix.iso -display sdl -serial stdio
    
  • ISO'yu bir USB belleğe yazarak gerçek donanımda da önyükleyebilirsiniz.
  • Büyük olasılıkla çoğu AMD64 cihazda çalışacaktır.
  • Kısıtlama: USB desteği olmadığından PS/2 klavye gerekiyor.

Bunnix'in bileşenleri

  • Bunnix çekirdeği çoğunlukla Hare ile yazıldı ve bazı C bileşenleri (lwext4, libvterm) içeriyor.
  • Desteklenen sürücüler:
    • PCI (legacy)
    • AHCI blok aygıtları
    • GPT ve MBR bölüm tabloları
    • PS/2 klavye
    • Platform seri portu
    • CMOS saati
    • Framebuffer (bootloader tarafından ayarlanır)
    • ext4 ve memfs dosya sistemleri
  • Desteklenen çekirdek özellikleri:
    • Sanal dosya sistemi
    • Çeşitli /dev aygıtları
    • Terminal emülatörü ve termios desteği
    • Yaklaşık 40 sistem çağrısı (clock_gettime, poll, openat, fork, exec vb.)
  • Bunnix tek kullanıcılı bir sistem ve şu anda Unix dosya kipleri ile sahipliğini zorunlu kılmıyor.

Bootloader

  • İki bootloader içeriyor:
    • Legacy boot: Hare ile yazıldı.
    • EFI boot: C ile yazıldı.
  • Çekirdeği ELF dosyası olarak yüklüyor ve gerekirse initramfs'i de yüklüyor.

Kullanıcı alanı yazılımları

  • Çoğunlukla üçüncü taraf yazılımlardan oluşuyor:
    • Colossal Cave Adventure (advent)
    • dash (/bin/sh)
    • Doom
    • gzip
    • less (pager)
    • lok (/bin/awk)
    • lolcat
    • mandoc (man pages)
    • sbase (core utils)
    • tcc (C derleyicisi)
    • Vim 5.7
  • libc, musl libc'den türetildi ve Bunnix'in ihtiyaçlarına göre değiştirildi.

Bunnix'in geliştirilme süreci

  • Geliştirme sürecini Mastodon'da belgeledim.
  • Bunnix'in bazı kodları önceki projem Helios'tan alındı.
  • ext4 desteği ve sanal terminal entegrasyonu en zor kısımlardı.
  • Zamanlayıcı ve sinyal işleme uygulamaları da zorluydu.
  • Üçüncü taraf yazılımları port etmek, musl libc tabanı sayesinde nispeten kolaydı.

Öğrenilenler

  • Dosya sistemleri hakkında çok şey öğrendim.
  • Sürücü yaklaşımım basitleşti.
  • Sinyal işlemenin karmaşıklığını anlamaya başladım.
  • Bellek yönetiminde bitmap tahsis edicinin etkili olduğunu gördüm.
  • Monolitik çekirdeğin mikroçekirdeğe göre uygulamasının çok daha basit olduğunu fark ettim.

Bundan sonraki planlar

  • Bunnix boş zaman için yapılan bir projeydi ve şu anda artık zaman ayırmayı planlamıyorum.
  • İleride Helios projesine dönüp birçok dersi orada uygulamayı planlıyorum.
  • Bunnix için iyileştirme öncelikleri:
    • Dosya sistemi önbelleği
    • ext4 hata düzeltmeleri
    • procfs ve top
    • mmap dosyaları
    • Daha fazla sinyal (ör. SIGSEGV)
    • Çok kullanıcılı destek
    • NVMe blok aygıtları
    • IDE blok aygıtları
    • ATAPI ve ISO 9660 desteği
    • Intel HD Audio desteği
    • Ağ yığını
    • Temel sistemde Hare toolchain
    • Self-hosting

GN⁺ görüşü

  • Bunnix'in değeri: Bunnix, Hare diliyle çekirdek geliştirmeye iyi bir örnek sunuyor ve yeni dillerle teknolojileri öğrenmek isteyen geliştiriciler için ilgi çekici olabilir.
  • Dosya sistemi tasarımı: Dosya sistemi tasarımı, işletim sistemi geliştirmede kritik bir alan ve Bunnix üzerinden çok şey öğrenmek mümkün.
  • Monolitik vs mikroçekirdek: Monolitik çekirdek ile mikroçekirdeğin artılarını ve eksilerini karşılaştırmak için iyi bir örnek; işletim sistemi tasarımına dair daha derin bir anlayış sağlıyor.
  • Topluluk katılımı: Bunnix açık kaynaklı bir proje ve topluluğun katılımı ile katkıları sayesinde daha da gelişme potansiyeline sahip.
  • Gelecekteki iyileştirmeler: Bunnix için planlanan geliştirmeler, işletim sistemi geliştirmeyle ilgilenenler için iyi öğrenme fırsatları sunuyor.

1 yorum

 
GN⁺ 2024-05-25
Hacker News yorumu

Hacker News yorum derlemesi özeti

  • This is really cool. Reminds me of the original Unix was invented in a couple weeks while Ritchie's family went on vacation to CA to visit his in-laws.

    • Orijinal Unix'in, Ritchie'nin ailesi CA'ya kayınvalidelerini ziyaret etmeye tatile gittiğinde birkaç hafta içinde icat edilmesini hatırlatan çok havalı bir proje.
  • I also finally learned how signals work from top to bottom, and boy is it ugly. I’ve always felt that this was one of the weakest points in the design of Unix and this project did nothing to disabuse me of that notion.

    • Signal'ların nasıl çalıştığını baştan sona sonunda ben de öğrendim ve gerçekten epey çirkin. Bunun her zaman Unix tasarımının en zayıf noktalarından biri olduğunu düşünürdüm; bu proje de beni bu düşünceden vazgeçirmedi.
  • Impressive, super cool, and inspiring!

    • Etkileyici, aşırı havalı ve ilham verici!
  • Example of “creating something impressive in X days” requires a lot of experience and talent that is built over years.

    • “X günde etkileyici bir şey yaratmak” türü örnekler, yıllar içinde birikmiş büyük bir deneyim ve yetenek gerektirir.
  • It was really cool watching the ~daily updates on this on Mastodon - seeing how someone so skilled gradually pieces together a complex piece of software.

    • Mastodon'da bununla ilgili neredeyse günlük güncellemeleri izlemek gerçekten çok güzeldi; bu kadar yetkin birinin karmaşık bir yazılım parçasını adım adım nasıl bir araya getirdiğini görmek ilgi çekiciydi.
  • From "Linux System Call Table – Chromiumos"

    • "Linux System Call Table – Chromiumos" kaynağından.
  • Code is here: Git Repository

  • Hare looks like an interesting language. Though this limitation will limit its adoption in this multicore age I think:

    • Hare ilginç bir dil gibi görünüyor. Ama bence bu sınırlama, çok çekirdekli bu çağda benimsenmesini kısıtlayacaktır:
  • Very cool. Most of these Unix clones are usually written in C. This one is written in a new programming language.

    • Çok havalı. Bu tür Unix klonlarının çoğu genelde C ile yazılır. Bu ise yeni bir programlama diliyle yazılmış.
  • Quite cool, by making use of Hare instead.

    • Onun yerine Hare kullanılması oldukça havalı.
  • Waiting for an OS that treats GPU(s) as a first class citizen ...

    • GPU'ları birinci sınıf vatandaş gibi ele alan bir işletim sistemi bekliyorum...