7 puan yazan GN⁺ 2025-06-24 | 1 yorum | WhatsApp'ta paylaş
  • Rust ile geliştirilen 64 bit DOS tarzı işletim sistemi; çekirdeğin yüklenmesinde kısmen x86 assembly de kullanılıyor
  • VGA metin modu (80x25), FAT12 dosya sistemi, SLIP üzerinden IPv4 ağ yığını (ICMP/UDP/TCP/HTTP) uygulanmış
  • QEMU tabanlı sanal makinede çalıştırılıyor ve geliştiriliyor; bazı gerçek disket ortamlarını da destekliyor
  • Basit bir metin editörü, TAB dosya/dizin otomatik tamamlama, Snake oyunu gibi temel yardımcı araçlar içeriyor

Mimari ve önyükleyici

  • Hedef CPU x86_64; gelecekte ARM (aarch) mimarisi desteği planlanıyor
  • İlk sürümde çekirdek belleğe yüklenip çalıştırılmak için elle yazılmış bir önyükleyici kullanıldı
  • 64 bit çekirdekte GRUB2 önyükleyici kullanılarak Long Mode'a giriş ve Protected Mode geçişi yönetiliyor
  • stage2 önyükleyici GDT, IDT, sayfalama ayarları ve Multiboot2 işaretçisi ataması gibi görevleri yerine getiriyor
  • Çekirdek, kabuk komut işleyicisi ve çeşitli özel bileşenlerden oluşuyor

QEMU üzerinde emülasyon ve imajlar

  • Geliştirme ve testler, QEMU üzerinden sanal makine ortamında yapılıyor
  • ISO imajı oluşturma: grub2-mkrescue ve xorriso kullanılıyor
  • FAT12 disket imajı oluşturma ve bağlama destekleniyor; gerçek aygıtta veya QEMU bayrağı (-fda fat.img) ile kullanılabiliyor

Başlatma süreci

  • Çekirdeğe girildiğinde Long Mode, Multiboot2 etiketleri, FAT12 dosya sistemi, VGA durumu vb. kontrol ediliyor
  • ASCII art logo yazdırıldıktan sonra denetim kabuk döngüsüne devrediliyor

Dosya sistemi

  • FAT12 dosya sistemi desteği: dosya okuma/yazma/arama/silme, dizin oluşturma/silme vb. destekleniyor
  • Metin dosyası oluşturma ve üzerine yazma, alt dizin desteği mevcut
  • fsck aracı ile dosya sistemi tutarlılığını denetleme özelliği bulunuyor
  • İleride FAT32 desteği de planlanıyor

Ağ yığını

  • SLIP protokolü tabanlı IPv4 paket gönderme/alma
  • Ethernet çerçevesi işleme desteği var (testler henüz tamamlanmadı)
  • ICMP Echo(Request/Reply), UDP, TCP (SYN/SYNACK durum makinesi) vb. destekleniyor
  • Basit bir HTTP sunucusu: statik HTML sayfaları sunuyor

Snake oyunu

  • Snake oyunu yerleşik geliyor; gelecekte çok oyunculu (P2P TCP) sürüm de planlanıyor
  • Oyun verileri (seviye, skor) metin dosyaları olarak kaydedilip yüklenebiliyor
  • ESC ile oyundan çıkılıyor, skora göre High Score kaydediliyor

Projenin değeri ve kullanım noktaları

  • Rust ile yazılmış bir işletim sistemi örneği olarak, düşük seviyeli yazılım geliştirmede güvenlik ve üretkenlik artışını hissettirebiliyor
  • SLIP/ICMP testleri, kolay dağıtım ve gerçek cihaz desteği sayesinde OS deneyleri ve özel uygulama geliştirmeyi öğrenmek için uygun
  • Rust ve x86 assembly'nin birleştiği DOS benzeri sistem yapısını doğrudan deneyimleme imkânı sunuyor

