4 puan yazan GN⁺ 2025-04-27 | 1 yorum | WhatsApp'ta paylaş
  • RetrOS-32, i386 mimarisini merkezine alan tamamen özel yapım 32 bit bir hobi işletim sistemi ve grafik, çoklu görev ile ağ özelliklerini içeriyor
  • Çekirdek, yardımcı araçlar ve build sistemi C ve Assembly ile yazıldı; kullanıcı alanı uygulamaları C++ ile geliştiriliyor ve build için Make ile Docker kullanılıyor
  • Test edilen gerçek donanımlar arasında Lenovo x240, Asus Eee PC serisi, Dell Optiplex 780, Samsung N150 Plus, Samsung NP-NC10 ve IBM Thinkpad a21p yer alıyor
  • Çalıştırma yöntemleri olarak QEMU, copy.sh içindeki v86 ve gerçek donanımdan önyükleme destekleniyor; gerçek cihazlarda .iso dosyası USB’ye ya da CD’ye yazdırılıp GRUB ISO ile çalıştırılıyor
  • Yol haritasında önyükleyici, preemptive çok iş parçacıklı zamanlama, dosya sistemi, grafik pencere yöneticisi, ağ yığını, kullanıcı alanı iş parçacıkları ve TCP uzak sanal terminal gibi öğeler tamamlanmış olarak listeleniyor

RetrOS-32 genel bakış

  • RetrOS-32, i386 mimarisine odaklanan 32 bit bir hobi işletim sistemi projesi
  • Proje açıklamasında bunun grafik, çoklu görev ve ağ özelliklerine sahip 32 bit bir hobi işletim sistemi olduğu belirtiliyor
  • Başlangıç tarihi 12 Mayıs 2022 olarak yazılmış
  • Proje sayfası Project OSHub page bağlantısına yönlendiriyor

Giriş ve kullanıcılar

  • Varsayılan kullanıcılar system, admin, guest olmak üzere 3 adet
  • admin parolası admin, guest için ise parola yok
  • Şu anda admin ile guest arasında bir fark yok
  • Kullanıcılar admin create <username> <password> komutuyla oluşturulabiliyor

Kullanılan diller ve build yapısı

  • Çekirdek, yardımcı araçlar ve build sistemi C ve Assembly ile yazılmış
  • Kullanıcı alanı uygulamaları C++ ile yazılmış
  • Derleme için Make kullanılıyor
  • Çapraz platform derleme için Docker kullanılıyor

Test edilen donanım

  • Test edilmiş gerçek donanım listesi şöyle
    • Lenovo x240
    • Asus Eee PC series
    • Dell Optiplex 780
    • Samsung N150 Plus
    • Samsung NP-NC10
    • IBM Thinkpad a21p

Build ve çalıştırma yöntemleri

  • Çapraz platform ortamında image dosyasını derlemek için Docker, emülasyon için ise QEMU gerekiyor
  • Yerel derleme bağımlılıkları platforma göre değişiyor
    • MacOS: i386-elf-gcc, i386-elf-ld, i386-elf-g++
    • Linux / WSL Ubuntu: build-essential, gcc-multilib
    • GRUB önyükleyici olarak kullanılacaksa grub2, xorriso, xxd de gerekiyor
  • Linux’ta depo klonlama, ./debian.sh, Git alt modüllerini başlatma, make compile, make img, make qemu sırasıyla build ve çalıştırma yapılıyor
  • MacOS’ta build araçları 32 bit x86 koda bağlı olduğu için şu anda yerel derleme mümkün değil; en basit yöntem Docker
  • Windows’ta Docker veya WSL kullanılıyor
  • Üç farklı çalıştırma yöntemi bulunuyor
    • copy.sh v86 üzerinde .img dosyasını sabit disk image’ı olarak yüklemek
    • QEMU içinde make qemu veya qemu-system-i386 <image name> çalıştırmak
    • Gerçek donanımda .iso dosyasını USB’ye ya da CD’ye yazdırıp GRUB ISO kullanmak

