Clockwork İşletim Sisteminin Arkasındaki Hikaye

Veya belki “Behind The Story of Clockwork O.S”

Linus Tolwards, Linux’u yaptığında bu serüveni anlatan belgeselin başlığı işte bu tarz bir şeydi. Zaten Linus Tolvards’ ın yaptığı işlere de hep çok özenmişimdir.

Kocaeli Üniversitesinde Bilgisayar Mühendisliği okuyordum ve 4.sınıfa yeni geçmiştim. Bitirme projem için bir konu seçmem gerekiyordu. Kendimi bildim bileli yazılımdan anlayan birisiydim. İlk kodumu yazdığımda o kadar küçüktüm ki hatırlamıyordum bile. 2007’li yıllarda e-kolay diye bir site vardı. Babam oradan araba bakar, beğendiği araba ilanlarını sağ tıklayıp indirirdi. Ben de ordaki HTML kodları değiştirip sayfadaki değişime gözlemleyerek başlamıştım sanırım.

Her neyse, bu benim hikayem değil. İşletim sistemimin hikayesi.

Benim projem şöyle herkesin yapamayacağına “inandığım” bir şey olmalıydı. Benzersiz ve bana has bir şey olması gerektiğine kendimi inandırmıştım.

Özellikle bölümdeki diğer projelerin en iddialısı olmalıydı. Çünkü her yıl üniversitede bitirme projesi sergisi yapılıyordu ve ben ilk kodumu yazmamın ardından neredeyse 10 yılı devirdiğim için arkadaşlarımla bu konuda bir hayli iddialaşıyordum. Bölümdeki bitirme sergisinde 1.olmalıydım. Bunu garantilemek için galiba biraz abartıya kaçmak gerekiyordu. Ben de malum konuyu seçtim.

Koca bir işletim sistemi projesine girişirken ilk başta hedefim bu kadar küçüktü. Kendi üniversitende yapılan öğrenci fuarında ön planda olmak 🙂 Bir işletim sisteminin kaderi için oldukça kötü bir başlangıç olsa gerek. Acaba dünyada daha küçük hayallerle bir işletim sistemi yapan var mıdır bilmiyorum. Ama şu an tek düşündüğüm; şu anki vizyonum ile projeye girişseydim kesinlikle inancım sarsılırdı ve kendimi yarı yolda bırakırdım. Sanırım ileriyi görememek ve at gözlüğü takmak bazen daha iyidir.

“Ben Bir işletim sistemi geliştireceğim”

Bölümümün başkanı olan Yaşar Hoca ile tanışıyorduk. Bitirme projesi olarak bir işletim sistemi yapmak istediğimi ona mail attığımda bana şöyle cevap verdi

???

Evet. Harbiden de “???”. Kafamın içindekiler de tamamen bundan ibaretti. Daha önce defalarca kez linux dağıtımları ile uğraşmış, sökmüş takmış, kaynak koddan kurmuştum. Githubda bir çok Linux programına fork atmış, PisiLinux ‘un işine yaracak bir çok yazılımda görev almıştım. O yüzden ilk olarak Linux tabanlı bir işletim sistemi geliştirme fikri aklıma geldi. Linux hakkında parça parça çok fazla şey bilsem de yine de “bir dağıtım nasıl yapılır ” sorusuna verebileceğim hiçbir cevabım yoktu.

Ben de araştırmaya başladım. İlk dönem araştırma problemleri tezini yazmam yeterli oluyordu. Benden somut bir çıktı beklenmiyordu. Ama ben yine de elimden geldiğince bir şeyler yapmaya çalıştım. Sonra sıradan bir masaüstü dağıtımını yapmanın hiçbir numarası olmadığını farkettim.

  1. Debian’lı Linux çekirdeğini indir
  2. Kurulacak paket listesini el yordamı ile düzenle
  3. Çekirdeği derle
  4. Paket ve hazır masaüstü ortamlarından birini kur (GNOME,KDE felan)
  5. Debian Distrubitor Tool’u ile bir dağıtım dosyası olarak çıktı al.

Bu mudur yani ? Bütün bitirme projem 1 haftalık bir iş mi olmalı ? Evet belki güzel proje derlerdi sonuçta bu alanda çalışan pek mühendis yok Türkiye’de. Ama ben kendime yediremezdim.

