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'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
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.
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.
Impressive, super cool, and inspiring!
Example of “creating something impressive in X days” requires a lot of experience and talent that is built over years.
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.
From "Linux System Call Table – Chromiumos"
Code is here: Git Repository
Hare looks like an interesting language. Though this limitation will limit its adoption in this multicore age I think:
Very cool. Most of these Unix clones are usually written in C. This one is written in a new programming language.
Quite cool, by making use of Hare instead.
Waiting for an OS that treats GPU(s) as a first class citizen ...