İşletim sistemi nasıl yapılır?

Bak dostum, bu iş lafta olduğu kadar kolay değil. Seni durdurmayı asla istemem ama değil. Nereden bildiğimi soracak olursan, bir yıldır aralıksız gece gündüz araştırmalar yapıyorum.

Şimdi, OSDev'i okumayı üşenecek olabilirsin. Veya İngilizcen yetersiz gelir, ben sana bir kaç açıklama yapayım.

  • Bir OS yazdın, başlattın. Buraya kadar süpersin. Uygulamalar için sistem çağrıların ıvırın zıvırın var. Delinin teki geldi ve işletim sisteminde exploit buldu, ne yapacaksın? Nasıl çözeceksin? O deliden yardım mı bekleyeceksin/isteyeceksin?
  • En temelinden, sürücü yazmayı nasıl düşünüyorsun? Interrupt'lar, donanım erişimleri...
  • Dosya sistemin nasıl olacak?
  • OSDev'de Assembly dilini C/C++ gibi bilmen gerektiği yazıyor. Ve C/C++ ile de 10 yılı aşkın tecrübe iyidir diyor.
Eski mesajlarımda belki rast gelirsin, çok uzun bir liste çıkardığım da oldu. Bu işler kolay olsaydı geçmişte herkes kendi Microsoft'unu kurardı dostum.
 
Bak dostum, bu iş lafta olduğu kadar kolay değil. Seni durdurmayı asla istemem ama değil. Nereden bildiğimi soracak olursan, bir yıldır aralıksız gece gündüz araştırmalar yapıyorum.

Şimdi, Osdev'i okumayı üşenecek olabilirsin. Veya ingilizcen yetersiz gelir, ben sana birkaç açıklama yapayım.

  • Bir OS yazdın, başlattın. Buraya kadar süpersin. Uygulamalar için sistem çağrıların ıvırın zıvırın var. Delinin teki geldi ve işletim sisteminde exploit buldu, ne yapacaksın? Nasıl çözeceksin? O deliden yardım mı bekleyeceksin/isteyeceksin?
  • En temelinden, sürücü yazmayı nasıl düşünüyorsun? Interrupt'lar, donanım erişimleri...
  • Dosya sistemin nasıl olacak?
  • Osdev'de Assembly dilini c/c++ gibi bilmen gerektiği yazıyor. Ve c/c++ ile de 10 yılı aşkın tecrübe iyidir diyor.
Eski mesajlarımda belki rast gelirsin, çok uzun bir liste çıkardığım da oldu. Bu işler kolay olsaydı geçmişte herkes kendi Microsoft'unu kurardı dostum.

Hocam zor olduğunu biliyorum, sadece nasıl yapılır, hangi bilgilere ihtiyacım var bunun gibi şeyleri merak ettim. Oyun yapımı gibi bir şey değil bu iş maalesef.
 
Open Source nasıl yapılır? Yani farkı nedir diğer işletim sistemlerinden.

Sizin onların hangi verilerini topladığınızı, sistemin eksilerini, artılarını, çalışma yapısını görebilmesidir. Benim de severek kullandığım "Linux" diye bir kavram var. Araştırabilirsiniz. Burada yardım edenler şirketler vb. değil kullanıcı topluluğudur genelde.
 
Hocam zor olduğunu biliyorum, sadece nasıl yapılır, hangi bilgilere ihtiyacım var bunun gibi şeyleri merak ettim. Oyun yapımı gibi bir şey değil bu iş maalesef.
TerabyteForever dedi:
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.
 
Sizin onların hangi verilerini topladığınızı, sistemin eksilerini, artılarını, çalışma yapısını görebilmesidir. Benim de severek kullandığım "Linux" diye bir kavram var. Araştırabilirsiniz. Burada yardım edenler şirketler vb. değil kullanıcı topluluğudur genelde.

Linux biliyorum hocam. Ben açık kaynaklı nasıl yazılır diye merak ettim. Yani yazılım anlamında onu nasıl becerebilirim diye. Ama gerek kalmadı:).
 
Code Project sitesinde çok güzel bir makale var. Kendi kernel (çekirdeğini) yazabilirsin. Zor değil ve o makalede hazır yapılmış bir örnek bile var.

İşletim sistemi dediğimiz yapı sadece kernel (çekirdekten) oluşmaz. Yüzlerce, binlerce program ve bunları yazan yine binlerce, belki onbinlerce bilgisayar mühendisini kapsar. Bu açıdan bakılırsa Windows, macOS ya da GNU/Linux gibi işletim sistemleri Burç Halife, Taipei 101 ya da Yeni Dünya Ticaret Merkezi gibi yapılara benzetilebilirler. O kadar büyükler.

Çok basit bir işletim sistemi bile 3 katlı bir küçük bir apartman en azından.

Ne Burç Halife´yi, ne de 3 katlı apartmanı tek başınıza yapmanız pek mümkün değil. Evet, 3 katlı apartmanı tek başına yapan bir adam vardı:


Bir işletim sisteminin geliştirilmesine katkıda bulunmak istiyorsan topluluk tarafından geliştirilen herhangi bir GNU/Linux dağıtımına katılabilirsin ya da destek olabilirsin. Kendin de bir GNU/Linux dağıtımı geliştirebilir ve bir topluluk projesi meydana getirebilirsin. GNU/Linux dağıtımları açık kaynak kodlu ve özgür yazılımlar oldukları için herkese açıktırlar. Windows ya da macOS işletim sistemleri farklı olarak sadece Microsoft ya da Apple firmasının çalışanları tarafından kaynak kodları görülebilir ve geliştirilebilirler.
 
Bu çok uzun süren bir şey. İşletim sistemi yapmak için elinde bir API vs. yok. (Ancak UEFI ile yapmayacaksan.) Yani her şeyi sıfırdan obje olarak yazman gerekiyor. (Print gibi fonksiyonlar bile yok, VGA belleğine tek tek karakter atman lazım.) Yapısı ve internetteki az da olsa daha fazla olan kaynakları nedeniyle c/c++ öneririm. (Bootloader için Assembly gerekecek. ) Daha fazla bilgiyi YouTube ve Osdev'den öğrenebilirsin.
 
Tek başına sıfırdan işletim sistemi geliştirme konusunda TempleOS örnek gösterilebilir. Bu arada Linux çekirdeği Minix OS temel alınarak geliştirildi. Büyük ihtimalle Minix 'i şimdi burada ilk kez duydunuz cunku temeller pek bilinmez, popüler şeyler bilinir. Windows 10, macOS El Capitan sonrası versiyonlar, Ubuntu 20 sonrası versiyonlar.. OS olmaktan cok cloud servisine benziyor. Bu bağlamda (bazı linux sürümlerine ek olarak) bir tek BSD Unix ailesi (FreeBSD, OpenBSD) gerçek OS olarak devam ediyor.

Bir de, mevcut OS üzerine birkaç paket, birkaç utility ekleyince yeni OS olarak tanıtılması sorunu var. Pardus, bunlardan biri. Debian'a PiSi Paket Yönetimi gibi birkaç paket ekleyince yeni bir OS olarak tanıtılıyor.

2020'lerde 2001-2012 arası cıkmış OS'lerin sürümlerini kullanıyorum cunku bu sorunların hiçbiri yok. Bilgisayarı / sunucuyu açtığımda biliyorum ki, "cloud services" adı altında 10'larca gereksiz utility, daemon, vs çalışmıyor, sadece istediğim şeyler çalışıyor, RAM, HDD, CPU gereksiz kullanılmadığı için daha stabil kullanım sağlıyor.
 

Yeni konular

Geri
Yukarı