Açık kaynak gerçekten muazzam bir şey. Ama bazı şeyleri aşırı basitleştirmesi de sinir bozucu. Yukarıdaki örnekte olduğu gibi. İşletim sisteminde bir komut istemi, arayüz, dosya yöneticisi vs. olacaksa bunları ben yazmalıydım.

Ben yapmalıydım ve kendime özgü farkımı da katmalıydım. Yenilikçi bir değer taşımalıydı. Yoksa bir proje üretmenin ne anlamı var ? Aynı şeyleri ısıtıp ısıtıp insanların önüne koymanın; yersiz övgü toplamaktan başka kime ne faydası var ?

Bugün bu yazıyı okuyanlardan herhangi birisi, gidip hazır toollar, hazır programlar ve masaüstü ortamlarını birleştirerek hazır tabanlı bir linux dağıtımı yapabilir. Sadece logoları değiştirir ve o kadar. Ve belki çevresine yutturur, hatta haberlere çıkar. 5 dakikalığına ünlü olur ve “hey, ben işletim sistemi yapıyorum. bana destek olun ülke kalkınsın” der. Ve bu olay unutulur, rafa kalkar gider. Ben buna kolay kolay razı gelmeye niyetli değildim. Bu nedenle hiçkimsenin yapmadığı bir işe giriştim

POSIX’ten başla

Posix katmanı. C++ ile yazılan programların Linux ve Unix’te de aynı linkler ile bağlanarak çalışmasını sağlayan bir API olarak geçer. GNU’un nimetlerinden birisidir. İşte bu, benim hikayemi ateşleyen fitil oldu.

İlk dönem; başta Dalvik sanal makinasını Linux çekirdekli bir işletim sistemine giydirmeyi başarmıştım. Özetle masaüstü bir bilgisayarda emülatör olmadan bir .apk dosyasını kurup açabilecek bir işletim sistemi yapmıştım. Eğer Linux’un ARM sürümü çekirdeğini bu proje hiyerarşisi ile derlerseniz, POSIX geri uyumluluğu sayesinde aynen mobil cihazlarda da çalışabileceğini farketmiştim. Yani özetle (A)ndroid (P)ac(k)age kurup çalıştırabilen bir işletim sistemi yapmıştım.

Bu projenin içinde benim pek kodum yoktu. Daha çok sistem admini gibi doğru paketleri doğru yerlere oturtmuş, çetin derlemeler ve kurulumlar yapmıştım. Elbette katmanların haberleşmesi için API ve Interrput’lar yazmıştım ama beni çok tatmin etmemişti yaptığım iş . Bu işletim sistemini tam olarak ben yapmıştım ama Dalvik sanal makinası zaten APK ‘yı kurup .DEX leri çalıştırarak asıl sihiri gerçekleştiren şeydi. Onu yapmadığım sürece işletim sistemini nasıl tamamen ben yapmış olabilirdim ki ?

Kaldı ki çekirdek de Linux Kerneliydi. Yarın bir gün ben bu projeyi yayınlayınca koca bir topluluk üzerine çullanacak ve kodları benden zorla gasp edecekti. Buna da razı gelemiyordum. Neden bilmiyorum. Hayır sever bir insanım ama her emeğimi paylaşmaya gelemiyorum. Bu sanki komünizm gibi hissettiriyor.

Unix’e Geç. (Allah’ım Lütfen Çalışsın)

Bu yazıyı okuyan açık kaynak sevdalısı arkadaşlar bana kızmasın. Belki şimdi bile Clockwork O.S’un tüm kaynak kodlarını yayınlayabilirim. Ama o dönem henüz newbie olduğum için bu tarz şeyler bende “gasp edilme” hissiyatı yaratıyordu.

Linux, GPL lisansı ile lisanslanmıştı. Yani Linux ile bir şeyler yapıp insanlara sunduğumda, kaynak kodumu da paylaşmak zorundaydım. Ben de BSD lisansı ile dağıtılan Unix’e gözümü çevirdim. BSD lisansı bana “al bu çekirdeği ne yaparsan yap. İster yamala ister başkasına sat” diyordu.

Bu benim için bulunmaz bir nimetti hemen projeyi Unix çekirdeğine geçirmek istedim. yazdığım tüm alt yapıyı POSIX uyumlu C++ ile yazdığımdan; Unix’te de aynı şekilde çalışacağına inanmıştım.

