2 puan yazan GN⁺ 2024-12-06 | 1 yorum | WhatsApp'ta paylaş

banan-os

Bu proje C++ ile yazılmış bir hobi işletim sistemidir ve x86_64 ile i686 mimarilerini destekler. Başka ürünler veya mevcut açık kaynak projelerle kıyaslandığında benzersiz bir öğrenme deneyimi sunar.

Özellikler

  • Genel

    • Ring3 kullanıcı alanı
    • SMP (çoklu işlem)
    • Doğrusal framebuffer (VESA ve GOP)
    • Ağ yığını
    • ELF çalıştırılabilir dosya yükleme
    • AML yorumlayıcısı (kısmi)
    • Temel grafik ortamı
      • Terminal emülatörü
      • Durum çubuğu
      • Program başlatıcı
      • Birkaç kullanışlı uygulama
    • ELF dinamik bağlama
    • copy-on-write bellek
      • Dosya eşleme
      • Anonim eşleme
  • Sürücüler

    • NVMe diskler
    • ATA (IDE, SATA) diskler
    • E1000 ve E1000E NIC
    • RTL8111/8168/8211/8411 NIC
    • PS2 klavye (tüm scancode setleri)
    • PS2 fare
    • USB
      • Klavye
      • Fare
      • Yığın depolama
      • Hub
    • virtio aygıtları (ağ, depolama)
    • ARP
    • ICMP
    • IPv4
    • UDP
    • TCP (kısmi ve hatalı)
    • Unix domain socket
    • SSL
  • Dosya sistemleri

    • Sanal dosya sistemi
    • Ext2
    • FAT12/16/32
    • Dev
    • Ram
    • Proc
    • Sys
    • 9P
  • Bootloader desteği

    • GRUB
    • Özel BIOS bootloader
    • Özel UEFI bootloader

Kod yapısı

Her ana bileşen ve kütüphane kendi alt dizinine sahiptir. Her dizinde, ilgili bileşenin tüm başlık dosyalarını içeren bir include dizini bulunur. Tüm başlıklar mutlak yollarla dahil edilir.

Derleme

Gerekli paketler

  • apt (Ubuntu 22.04 üzerinde test edildi)

    • build-essential, git, ninja-build, texinfo, bison, flex, libgmp-dev, libmpfr-dev, libmpc-dev, parted, qemu-system-x86, cpu-checker
  • pacman

    • base-devel, git, wget, cmake, ninja, parted, qemu-system-x86

Derleme

  • Bu işletim sistemi için toolchain oluşturmak üzere aşağıdaki komutu çalıştırabilirsiniz. Bu adım yalnızca bir kez gereklidir ve uzun sürebilir.

    • ./bos toolchain
  • İşletim sisteminin kendisini derlemek için aşağıdaki komutlardan birini çalıştırabilirsiniz. Disk imajı oluşturma/değiştirme için root yetkileri gerekir.

    • ./bos qemu
    • ./bos qemu-nographic
    • ./bos qemu-debug
    • ./bos bochs
  • Çekirdeği veya disk imajını çalıştırmadan da derleme yapabilirsiniz.

    • ./bos kernel
    • ./bos image
  • Başka bir mimari için derlemek üzere BANAN_ARCH=_arch_ ortam değişkenini ayarlayın (ör. BANAN_ARCH=i686).

  • Bootloader değiştirmek için BANAN_BOOTLOADER ortam değişkenini ayarlayın. Desteklenen değerler BANAN (özel bootloader) ve GRUB'dur.

  • UEFI ile çalıştırmak için BANAN_UEFI_BOOT=1 ortam değişkenini ayarlayın. Ayrıca OVMF_PATH değişkeni doğru OVMF yoluna ayarlanmalıdır (varsayılan /usr/share/ovmf/x64/OVMF.fd).

  • Disk imajı bozulduysa veya yeniden oluşturmak istiyorsanız, _build/banan-os.img_ dosyasını elle silebilir ya da aşağıdaki komutu çalıştırabilirsiniz.

    • ./bos image-full
  • zsh için shell completion betiği de üretilir. _script/shell-completion/zsh/_bos_ dosyasını /usr/share/zsh/site-functions/ konumuna kopyalayabilir veya .zshrc içindeki fpath değişkenine _script/shell-completion/zsh_ ekleyebilirsiniz.

Katkı

  • Upstream kişisel bir sunucuda barındırıldığı için katkıları birleştirmek GitHub’daki kadar kolay değildir. GitHub’da PR gönderirseniz diff indirilebilir ve elle uygulanabilir. İsterseniz kişisel git sunucusunda size bir hesap verilebilir. Bu durumda e-posta veya Discord üzerinden iletişime geçin.

  • Bu proje öncelikle bir öğrenme deneyimi olduğundan, yeni özellikler eklemeden önce e-posta, Discord, issue vb. üzerinden önce iletişime geçmeniz istenir. Eğer planlanmış bir çalışma hakkında önceden sormadan PR gönderirseniz, PR’ın kapatılma ihtimali yüksektir. Hata düzeltmeleri ise her zaman memnuniyetle karşılanır.

  • Commit mesajları aşağıdaki şekilde biçimlendirilmelidir.

    1. İlk satır Subject: Description biçiminde olmalıdır; burada Subject etkilenen alanı (Kernel, Shell, BuildSystem vb.), Description ise değişikliğin kısa açıklamasını belirtir. İlk satır 72 karakteri geçmemelidir.
    2. Mesaj gövdesi, neyin değiştirildiğini ve neden değiştirildiğini ayrıntılı olarak açıklamalıdır.
  • Tüm commit’ler .pre-commit-config.yaml içinde tanımlanan pre-commit hook’larından geçmelidir. pre-commit kurulumu için yönergeler pre-commit.com adresinde bulunabilir.

1 yorum

 
GN⁺ 2024-12-06
Hacker News yorumları
  • USB sürücüsünü sıfırdan geliştirmiş olmasını övüyor. cat doom1.wad yazarak sistemi bozduğunu belirtiyor
  • Proje adını beğeniyor. Gerçekleştirdiği şeyler arasında en zor kısmın ne olduğunu ve ciddi engellerle karşılaşıp karşılaşmadığını soruyor
  • Yeni bir OS çekirdeği duyurusunda geleneksel olarak yer alan bir ifadenin eksik olduğunu belirtiyor
  • Projenin çok havalı olduğunu düşünüyor. Bu projeye haftada yaklaşık kaç saat ayırdığını ve öğrenci profilinin üniversite öğrencisi anlamına gelip gelmediğini soruyor. Eğer öyleyse, OS üzerinde çalışmasının eğitiminin bir parçası olup olmadığını merak ediyor
  • Geliştirme sürecinin nasıl ilerlediğini merak ediyor. VM üzerinde mi yoksa gerçek donanımda mı çalıştırdığını soruyor. Geliştirme sırasında neler öğrendiğini ve geliştirme kayıtlarını nasıl tuttuğunu soruyor
  • Çok fazla emek gerektiğini kabul ediyor. En belirgin zorlukların neler olduğunu merak ediyor
  • Beklenmedik bir özellik setine sahip bir proje olduğunu düşünüyor. Daha fazla yazılım taşımayı planlayıp planlamadığını soruyor
  • Projenin havalı olduğunu düşünüyor. Fork için alternatif isim olarak PlatanOS öneriyor
  • Bunun çok etkileyici bir başarı olduğunu düşünüyor ve proje adını da beğeniyor
  • Harika bir yan proje olduğu için tebrik ediyor. Benzer bir projeyi denemek isteyenler için başlangıç noktaları veya kaynaklarla ilgili tavsiye istiyor