Bu yazımızda Xorg ve genel olarak Linux grafik dünyasındaki gelişmelerden bahsedeceğiz. Linux dağıtımları(ve diğer Unix tabanlı sistemler) iki boyutlu ve üç boyutlu grafikleri ekranda gösterebilmek için X Window System (X11 ya da X) adında bir altyapı kullanırlar. X, aynı işi yapan farklı programlara imkan veren bir "protokol" gibidir. Bu protokolün en yaygın kullanılan gerçekleştirimi ise X.Org Vakfı tarafından geliştirilen Xorg'dur.

X protokolünün kendisi 1984 yılında ortaya çıkmıştır ve pek çok farklı Unix sürümünde kullanılmaya başlanmıştır. Xorg ise 2004 yılında, XFree86 adındaki X gerçekleştiriminden ayrılan bir ekip tarafından, yine XFree86 kodları üzerine kurulmuştur. XFree86'nın kodlanmasının 1991 yılında başladığı düşünüldüğünde, temel alınan kod yapısının oldukça eski olduğu ve günümüzün grafik ihtiyaçlarına cevap verebilmesi için üzerinde çok fazla emek harcandığı kolayca görülebilir. Gelişen ekran kartları artık bilgisayarın kendi işlemcisinden daha fazla transistör içeriyor. Çok daha fazla işlem gücüne ve bellek ile çok hızlı veri aktarımı sağlayan veriyollarına sahipler. Bu kadar gelişmiş donanımlar geçen yüzyıla ait tasarım kararlarıyla sınırlı bir şekilde kullanıldığında, alınabilecek verim haliyle çok düşük oluyor. Bütün grafik işlerinin verimli bir şekilde halledilebilmesi için tasarımın değiştirilmesi ve pek çok farklı alt bileşenin yeniden yazılması gerekiyor. Bir süredir devam eden bu yeniden tasarlama ve yeniden yazım süreci üzerinde halen çalışılıyor, tamamlandığında ise Linux'taki iki ve üç boyutlu grafikler daha hızlı ve verimli çalışacak.

İsterseniz hep birlikte Xorg, ekran kartı sürücüleri ve Linux çekirdeği içindeki başlıca bileşenlerin ne olduğuna, ve bunlarda ne gibi iyileştirmeler yapıldığına bakalım.

DDX Device Dependent X: X'in bu bileşeni donanım aygıtlarıyla olan iletişimden sorumludur, ekrana çizilecek şeyleri grafik kartına gönderir, ekran çözünürlüğünü değiştirir. Eski X tasarımında XAA (XFree86 Acceleration Architecture) kullanılırken, yeni yapılanmada EXA veya UXA kullanılıyor olacak.

DRI/DRM Direct Rendering Infrastructure ve Direct Rendering Manager, X ile grafik donanımının doğrudan haberleşmesi için geliştirilen ikili bir yapıdır. Bu yapının ilk bileşeni Linux çekirdeğindeki DRM modülü, ikinci bileşeni ise X içindeki DRI sürücüsü. Bu yapı sayesinde grafik verileri çekirdek belleğine kopyalanmadan doğrudan grafik kartının belleğine gidebilir, bu da hızı arttırır. Ancak DRI/DRM'in kullanılabilmesi için her donanım sürücüsüne ayrı bir bellek yönetcisinin kodlanması gerekir ve de DRI/DRM günümüzün ihtiyaçları kadar çok miktarda veriyi taşıyabilecek biçimde tasarlanmamıştır.

GLX "OpenGL Extension to the X Window System" ise üstte bahsedilen bileşenleri kullanır ve X içindeki bir pencerede OpenGL'in kullanılabilmesine imkan sağlar.

Uçbirim Sürücüsü: X'in bu bileşenlerinin dışında, Linux çekirdeğinin uçbirim (terminal/konsol) sürücüsü de aynı grafik donanımını kullanır ve ctrl+alt+fXX ile ulaşılabilen uçbirimleri sağlar. Ekranın kullanımı X'ten uçbirime geçtiğinde ve tam tersi durumda, grafik donanımının resetlenmesi gerekir. Bu sebepten uçbirime geçiş bir kaç saniye gecikmeli gerçekleşir.