Tabii ki çuvalladım. Evet posix katmanı sayesinde kodda değişiklik yapmama gerek yoktu ama onun dışında her şeyde yapmam gerekmişti. Dizin sisteminden dosya sistemine kadar her şeyi yeniden yazdım.

Unix’te sağlam bir paket yöneticisi yoktu. OSX için brew felan vardı ama benim işletim sistemimde doğru çalışmıyordu. Unix’teki port sistemini otonom hale getirip paketleri kaynak koddan derleyerek kurabilen bir paket yöneticisi geliştirdim. Paketleri kendi sunucumda saklamaya başladım.

Zamanla Unix çekirdeğine o kadar hakim oldum ki; yamalarla çekirdeğe başkalaşım geçirttim. Örneğin Shell komutları artık Türkçeydi çünkü kendi Shell’imi yazmıştım. Bourne Again Shell’siz bir unix like os…

Kendi paket yöneticimi yazmıştım. Kendi paket formatımı ve diğer çılgınca bir sürü şeyi geliştirmiştim.

Ama bir sorun vardı

ve ben bu sorunu hep illa bi şekilde çözerim diyerek göz ardı etmiştim. Sorun şu ki; Linux’a kurup çalıştırdığım dalvik sanal makinasını unix’te bir türlü ayağa kaldıramamıştım. Bir türlü çalışmıyor, ekrana görüntü gelmiyor, sanal makina sürekli memory leak vererek sisteme kesme atıyordu. Kafayı sıyırmak ve sinir krizi geçirmek üzereydim. Herşey bunun için mi ?

Evet şimdi kendi paket yöneticim, konsol komutlarım ve bir ton lanet şeyim vardı ama masaüstü ortamım bile yoktu. Mouse ile çift tıklayıp dosya açabileceğiniz bir sistemim bile yoktu. Ben bunları .APK olarak yapar ve dalvik ile de unix çekirdeği üzerinden çalıştırırım diye umuyordum. Ama olmuyormuş.

Dalvik sanal makinasını çözebilecek kadar derinlemesine java bilmediğim için dalvik ile çalışmaya devam edemezdim. Ben C++ gurusuydum.

ve böylece android uygulama çalıştırma, dalvik çatısını kullanma ve android display manager ile konsoldan gui’ye atlama gibi şeylere bel bağlamaktan vazgeçtim.

Gemileri yakma zamanı.

Dalvik, java, Android, Linux’tan devşirme posix paketleri.. Bunların tamamını bir gecede yakma kararı aldım. Artık bunlara bel bağlamayacaktım. Bunları imha etmemle beraber işletim sistemim o kadar yalın bir hal aldı ki; benim yazdığım çekirdek katmanı ve unix çekirdeğinin driver sistemi dışında hiçbir şey yoktu artık. (Dikkat ettiyseniz ilk defa işletim SİSTEMİM dedim. Çünkü bu yeni temele geçmemle beraber, kendi yazdığım kod; kullandığım kodları işlev ve sayı olarak bayağı bir aşmıştı.)

Aşırı düzeyde sade, nerdeyse sıfırdan yazmışımcasına bana ait bir çekirdek ile başladığım noktaya dönmüş gibiydim. Ama en azından artık gitmem gereken yolu çok iyi biliyordum. Kendi grafik motorumu ve masaüstü ortamımı yazacaktım. Zaman kalırsa belki bir de pencere yöneticisi. Bir kaç tane de örnek uygulama… Hepsi bu.

ANCAK ELBETTE HEPSİ BU DEĞİLDİ. Benim için malesef o kadar kolay bir kurtuluş yoktu. Yukarıdaki yaptıklarım yetmezmişcesine bu proje kapsamında

  • Bir işletim sistemi
  • Bir masaüstü ortamı ve pencere yöneticisi (KDE,GNOME vs.yerine kendi işletim sistemim ile bütünleşik ortam. OSX için Xquartz gibi)
  • Bir display motoru
  • Bir uygulama mimarisi (.APK’yı çalıştıran Dalvik sanal makinası yerine kendime ait Highway Sanal Makinası)
  • Bir paketleyici (.UYG formatında uygulama üretir)
  • Bir uygulama marketi (Tıpkı google play store gibi)

ve daha nice şeyleri sığdırmayı başlardım. O kadar abarttım ki sanki unix çekirdekli küçük windows gibi (ama çok daha büyük gizemli bir avantaşa sahip) bir şey çıktı ortaya. Şu anda bunların hepsini burada daha fazla anlatabilecek efora sahip değilim. Zaten teknik alt yapıları bir çok yerde defalarca anlattım. Zaten bu yazımı da yazılımla alakası olmayan “sivil” bir okuyucu profili için yazmıştım. Belki bu yazıya devam ederim ilerde.