Proje yapısı

  • Depo yapısı çekirdek, sürücüler, grafik, ağ, dosya sistemi, kütüphaneler, kullanıcı alanı uygulamaları, testler ve araç dizinlerine ayrılıyor
  • boot içinde özel bir önyükleyici ve multiboot.ld bulunuyor
  • kernel içinde ana çekirdek kaynakları, mimariye özel kodlar ve çekirdek iş parçacığı kodu yer alıyor
  • apps içinde kullanıcı alanı uygulamaları ile libcore.a, libgraphic.a, libnet.a bulunuyor
  • net içinde ağ kodu, fs içinde ise dosya sistemiyle ilgili kodlar var
  • tools içinde build araçları ve betikler yer alıyor

Tamamlanan özellikler ve kalan işler

  • Önyükleme ile ilgili öğelerde özel önyükleyici, GRUB uyumluluğu ve Stage 2 önyükleyici tamamlanmış durumda
  • Çekirdek ve sistem özellikleri arasında şunlar bulunuyor
    • Çok iş parçacıklı preemptive zamanlama
    • GDT ve TSS tabanlı çekirdek/kullanıcı alanı ayrımı
    • Kesme işleme
    • IPC
    • Sistem çağrıları
    • Kullanıcı alanı iş parçacıkları
  • Sürücü ve donanım tarafında PS/2 klavye/fare, PIT, VESA 640x480x8, RTC, Serial, E1000 ve PCI desteği bulunuyor
  • Dosya sistemi ve depolama tarafında ATA IDE sürücüsü, Ext2 benzeri dosya sistemi, FAT16 ile okuma-yazma tamamlanmış durumda
    • FAT16 en fazla 32MB dosya destekliyor
    • Atapi henüz tamamlanmamış
  • Bellek özellikleri arasında 32 bit sanal bellek, çekirdek kalloc/kfree, kullanıcı alanı malloc/free bulunuyor
  • Grafik tarafında pencere yöneticisi, GFXLib, çift framebuffer render, fare olayları, dinamik yeniden boyutlandırma, tam ekran ve widget kütüphanesi yer alıyor
    • Custom HTML to Widgets henüz tamamlanmamış
  • Ağ yığınında Ethernet, IP, ARP, UDP, Socket API, Loopback arayüzü, DHCP, DNS, TCP ve netcat tarzı komutlar tamamlanmış
    • Webserver, FTP, IRC, SSH, Telnet, HTTP, HTML henüz tamamlanmamış
  • Uygulama ve araçlar arasında terminal, pencere sunucusu, süreç bilgisi, Finder, C derleyicisi/bytecode yorumlayıcısı, bytecode çalıştırmak için özel VM, sözdizimi vurgulamalı düzenleyici, hesap makinesi, 3D oyun, metin modunda Snake oyunu, TCP uzak sanal terminal ve LZ sıkıştırma kütüphanesi bulunuyor
  • Önerilen özelliklerin ve bilinen sorunların tam listesi open issues sayfasında yer alıyor

Lisans ve proje bağlantısı

