/i/Yazılım

Umuyoruz ki geleceğin yazılımcıları bu altinciden çıkacak!
    başlık yok! burası bom boş!
  1. 1.
    +24 -4
    Başlık için:
    (bkz: java şişirilmiş bir balondur)

    Java ve C#'a saçma demene hiç girmiyorum, umarım şakadır bu söylediğin. Windows'un boyutu ile alakalı söylediklerine gelirsek yuh amk yuh.

    x86 assembly, C, C++ biliyorum ve kendi işletim sistemimi geliştiriyorum baştan belirteyim. Hani kafadan uydurmuyorum bu söylediklerimi. Bu kadar büyük bir fark olamaz, mümkün değil.

    Öncelikle Windows büyük oranda assembly, C ve C++ ile yazılmış bir işletim sistemi. Windows'un boyutunun hatırı sayılır bir kısmının kaynak dosyalarına ait olduğunu da belirteyim şimdiden (fotoğraflar, sesler, simgeler, yazı tipleri, diller vs.)

    Dahası Windows monolitik bir çekirdek modeline sahip değil hibrit çekirdek modeline sahip, yani çekirdek, sürücüler servisler vs. çekirdeğin içinde değil, kısmen ayrı halde.

    Yani Windows 1 milyar satır koda sahip tek bir parçadan oluşmuyor, muhtemelen 5000-10000 satırlık çok daha küçük parçalardan oluşuyor.

    Java ve C# gibi dillerin aksine C ve C++ bytecode interpreted dil değil, yani yazılan kodlar doğrudan makine diline dönüştürülüyor.

    C Calling Convention'a bakacak olursak her bir fonksiyon çağırısı için pek de büyük bir overhead yok.

    https://hastebin.com/upizomewep.cpp 'deki

    fonksiyon derleyici tarafından basitçe şu hale getiriliyor:
    https://hastebin.com/xugosatuci.pl

    Bunu bir yerden çağırmak istediğinde de şu oluyor:
    https://hastebin.com/ogirukudat.pl

    Stack frame kurulumu ve temizlenmesi hariç neredeyse hiç overhead yok. Fonksiyon büyüdükçe bu kısmen artsa bile fark asla bahsettiğin kadar büyük olamaz. Windows'un kodlarının %95'ine çöp demek, çekirdeğe ait ek modüller ve sürücülerle birlikte tüm kullanıcı deneyimini (GUI, efektler, simgeler, sesler vs.) ve user-space programları, kütüphaneleri çöpe atmak demektir.

    Windows çekirdeğinin (fazlasıyla) ufaltılmış başlatılabilir versiyonu bile (boot.img'den bahsediyorum) 200-300 MiB iken Windows'un 50 MiB olmasını beklemek yanlış olur.

    işletim sistemime gelecek olursak boyutu 40-50 MiB civarında, tam da Windows %100 assembly ile yazılırsa olmasını beklediğin boyut yani. Peki benim işletim sistemimin nesi var biliyor musun? Neredeyse hiçbir şeyi.

    Çekirdeğim 32 bitlik flat-memory-model higher half ve hibrit bir çekirdek. Sıfırdan büyük oranda assembly ve biraz da C ile yazıyorum. Bootloader yazmakla uğraşmadım şimdilik GRUB yetiyor.

    Çekirdeğim basit bir bellek yöneticisine, preemptive çoklu görev desteğine, APIC'den IRQ desteğine (PIC'ten APIC'e geçmek tam bir işkenceydi ama değdi), ACPI desteğine ve basit bir AML interpreter'ına, PCI aygıt desteğine, V8086 görev desteğine ve kesme tablosu 74h üzerinden sistem çağrı arayüzüne sahip.

    Çekirdekten ayrı olarak çalışan yazdığım modüller ise şimdilik basit bir ext2 ve fat32 sürücüsü, oldukça yavaş bir IDE HDD/ODD sürücüsü, AC97 ses sürücüsü, seri port sürücüsü ve V8086 görevleri kullanarak çalışan bir VESA grafik sürücüsü. Donanım hızlandırma sürücüsü falan yok bu arada SSE olmasa ekran yenileme 10 fps hızında ancak olur.

    Üstelik daha işletim sistemime ne bir CLI ne de bir GUI yazabildim, sistemimi seri porttan debug ediyorum.

    User-space olarak da Newlib'i port ettim. Newlib'i port etmeyi başarınca işlerim çok hızlandı. Newlib'den sonra Binutils'i ve GCC'yi kütüphane olarak da libjpeg'i, libpng'yi, freeType'ı ve cairo'yu port ettim. Bash veya Dash'i de port edip güzel bir CLI'ye sahip olma gibi bir planım da var.

    50 MiB'lık çoğunlukla assembly ile yazdığım, gereğinden fazla kod kullanmaya çalıştığım işletim sistemim bu. Üstelik üstte bahsettiğim user-space programları ve kütüphaneleri işletim sistemimin boyutuna dahil etmiyorum, onlar 400 MiB civarında tutuyor.

    Eğer işletim sistemime ciddi ve güzel bir GUI eklemeye kalkarsam boyutu rahat 80 MiB'a çıkar. işletim sistemimi tek başıma 2-3 ayda ancak bu hale getirebildim, yani basit bir iş değil bu.

    Kısacası Microsoft tüm sistemi assembly ile yazıp zaman kaybetmeyecektir. Ha yazarsa ne mi olur, boyutu 3 GiB'tan biraz da zorlamayla 2 GiB'a çekilebilir, daha fazlası olmaz.

    Hesabını baştan yap panpa.
    ···
   tümünü göster