Clockwork = Saat Mekanizması

Ve evet. Şimdi geldiğim noktadayım.

Android alt yapısı bile Linux’ta çalışıp Unix’te çalışamıyorken benim Highway ve Karma’m hiçbir port süreci geçirmeden, sadece kodları aktarıp yeniden derleme ile hem linux üzerindeki sistemim hem de unix üzerindeki sistemim üzerinde tıkır tıkır çalışıyordu. saat gibi tıkır tıkır. İşte o anda bu ismi ona uygun gördüm.

Yaptığım tüm çalışmaların teknik altyapısını buradaki linklerden inceleyebilirsiniz. İşletim sistemini ve uygulama marketini incelemenizi tavsiye ederim.

Web sitesi : http://clockworkos.com/

Clockwork İşletim Sistemi’nin uygulama marketi : http://market.clockworkos.com/

Clockwork İşletim Sistemi’nin uygulama marketinin uygulama geliştiriciler içni paneli (yazılımcıysanız uygulamanızı yayınlamanız için bu panele üye olmanız gerekir) : http://market.clockworkos.com/developer

Clockwork’ün Teknik Detayları : http://clockworkos.com/blog/post/teknik-altyapi

Highway Hakkında Makale : http://clockworkos.com/blog/post/highway

Kullanıcılar için dökümantasyon : https://help.clockworkos.com/

Yaptığım işletim sistemine uygulama geliştirmek isteyenler için dökümantasyon: https://developer.clockworkos.com/

Duyuru sayfası : http://clockworkos.com/blog/post/new-website

Tüm bu çalışmalarım neticesinde Tubitak 2242 yarışmasında İstanbul Asya merkezli marmara bölgesinde 1.liğe layık görüldüm. Şimdi sırada Türkiye Finali var. Durumları inşallah buradan güncelleyeceğim, takipte kalın 🙂

Daha Fazla Kişiye Ulaşması İçin Bu İçeriği Paylaşabilirsiniz :