1 yorum

 
GN⁺ 2025-04-27
Hacker News yorumları
  • Böyle projeler, sıkıcı yapay zeka işlerinden çok daha hoş görünüyor. Satılacak bir şey olmayabilir ama bir mühendisin yeteneğini yaratıcı biçimde ortaya koyması demek
    Gençliğimin sonlarında hobi amaçlı OS geliştirmeyi epey çalışmıştım; gerçekten harikaydı, şimdi de ara sıra küçük çekirdekler yapıyorum. En son yaptığım şey, partnerime mesaj yazdıran küçük bir RISC-V çekirdeği idi

    • Satış ya da pazarlama kaygısı taşımamak gerçekten özgürleştirici. Yeni bir fikir gelene kadar tekerleği yeniden icat edebilirsin
    • Yapay zekaya toptan “sıkıcı” demek tuhaf. Akıllı kullanıcı deneyimiyle paketlenmeden önce, neredeyse para etmeyen bir akademik araştırma, yani zanaatkârlığa yakın bir işti
    • Bu, küçük bir hobi cihazının, insanlık tarihindeki en absürt teknolojiden çok daha ilginç olduğunu söylemek gibi geliyor
  • Temel sistem yazı tipinin daha dar bir varyant olmasını isterdim. O zaman sistem çok daha şık görünürdü; ayrıca harflerin yatayda daha fazla alana ihtiyaç duyduğu yerler de epey var
    Her harfin genişliğini azaltıp harfler arası boşluğu da mümkün olduğunca daraltmak lazım. Şu anki yazı tipi boyutu ve çözünürlükte 1 piksellik boşluk yeterli görünüyor
    Yazı tipi sistemini pek bilmiyorum ama sabit genişlikli bitmap yazı tipi olduğunu varsaydım. Kod tabanında bunu değiştirmek çok zorsa kafaya takmaya gerek yok
    Ben de bir süredir bir web OS sitesini sıfırdan yapıyorum; yakın zamanda tüm yazı tipi sınıflarını baştan yazdığım için bu özellikle gözüme çarptı

    • Mevcut yazı tipinin pek optimize olmadığına katılıyorum. Başlarken ilk çalıştırdığım erken dönem yazı tipini neredeyse olduğu gibi kullanıyorum
      Düzgün yazı tipi render etme işine de baktım, yapılacaklar listesinde var ama sürekli erteliyorum
    • Ortam sertmiş
      “Bir işletim sistemi yaptım!”
      “Hmm, yazı tipi pek iyi değil.”
      Bu tam HN zirvesi gibi
  • Harika. Bugün yeniden başlasan neyi farklı yapardın merak ediyorum
    Düşük seviye kısımlar için hangi dilin uygun olduğunu düşündüğünü de merak ediyorum. C'de mi kalırdın, sade bir C++ alt kümesi mi kullanırdın, yoksa daha yeni bir dili mi düşünürdün gibi
    Ortada çok fazla kaynak varken, başkalarının kodunu kopyalamak yerine projeyi nasıl ilginç tutmaya devam ettiğini de merak ediyorum

    • En büyük fark, plan yapmak olurdu. Başta sadece temel bir hello world OS yapmak gibi bir hedefim vardı ama sonra sürekli yeni özellikler ekledim ve aynı anda bir sürü şey üzerinde çalıştım; bunun sonucunda hâlâ ödediğim bir teknik borç oluştu
      UNIX bağımlılığını da azaltmaya çalışırdım muhtemelen
      Dil olarak C'yi seviyorum; temel sözdizimi ve doğrudan özüne inen tarzı yüzünden. Kullanıcı alanı uygulamaları için başka diller de düşünülebilir
      Başından beri her şeyi kendim yazmak istiyordum ve yazılım port etmemek projenin özündeydi. Genel olarak “kodu değil, fikri kopyala” kuralına bağlı kaldım
  • 1977'de Commodore PET 2001 kullanan biri olarak bakınca bu gerçekten harika. KolibriOS ve MenuetOSx64 ile uğraşıyordum; şimdi kendim bir OS yapmayı denemek istiyorum. Bunu başarmış olman müthiş

  • Proje gerçekten etkileyici, tebrik etmek isterim. Gençliğimden beri OS geliştirmeyi severim; böyle bir sonucun gerçekten hayata geçtiğini görmek güzel
    Grafik alt sisteminin nasıl başlatıldığını da biraz merak ediyorum. Umarım iyi gider

  • Ben de böyle bir tutku projesine zaman ayırabilsem keşke
    Kullanışlılığı unut, pazara giriş stratejisini unut, ürün-pazar uyumunu unut; sadece yap ve öğren

    • Gerçekten “kullanılacak mı” ya da pazarı düşünmek zorunda olmamak çok ferahlatıcı. Tamamen eğlence ve öğrenme için yapılan bir iş
    • Neden zaman ayıramadığını merak ettim. Küçüklüğümden beri hobi projelerim olmasa muhtemelen epey yönsüz kalırdım
      Bunlardan biri oyuncak bir OS'ydi ama düşük seviye OS geliştirmenin gerçek işim hâline gelmesiyle o proje durdu
  • Bu alanda onlarca yıldır bulunuyorum ve OS geliştirmeyi öğrenmeye çalışıyorum. FASM, NASM, FASM-G hakkında belli bir bilgim var
    Ama OS'nin ikili seviyede gerçekten nasıl çalıştığını anlamak için assembler programlarının çıktısını incelemek istiyorum
    Belirli bir mimarinin opcode'larını öğrenip öğrenmediğini, aygıt sürücüsü programlarını nasıl yaptığını ve kendi OS'ini geliştirmenin aşamalarını özetleyip özetleyemeyeceğini merak ediyorum

    • Öğrenmek için en iyi yerin osdev forumu ve osdev wiki olduğunu düşünüyorum. Başlamak için gerçekten çok yararlı kaynak var
      Birkaç eğitim de var ama çoğunda hatalar bulunuyor ve iş, fiilen onların OS'ini yeniden yapmak gibi bir şeye dönüşebiliyor
      Opcode'lara o kadar derin dalmadım; yalnızca C derleyicisini yaparken bakmıştım, bu yüzden sadece en yaygın temel komutları biliyorum
      https://forum.osdev.org/
      https://wiki.osdev.org/Expanded_Main_Page
  • Gerçekten harika. Uygulama seviyesinden çok bilgisayarın kendisiyle uğraşılan o erken dönem bilişim ruhunun daha fazla geri dönmesini isterdim
    Uzun vadeli bir hobi projesi olarak kişisel bir bilgisayar yapmayı düşünüyordum. Tüm yazılım yığınını kendim üretmek ve sisteme giren her bitin kaynağını bilmek istiyorum
    Donanımı aynı düzeyde kontrol etmek daha zor olurdu; ancak FPGA ile her şeyi çalıştıracak yeterli performans alınabiliyorsa mümkün olabilir. Ama en azından yazılım tarafı yapılabilir gibi görünüyor
    Şimdiye kadar bu bana gerçek dışı geliyordu ama bunun mümkün olduğunu göstermişsin. Görünüşe göre hobi amaçlı bir C derleyicisi de geliştiriyorsun: https://github.com/joexbayer/C-Compiler

    • Kullanıcı alanının en üstünden sürücülere kadar her şeyi kendin yazdığını bilmek gerçekten harika bir his. Aynı zamanda tam bir debug cehennemi
      C derleyicisi bu OS için yapıldı ve OS içinde çalışıyor. Proje fazla büyüdüğü için onu OS deposundan ayırmak istedim; özellikle de Linux'ta da çalıştığı için
  • Bu derleyicinin işletim sistemiyle nasıl etkileşime girdiğini biraz daha anlatman güzel olurdu. Özellikle struct gibi özellikleri nasıl ele aldığını, bu alandaki mevcut sınırlamaları ve planlanan iyileştirmeleri merak ediyorum

    • Derleyici ile OS arasında sihirli bir etkileşim yok. Sadece aynı makine koduna (i386) derliyor ve sistem çağrıları için interrupt kullanıyor
      Struct'ları, boyutu üyelerine göre belirlenen bellek alanları olarak ele alıyor; üye erişimi de o alan içindeki offset'ler üzerinden yapılıyor
      Şu an sadece int ve char var, switch ifadesi de yok; yani kısıtlar epey fazla. Standart C'den en büyük farklar, struct içinde fonksiyonlara izin verilmesi ve struct fonksiyonuysa struct'ın fonksiyona örtük olarak geçirilmesi. Daha ayrıntılı bilgi burada:
      https://github.com/joexbayer/C-Compiler
  • Burada gördüğüm tutku projeleri arasında uzun zamandır en etkileyicilerden biri bu. Neden kendi C derleyicini kullanmaya karar verdiğini merak ediyorum

    • Her şeyi kendim yazmak gibi bir kuralım vardı ve bir derleyici yapmak da her zaman “hedeflerimden” biriydi. O yüzden doğal biçimde yerine oturdu