Ben, Bilim & Teknoloji, Projelerim, Yazılarım

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 Bash komutları artık Türkçeydi. 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 :

Bir cevap yazın

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