“Clockwork İşletim Sisteminin Arkasındaki Hikaye” üzerine 8 yorum

  1. Merhaba. Ümit bey

    İşletim sistemini test etmek isterim. 32bit live versiyonu olacaktır umarım

    Açık kaynak tan kapalı yapma amacınız lisans ücretimi.

    Yazınızda kaynak kodu yayınlarım demişsiniz bakmamız mümkün mü

    46k satırla os. Yapılabiliyor mu

    Çekirdek başkasının olduğu için sadece arayuz mu yaptınız

    1. Merhaba Ali bey,
      İşletim sistemi şu anda x64 ve ARM64 mimarilerde geliştirilebilir.

      İşletim sistemi halen geliştirilme aşamasında, nitekim hem bir iş yerinde çalıştığım, okulum devam ettiği ve bir yayın evinden aldığım teklif üzerine kitap yazdığım için süreç biraz yavaş ilerliyor. İşletim sistemini mevcut açıkları ve problemleri ile dağıtıma hazır hale getirmeyi riskli buluyorum. Şu anda elimdeki sürümü çok kısıtlı bir kitle tarafından denenmesini uygun buluyorum. Teknofest Tübitak 2242 yarışmasında jüri üyelerine işletim sisteminin bir kopyası iletilmiş idi.

      46 bin satır ise haberdeki hatalı bir ifade. Yalnızca Shell yazılımının 46 bin satır koddan oluştuğunu bir python scripti ile saydırmıştık. Bu habere yanlış yansımış. Blog yazısını esas alın.

      Ek olarak bir işletim sisteminin çok az bir bölümü çekirdektir. İşletim sistemi geliştirme üzerine çalışmamış arkadaşlar işletim sisteminin çoğunun çekirdekten oluştuğunu sanıyor. Çekirdek, işletim sisteminin donanım seviyeli bir parçacığıdır. Bir işletim sistemini işletim sistemi yapan, çekirdek üzerine inşaa edilen her şeydir.

      Clockwork işletim sistemi “BSD” tabanlı. Dolayısı ile Sony’nin Playstation 4 için geliştirdiği işletim sistemi de “FREEBSD” tabanlı. Dolayısı ile sony burda yalnızca “arayüz” yapmış olmaz.

      Playstation OS hakkında :https://en.wikipedia.org/wiki/PlayStation_4_system_software

  2. Merhaba sizin sistemi test etmek istiyoruz trde birçok forum kullanıcısı bekliyor

    Yazınızdan anladığım kadarıyla açık kaynağı kapalı kaynak yaparak ücretli lisans satışı yapmak istiyorsunuz

    1. Ali bey, umit@aksoylu.space mail adresim üzerinden işletim sistemi hakkında sizle iletişime geçtim.
      Açık kaynağı kapalı kaynak yaparak ücretli lisans satışı hatalı bir ifade. Zira Clockwork zaten bir işletim sistemi ve taban dağıtım olan FreeBsd ise “bsd” lisansına sahip. Dolayısı ile kapalı kaynak kodlu bir işletim sistemi denemesi.

    1. Merhaba, standart bir BSD dağıtımı ile aynı driver alt yapısını kullanıyor. Şu anda maalesef projeye ara vermek zorunda kaldım. İnşallah tekrar dönüş yapacağım

  3. Selamlar, çalışmanız güzel olmuş.
    Benim de 1-2 yıl öncesine kadar buna benzer fikrim vardı. Fikir daha çok mobil içindi. Fakat çok derine inememiştim.
    Şimdi ise birkaç gün önce sizinle alakalı haberi gördüm. Ve ilham alıp araştırmalara tekrar başladım. Bu makalenizi okumadan önce ben de araştırmalarım sonucu FreeBSD üzerine göz diktim. Önceden bulamayıp şimdi bulduklarıma göre MacOS’te de FreeBSD olan ve kendi yazdıkları DarwinOS kullanıyorlarmış. Ve üzerine de arayüz olarak Aqua geliştirmişler.
    Merak ettiğim siz grafik kısmında neler yaptınız?
    Yani window manager, gui komponentlerin oluşturulması gibi konuları nasıl çözdünüz?
    Kısacası sizden tavsiye istiyorum. (Örn: wayland kullan. şu kaynakları incele: [linkler])

    1. Merhabalar, yorumunuz için teşekkür ederim.

      Bir yazılım firmasında Lead software developer olarak tam zamanlı çalıştığım ve aynı zamanda da Kodlab yayınevi bünyesinde kitap yazdığım için maalesef şu anda projeye devam edemiyorum. Hem işletim sistemini geliştirmek ve kullanılabilir ticari bir versiyonla sunmak hem de bildiklerimi tutorial & blog olarak paylaşmak istiyordum. Belki gelecek bir tarihte tekrar bu alanda devam etme şansım olur. Şahsen ben bu alanda ürün geliştirmeyi ve bildiklerimi paylaşmayı çok istiyorum.

      Sorularınızın cevaplarına gelecek olursak MacOSX, Unix benzeri bir dağıtım kullanıyor ancak bu FreeBSD’nin tamamen aynısı değil. Unix-like bir çekirdek üzerine darwin yamasını içeriyor. Aqua arayüzü ise XQuartz adı verilen display sistemine dayanıyor.

      Burada Window manager veya Gui bileşenlerini oluşturmak esasen birkaç fazdan oluşan bir işlemdir. İlk olarak grafik çıktılarını üretecek ve üretilen çıktıları (kerneli tty moddan grafik moduna geçirerek) ekrana çizdirecek mekanizmaları beraber kullanmamız gerekir.

      Ben bu çalışmam kapsamında oyunların geliştirilmesinde de kullanılan OpenGL kütüphanesini kullandım. Bugün C++ ve OpenGL kütüphanesini kullanarak (bir oyun motoruna ihtiyaç duymaksızın) 3D oyunlar geliştirmeniz,shader yazmanız dahi mümkündür. Arayüz yazılımımı OpenGL ile geliştirdim. Arayüz bileşenleri de yine arka planda opengl kullanarak oluşturduğum sınıflardan türettim. Dolayısı ile kullanıcının bu bileşenler üzerindeki eventlarını yakalacak callback fonksiyonlarını da geliştirdim. Bu yapıya highway adını vermiştim.

      OpenGL programının grafik çıktılarını ekrana yansıtmak için Wayland kullanabilirsiniz. Wayland’ın MacOSX deki XQuartz çatısının Open source karşılığı olduğunu düşünebiliriz.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir