İşletim Sistemlerinin GUI Alt Sistemlerine Genel Bakış


Bilgisayar sistemlerine terminal ile bağlanılması 1957 yıllına denk gelmektedir. Bu yıldan itibaren programcılar bilgisayarlarla klavye ve ekran yoluyla doğrudan etkileşim içerisine girmeye başlamıştır. Programcılar bilgisayarlarla text tabanlı olarak etkileşim haline girmişlerdir. Bu tür text tabanlı ekranlara konsol (console) ekranları da denilmektedir. 80’li yılların başında IBM ilk kişisel bilgisayarları çıkarttığında DOS işletim sistemi grafik bir arayüze sahip değildi. Daha sonra Microsoft da Machintosh sistemleri gibi (Machintosh sistemleri ilk grafik arayüz kullanan sistemlerdir.) Windows sürümleriyle birlikte grafik arayüz kullanımına geçmiştir. UNIX dünyası da 80’li yılların sonlarına doğru yavaş yavaş grafik arayüzlerle tanışmıştır. UNIX/Linux sistemleri ağırlıklı olarak server sistemlerinde yaygın olarak  kullanılmaktadır. Server sistemlerinde de grafik arayüz genellikle -yavaşlatıcı bir etken oluşturduğu için- bulundurulmamaktadır. Ancak kişisel bilgisayara yüklenmiş olan UNIX/Linux sistemleri ağırlıklı olarak grafik arayüzlerle kullanılmaktadır. Eskiden konsol ekranlarında karakterler ekrana kalıp olarak basılıyordu. Zaten bu devirlerde ekranın kontrolünü sağlayan elektronik birimler şimdikilere göre ilkel düzeydeydi. Sonra ekran nokta temelinde kontrol edilebilmeye başlandı. Bugün ekrandaki görüntüyü oluşturan en küçük noktasal birime pixel (picture element) denilmektedir. Modern grafik kontrol kartları bu pixel'leri işleyip ekrana gönderme konusunda çok yetenek kazanmışlardır.


  • Windows sistemlerinin çekirdek (kernel) ile entegre edilmiş bir grafik sistemi vardır. Bu grafik sistem geliştirici düzeyinde GDI denilen bir API kütüphanesi ile kullanılıyordu. Hala bu kullanım devam etmektedir. Sonra Microsoft yine GDI üzerine GDI+ isimli bir kütüphane daha tasarlamıştır. .NET Form uygulamaları bu kütüphaneyi kullanmaktadır. Fakat Microsoft zaman içerisinde GDI’nin yavaş olduğunu gördüğü için pek çok katmandan geçmeden grafik işlemlerini daha çabuk yapan ve ismine “Direct X” denilen bir kütüphane daha geliştirmiştir. Direct X önceleri yalnızca oyun ve animasyon programcıları tarafından kullanılıyordu. Daha sonra Direct X'i kullanarak GUI elemanları oluşturan kütüphaneler GUI kütüphaneleri de ortaya çıkmıştır. Bununların en bilineni .NET dünyasında kullanılan WPF (Windows Presentation Foundation) ortamıdır.
  • UNIX/Linux sistemlerinde grafik çalışma çekirdek ile entegre edilmemiştir. Örneğin Linux çekirdeğinde grafik çalışmayla ilgili hiçbir kod yoktur. UNIX/Linux sistemlerinde temel grafik işlemler ayrı bir katman tarafından yapılmaktadır. Bu katmana X11 ya da yaygın ismiyle “X Window” denilmektedir. X Window sistemi client-server mantığıyla çalışan aşağı seviyeli bir katmandır. X Window çok temel pencere ve grafik işlemlerini yapmak için düşünülmüştür. Bu nedenle modern GUI uygulamaları için yetersizdir.  X Window sistemini doğrudan kullanabilmek için XLib denilen kütüphaneden faydalanılmaktadır. XLib’in daha modern XRC isimli bir versiyonu da vardır. Tıpkı Microsoft'un Direct-X alt kütüphanesi gibi UNIX/Linux dünyasında da daha hızlı grafik işlemler yapmak için "Open GL" denilen bir kütüphane de geliştirilmiştir. Open GL belli bir zamandan sonra "cross platform" olmuştur. Bu kütüphane Windows sistemlerinde de kullanılabilmektedir. Bazı "cross platform" GUI kütüphaneleri arka planda Open GL'den faydalanmaktadır.
  • Machintosh sistemleri 10 versiyonuyla birlikte UNIX türevi bir çekirdeğe geçmiştir. Mac OS X’in kernel kodları açıktır ve buna Darwin denilmektedir. (Darwin geniş ölçüde Free BSD ve Mach çekirdeğinin kodlarını bulunduruyor.) Mac OS X sistemlerinde grafik işlemler Cocoa denilen bir kütüphaneyle yürütülmektedir. Bu kütüphane Objective-C ve Swift dillerinden doğrudan kullanılabilmektedir. Cocoa'nın C’den kullanımı için Carbon isminde bir API grubu bulunmaktadır. Özetle bugünkü Mac sistemlerinde grafik işlemler çekirdeğin üzerine kurulmuş olan ve ismine "Cocoa" denilen bir katman kullanılarak yapılmaktadır.

GUI dünyasında cross platform kavramı ise "birden fazla işletim sisteminde aynı biçimde kullanılabilirliğini" ifade etmektedir. Örneğin Qt framework'ü Linux, BSD gibi UNIX türevi sistemlerde, Windows sistemlerinde ve Mac OS X sistemlerinde aynı biçimde kullanılan bir ortamdır. Ancak Qt yalnızca kaynak kod temelinde bir taşınabilirliğe sahiptir, çalıştırılabilen (executable) kod düzeyinde bir taşınabilirliğe sahip değildir. Yani biz bir platformda oluşturduğumuz çalıştırılabilir (executable) bir Qt dosyasını başka bir platforma götürerek çalıştıramayız. Fakat biz bir Qt projesini başka bir platforma götürüp orada derlersek uygulama aynı işlevsellikle çalışacaktır. Bu da geliştiricilerin her platform için başka bir ortam ya da kütüphane kullanma zorunluluğunu ortadan kaldırmaktadır. Qt "cross platform" luk özelliğini her sistemde o sisteme özgü altyapıyı kullanarak sağlamaktadır. Örneğin  UNIX/Linux sistemlerinde Qt doğrudan X Windows sistemini kullanarak işlevselliğini sağlamaktadır.


Mac OS X sistemlerinde ise Qt Cocoa alt yapısını kullanarak yazılmıştır.



Qt’nin Windows sürümünde ise “Direct X” alt yapısını kullanmaktadır.


Özetle işletim sistemlerinin GUI altyapısı bu şekildedir.


Ve Cross platform uygulama geliştirecek olanlar bu altyapıları kullanarak geliştirmelerini yapmak zorunda ya da bu amaca uygun geliştirilen framework'leri kullanması gerekmektedir.