1 yorum

 
GN⁺ 2025-06-24
Hacker News görüşleri
  • Bellek güvenliği garanti eden bir dil kullanması, x86_64 tabanlı olması, Arm desteğinin de planlanması, kendi ağ yığınına sahip olması, CD ve multiboot ile önyüklenebilmesi hoş; hobi projemin DOS'u aşan bir deneyim sunduğunu söylemiş
    • DOS ile rekabet edecekse Doom ve BASIC çalıştırma desteği şart; bu, resmen DOS tarzı için taban çizgisi sayılır
    • Rust ve x86 assembly birleşimi var; bu yüzden amaç bellek güvenliği ise bunun gerçekten pratik bir değeri var mı diye düşündürüyor. Bugünlerde Rust, bir dönem 3D printing'in abartılı pazarlanması gibi biraz fazla pazarlanıyor gibi geliyor. Yaygınlaşma sürecinde somut kazanımlar sınırlı ve proje eski yazılımlarla uyumlu olursa güzel olur ama değilse daha çok eğitimlik ya da meraklılara yönelik bir proje gibi; gerçek kullanım için daha yolu var gibi görünüyor
  • Ağ yığınında SLIP ve slattach(1) kullanılması gerçekten çok hoşuma gitti. Ben de basit bir TCP/IP yığınını kendim yaparken Linux'ta pty üzerinden SLIP bağlayıp çekirdekle entegre etmiştim. macOS'ta da eskiden slattach(1) vardı ama şimdi kaldırılmış gibi görünüyor. Acaba macOS'ta SLIP kullanarak çapraz platform bir ağ API'si yapan oldu mu merak ediyorum. Alternatif olarak Linux'ta tun/tap, macOS'ta utun var ama SLIP çok daha basit
  • Neden x86 seçildiğini merak ediyorum; kaynakların bol olması yüzünden mi, kendine özgü komut biçimi yüzünden mi, önyükleme dizisinin karmaşıklığı yüzünden mi, yoksa DOS'u doğrudan takip etme stratejisi mi? ARM mimarisi desteğinin de yakında geleceği söylenmiş ama DOS'un kendisi donanım ve yazılımın sıkı bağlandığı bir yapıdayken bunu birden fazla mimariye nasıl yayacakları merak konusu
    • Projeye doğrudan bakmadım ama tahminim şu: x86 platformu tarihsel olarak legacy uyumluluk sayesinde gerçekten çok çeşitli arabirimleri içinde barındırıyor; bu yüzden çok ince ve basit bir "DOS benzeri OS" gerçekleştirmek kolay. Device tree parsing, MMU kurulumu, PCI(e) gibi karmaşık veri yolu işleme işleri gerekmiyor; basitçe başlanabiliyor. ARM'de bootstrap'in kendisi daha zor, bu yüzden sadeliği korumak için daha fazla kısıtı kabul etmek gerekiyor. MMU olmadan yapılabilecekler sınırlı ve BIOS arabirimleri de olmadığından x86'daki gibi basitçe sektör okuma ya da tuş bekleme yapmak zor
    • x86'ın seçilme nedeni, bu sistemin Turbo C'de BIOS interrupt'ları ve inline assembly tabanlı ilk sürümden türemiş olması. Amaç sadece MS-DOS'u taklit etmek değil, ondan ciddi biçimde ilham alınmış. Birden çok mimari desteği de Rust derleyicisinin hedef mimari belirtme özelliği sayesinde mümkün görünüyor; build öncesinde hedefi seçmek build sürecine doğrudan yansıyor
  • Mevcut UEFI ortamı ve shell yerine bunun gibi FLOSS tabanlı 64 bit DOS biçimi bir çözüm daha iyi olurdu sanki. Retro bir boot manager ya da sistem tanılama aracı olarak harika olabilir. Bunun EFI system partition üzerinden çalışıp çalışamayacağını merak ediyorum; FAT12 desteği olduğu görülüyor ama GPT desteği var mı, video donanımını doğrudan mı kontrol ediyor yoksa terminal benzeri bir çıktı mı veriyor merak ettim
    • EFI system partition üzerinden önyükleme henüz test edilmemiş. Resmî olarak yalnızca FAT12 filesystem destekleniyor (memory disk özelliği var ama şu anda çalışmıyor), GPT şu an desteklenmiyor. Öncelik olarak FAT32 desteği düşünülüyor (genelde flash diskler FAT32 kullanıyor). Son soruya gelirsek, OS doğrudan VGA memory buffer'a yazıyor; GRUB da 80x25 çözünürlük sağlıyor
  • Bu projeyi harika buldum; "sadece bir hobi, Linux gibi büyük ve profesyonel olmayacak" şeklindeki meşhur sözü kaçırmış olmalarına üzüldüm
  • Çekçe aksan işaretleri desteği planlanıyor mu diye sorulmuş
    • Bu sürümde yalnızca İngilizce desteği planlanıyor, ilk sürüm ise başlangıçta Çekçe yapılmıştı
  • VGA sürücüsünün Rust ile tamamen sıfırdan yazılıp yazılmadığı sorulmuş
  • DOS tarzı ama DOS ile uyumlu değil, doğru mu diye sorulmuş
    • Evet, bu doğru bir analiz. İlk sürüm 16 bit olarak MS-DOS ile neredeyse uyumlu olacak şekilde tasarlanmıştı ve yalnızca basit disk I/O yapabilse bile geniş anlamda bir DOS sistemi sayılabileceği düşünülüyor
    • Yani MS-DOS uyumluluğu, Alley Cat, Dune 2, Doom çalıştırabilecek düzey kastediliyor
  • Asenkron runtime desteği için bir event queue gerektiği yorumu
    • Düzgün, olgun bir event loop uygulaması hakkında ne düşündükleri sorulmuş
  • Crysis çalıştırıp çalıştıramayacağına dair esprili bir soru