Türkçe kaynak bulmak imkansıza yakın. Caydırmak istemem sizi yolunuzdan ama ha deyince yapılacak bir iş değil. Bilgisayar üzerinde yapılan en zor iş olarak geçmekte işletim sistemi yazmak.
Bilginiz olması gereken konulardan
sadece bazıları:
- C, C++, Assembly veya Rust.
- Dosya sistemleri.
- İşlemci hakkında bilgiler, kesmeler, işlemcinin belleği nasıl yönettiği... Yazsam roman olur cinsinden. Hatta şöyle söyleyeyim, klavyede yazılan bir karakter bile işlemcinin kesme moduna girmesini sağlıyor.
- Ağlar, sonuçta sürücülere TCP/IP desteğini sizin yazdığınız kernel sağlayacak. Sürücüler de bu kernel'e sistem çağrıları aracılığı ile ulaşacak. (Değineceğim.) Çünkü sürücüler ile işletim sistemleri, işlemcinin farklı katmanlarında çalışmaktadırlar.
- Sürücüleri kendiniz yazmalısınız. En basit işletim sistemi için bile VGA Text Mode ile ekrana görüntü vermek için bir sürücü yazmalısınız.
- Bu işletim sisteminin GUI kütüphanelerini kernel'e de yazabilirsiniz, veya UNIX tarzı bir işletim sistemi yazacaksanız işiniz daha kolay, X11 kullanabilirsiniz.
- Tabii ki saf X11 kendi başına yetmeyecektir. Qt ile veya X11'in sağladığı kütüphaneler ile bir masaüstü ortamı veya pencere yöneticisi yazabilirsiniz, kolaya kaçacaksanız da KDE gibi masaüstü ortamlarını veya sadece Openbox gibi bir pencere yöneticisini tercih etmelisiniz.
- UNIX demişken, eğer UNIX benzeri bir şeyler ortaya koyacaksanız, UNIX'in yaptıklarına benzer şeyleri implemente etmelisiniz. Örneğin UNIX'in parent-child uygulama ilişkisi gibi.
- Bu uygulama ilişkisine de değinmişken, bu uygulama ilişkisini sağlamak için sistem çağrılarınız olmalı. fork(), exec() gibi. Linux'taki sistem çağrılarını görmek için uçbirim'e "man syscalls" yazmanız yeterli.
- Sıfırdan çekirdek yazacaksınız, ama çekirdeğinizin C gibi bir dile desteği olmayacak, kabul edilemez. "libc" diye tabir edilen C kütüphanesini işletim sisteminizin kernelinin sistem çağrılarına göre baştan yazmalısınız. Kernel'in sistem çağrıları UNIX çağrılarıyla birebir eşitse, daha az yorucu bir iş olacaktır.
- Kendi işletim sisteminize geliştirici çekmeniz lazım, bunun için de geliştirici araçları gerekli. Kernel için geliştirme yapılabilsin istiyorsanız, Herhangi bir C derleyicisini sisteminize port etmeniz gerekli. GCC'yi port edebilirsiniz.
- UNIX felsefesine uygun olarak bir tane kabuk (shell) gerekli. Ya kendiniz yazabilirsiniz, ya da Bash gibi, Zsh gibi kabukları sisteminize port edebilirsiniz.
- Şu anki UNIX benzeri veya UNIX tabanlı sistemlerde "pseudoterminal" yapısı kullanılıyor, yani terminal emüle edilmekte. Terminal emülatörü gerekiyor.
Daha da fazlası var. Fakat daha da uzatıp bu listeyi Topkapı Sarayı ihtiyaç listesi gibi bir hale getirmeye gerek yok bence.