Yazarsın. Yazarsın yazmasına da neler neler bilmen, neler neler eklemen gerekiyor o çekirdeğe. Yeni standartların çıkması senin için daha çok mesai saati demek olacak bu kernel üzerine. Seni caydırmak istemem ama keşke çizildiği kadar kolay olsa bu iş.
Basit bir UNIX benzeri çekirdek yapman için gereken
sadece bir kaç şey (hepsi değil):
- İlk olarak, bellek yönetim modeli belirlemelisin. Ana sayfada makalem var bu konu hakkında, segmented veya paged modellerinden birini seçebilirsin.
- Belirli bir seviyede teknik İngilizcen olmalı, bu konuda makaleler vs. okumak gerekli ve hiç Türkçe kaynak yok desem yalan olmaz sanırım.
- C, C++ veya Rust dillerinde işletim sistemi yazacak kadar bilgin olmalı, OSDev'de bu süre en az 10 yıl + gömülü sistem geliştirme hakkında biraz bilgi olarak geçmekte. Ayrıca bahsettiğim diller kadar da Assembly bilmen gerekli. Kendi bootloader'ını yapmasan bile C, C++ ve Rust ile yazılmış kodlar, işlemcideki "stack pointer'ın" halihazırda ayarlanmış olmasını bekler, bu yüzden de eğer Assembly ile duruma müdahil olmaz isek sistem çalışmayacaktır.
- UNIX benzeri bir sistem yapacaksın, bu yüzden monolitik çekirdek yapman gerekiyor, yani sürücüler de çekirdeğe dahil olacak.
- İşletim sistemi teorileri hakkında fikir sahibi olmalısın. Tanenbaum gibi kişilerin kitaplarını okuyarak bilgi edinebilirsin.
- İşlemcilerin interrupt'larını (kesme) kontrol edecek bir tablon olacak. Klavyede bir tuşa basman bile interrupt olarak sayılıyor.
- İşletim sistemin VGA Text Mode tabanlı mı olacak yoksa grafik arayüzlü mü? Text Mode'da çalışan bir sistem yapmak daha basit.
- Sistem çağrıların olacak ki uygulamalar senin çekirdeğin üzerinden donanım ile haberleşebilsin, Linux'ta 116 tane sistem çağrısı bulunmakta. Belki de sen daha fazla sistem çağrısı ekleyebilirsin, senin kararın.
- Sistemi inşaa ettiğin aletler hakkında çok fazla bilgi sahibi olmalısın. GCC'nin flag'ları mesela.
- Çok iyi bir dokümantasyon hazırlayabilmelisin. Kendin kullanacak olsan bile sadece, dünkü yazdığın kodu bugün okuyamayabilirsin.
- İşletim sistemini C++'ta veya Rust'ta yazsan bile bir C kütüphanesi gerekiyor. UNIX için sistem programlama C dilinde gerçeklleşiyor, çoğu dil C tabanlı, bizim iş kolaylaştıracak yazılımlarımızın çoğu da C tabanlı ve senin işletim sistemini yazmanda da yardımcı olacaktır C kütüphanesi. GNU'nun glibc kütüphanesini koyabilirsin. Aynı şekilde C++ kütüphanesi de iyi olacaktır derim.
- Dosya sistemin olmalı, basit bir şey yapacağımız için FAT32 koyduğunu varsayabilirim. Veya ext2 de koyabilirsin.
- Sürücüler de çekirdekte olacağından dolayı sürücüleri yazmalısın.
- Bellek koruması çoğu açığı önleyecektir.
- GUI'li yapacaksan ve GUI ile upraşmak istemiyorsan UNIX sistemlerde işimizi kolaylaştıracak olan Xorg veya XFree86 gibi GUI Server'ları kullanabiliriz. Veya tecrübe olsun dersen kendi GUI kütüphaneni yazıp çekirdeğe ekleyebilirsin. Bunun içinde de bir dünya event'i barındırman gerekli. Örneğin, mouse butonunun kliklenmesi, kliğin kaldırılması, mouse'un belirli bir pencereye girmesi... Bunları kaldıracak sürücün de olacak. Mouse sürücün, klavye sürücün...
- POSIX standartlarına uyman, yazılım desteğinin artması demektir. POSIX standartlarına uyman çok iyi bir kilometre taşı olacaktır işletim sistemi adına.
- Shell'ler hakkında çok tecrübeli olmalı ve bir adet shell portlamalısın. Bash, zsh, ksh... UNIX'i oluşturan temel yapılardan birisi de shell'lerdir.
- Geliştiricilere bir ortam vermen süper olur kendi işletim sisteminde, işletim sisteminin gelişimi için.
Ve bunları yaptıktan sonra da bir de GitHub'tan katkıda bulunan kişileri veya kullanıcıları bekleyeceksin. Zor iş dediğim gibi maalesef... Tekrar söylüyorum, amacım heves kırmak değil, bütün bunları yapabileceğini düşünüyorsan bu iş tam sana göre. Özellikle bilgiye aç bir kişi isen, hobi amaçlı işletim sistemlerini derlerken bile zevk alacaksın.