Gelişen ve güçlenen ekran kartlarının belleğini daha hızlı ve verimli kullanabilmek için Linux çekirdeği içine ekran belleği yöneticileri yazılmaya başlanmıştır. Bu sayede hız kazancının yanı sıra, her DRI sürücüsünün kendi bellek yönetimini kodlama zorunluluğu ortadan kalkmıştır. Çekirdek için yazılan ilk bellek yöneticisi Tungsten Graphics tarafından geliştirilen TTM olmuştur. Sunduğu programlama arayüzü karmaşık bulunan TTM'nin yeni ekran kartlarına destek vermesinin zor olacağı pek çok geliştirici tarafından dile getirilen bir kaygı olmuştur. Intel tarafından geliştirilen GEM bellek yöneticisi ise daha sade bir programlama arayüzü, ve yeni çıkacak ekran kartlarına daha iyi destek sağlamakta olduğundan tercih edilmiştir. Şimdilik sadece Intel ekran kartı sürücüsünün kullandığı GEM yakın bir gelecekte olgunlaştıktan sonra diğer ekran kartları tarafından da kullanılacaktır. Örneğin ATI grafik sürücüsü için bu konuda çalışmalar başlamıştır.

Çekirdekteki grafik bellek yöneticisi yenilenirken, DRI da yenilenmiştir ve DRI2 yazılmaya başlanmıştır. DRI2 sayesinde, ekran çözünürlüğü ve diğer ayarlar tamamen çekirdek'te yapılacaktır. Bunun sayesinde sistem açılışı sırasında ve uçbirimlere geçişlerde ekrandaki görüntü gidip gelmeyecek, hızlı bir geçiş yaşanacaktır. Aynı zamanda DRI2 sayesinde Linux, sistem askıya alındığında daha güvenilir çalışan bir grafik altyapısına sahip olacak, ekran kartlarının güç yönetimi özelliklerinden daha iyi faydalanıp enerji tüketimini de azaltacaktır.

İki boyutlu grafikler için de halen yaygın kullanılan XAA yerine geçmek üzere EXA geliştirilmeye başlanmıştır. Intel, çekirdeğe yazdığı GEM bellek yöneticisinden sonra, onun özelliklerini kullanan UXA'yı geliştirmiştir. EXA ile aynı programlama arayüzünü kullanmasına rağmen, GEM'in getirdiklerinden faydalanması ve eski kodların büyük bir kısmının çıkarılmış olması nedeniyle UXA'ya EXA'dan farklı bir isim verilmiştir. UXA'nın da yakın bir gelecekte Intel dışındaki sürücülerde de kullanılması beklenmektedir.

Büyük bir değişim içine giren Linux grafik altyapısı, bu değişimi tamamladığında çok daha iyi üç boyutlu ve iki boyutlu grafik performansı sağlayacak. Bunun yanı sıra sistem açılışı ve uçbirimlere geçmek daha düzgün olacak, güç yönetimi ve sistem askıya alma süreci iyileştirilecek. Artık X'in çalışması için bir xorg.conf dosyasına ihtiyacı yok çünkü donanım tanıma yetenekleri sistemdeki tüm donanımları oldukça başarılı bir şekilde tespit edilebiliyor. Birden fazla girdi aygıtı desteği de yoldaki özelliklerden birisi, bu sayede sisteme bağlı iki fare ile ekranda iki farklı fare imlecini hareket ettirebileceğiz, bu özelliğin fayda sağlayacağı asıl cihazlar ise multitouch dokunmatik ekrana sahip telefonlar olacak. Bütün bu değişikliklerin olumsuz yanı ise; desteklenen donanım listesinin sürekli değişmesi, bir bileşende yapılan köklü bir değişikliğin diğer bileşenlerde sorunlara yol açması. Ancak bütün bu süreç tamamlandığında Linux'ta grafik keyfinin tadına doyulmayacak :)

Kaynaklar