Ana sayfa 5. Sayı Bilişim, bilgisayar, yazılım ve özgür yazılım bilgisayarının bileşenleri

Bilişim, bilgisayar, yazılım ve özgür yazılım bilgisayarının bileşenleri

115
PAYLAŞ

R. Oktay Altunergil

Yazılımı kamuya açtığınız zaman, ihtiyacı olan insanlar bu yazılımı alıp kullanmaya başlayacaktır. Hatta yazılımı kullanan bir kısım insanlar, ona kendi değişikliklerini ekleyerek halka açma yoluna gideceklerdir. Bu şekilde önüne geçilmez bir gelişme ve daha iyiye gitme süreci, yazılımın ömrü boyunca ve o yazılıma ilgi olduğu sürece devam edecektir.

Özgür yazılımın ne olduğunu anlayabilmek için, öncelikle bilgisayarın yapıtaşlarının neler olduğunu yinelemekte fayda var. Gündelik hayatımızda giderek daha kalıcı bir yer edinen bilgisayarlar, donanım ve yazılım olmak üzere iki ana gruptaki ürünlerin birlikte çalışmaları sonucu kendilerine verilen görevi yerine getirir.

Donanım ve yazılım nedir?
Donanım, bilgisayarımızı bir araya getiren fiziki (elle tutulur) parçalara verilen genel addır. Örnek olarak bilgisayarın ana işlemcisi, hafızası, sabit diski, klavyesi ve monitörü donanım ürünleridir. Ana donanım bileşenlerinden bazılarının eksik olması durumunda bilgisayar işlevselliğini yitirecektir. Örneğin ana işlemcisi olmayan bir bilgisayarın çalışması beklenemez. Öte yandan ikincil dereceden önemli bazı donanım bileşenlerinin yokluğunda bilgisayar daha az becerili de olsa çalışmasına devam edecektir. Örneğin, ses kartı olmayan bir bilgisayar, ses üretme yeteneğinden yoksun olsa da diğer amaçlar için hâlâ kullanılabilir.

Bilgisayarlarımız ana kartları, işlemcileri ve son model ekran kartları ile bir teknoloji harikası olabilirler. Fakat bu bileşenlerin işlev kazanmasını sağlayacak diğer önemli bileşen yazılım olmadan, bilgisayarımız 2 ile 2’yi çarpıp 4 sonucuna ulaşmaktan bile acizdir.

Yazılım, insanların anlayacağı dilden olan problemleri, istekleri ve işleri bilgisayarların anlayacağı dile çeviren aracıdır. Verimli bir bilgisayar oturumu için, kullandığınız yazılımın ihtiyaçlarınıza uygun olması, en az kullandığınız donanım kadar önemlidir. Hatta, bilgisayar teknolojisinin ileri bir seviyeye ulaştığı günümüzde, iyi donanım bulmak nispeten kolay iken, iyi yazılıma ulaşmada büyük sorunlarla karşılaşılabilmektedir.

Yazılımı da, kendi içinde çeşitli sınıflara ayırmak mümkündür. Günümüz bilgisayarları asgari olarak “işletim sistemi” denen ve çeşitli donanım bileşenleri ile iletişim ve işbirliğini sağlayan ana yazılıma gereksinim duymaktadır. Temelde işletim sistemi yazılımının görevleri oldukça kısıtlı olduğu halde, genelde bütün işletim sistemi üreticileri bu işletim sistemini kullanıcıların günlük hayatını kolaylaştıracak çeşitli yazılım ürünleri ile pekiştirir. Hoşça vakit geçirmek için oynadığımız bilgisayar oyunları, arkadaşlarımızla iletişim için kullandığımız anında ileti sistemleri, web sitelerini gezmek için kullandığımız tarayıcılar, bilgisayarda müzik dinlemek için kullandığımız programlar da işletim sistemi dışında olan yazılımlara örnektir (Gerçekte yazılımın sınıflandırması biraz daha karmaşık ama bizim konumuz için bu kadar bir ayrım yeterli).

Yazılım ciddi ve zor bir iştir
Yazılım üretmek belli bir bilgi birikimi ve bu alanda yeterli beceri ve yetenek gerektiren bir iştir. Program yazarken yazılımcı akla gelebilecek bütün olasılıkları hesaba katıp, bu olasılıkların tamamını uygun bir şekilde ele almalı ve programın karşılaşılabilecek her koşulda gerektiği gibi tepki vermesini sağlamalıdır. Bilgisayar genel kanının aksine, zekâ sahibi bir makine olmadığından, bizim karşı karşıya kaldığımızda akıl ve tecrübelerimizden bir çıkarıma giderek doğru yolu bulacağımız durumlarda dahi, kör bir şekilde kendisine yazılımcı tarafından iletilen adımları takip edecektir. Örneğin, beklenmedik bir şekilde, yazılımcının öngörmediği halde gerçekleşebilecek bir durum örneği olarak, bilgisayarınız kendisini üzerinde çalıştığınız bütün dokümanları silmeye yönelik bir adım ile karşı karşıya bulduğunda, zekâ sahibi varlıkların tersine, bu adımı seve seve takip edecektir.

Makul bütün olasılıkları öngörmeye ilaveten, yazılımcının ayrıca bilgisayarın gerçekleştirmesi gereken her işlemi tek tek ve açık olarak sıralaması gerekmektedir. Bilgisayar ne bir adımın eksik olduğunu ne de takip ettiğinde istenmeyen sonuçlar doğuracak bir adımla karşı karşıya olduğunu fark etme yeteneğine sahiptir. Bu yönden bakıldığında bilgisayar, yazılımcının emirlerine itaat eden, olağanüstü hızı ve sıkılmadan ve yorulmadan çalışma azmine rağmen kendi kendine düşünme yeteneği olmayan bir makineden ibarettir. Bilgisayarın bütün bu özelliklerinden dolayı, yazılım üretmek, -özellikle iyi yazılım üretmek-, neredeyse kendince bir sanat sayılabilecek, zor bir iştir.

Özgürlük nedir?
Bilgisayarımızın bileşenleri, yazılımın bilgisayar kullanımındaki yeri ve kaliteli yazılım üretimindeki zorluklar konusuna kısaca değindik. Fakat esas olarak özgür yazılımın ne olduğunu anlamak için yola çıkmıştık. Yazılımı anladığımıza göre, geriye “özgürlük” kavramı kalıyor. Nedir bu özgürlük? Yazılım gibi bir konuyla ne ilgisi olabilir?

Türk Dil Kurumu Sözlüğü’ne göre Özgürlük: 1) Herhangi bir kısıtlamaya, zorlamaya bağlı olmaksızın düşünme veya davranma, herhangi bir şarta bağlı olmama durumu. 2) Her türlü dış etkiden bağımsız olarak insanın kendi iradesine, kendi düşüncesine dayanarak karar vermesi durumu, hürriyet” olarak tanımlanmıştır.

Amerika’daki Özgür Yazılım Derneği’ne göre bu özgürlük tanımı yazılım kavramına şöyle uyarlanabilir: “Özgür yazılımın temelinde kullanıcının bir yazılımı çalıştırma, kopyalama, dağıtma, inceleme, değiştirme ve geliştirme özgürlükleri yatar. Daha kesin ve açık bir ifadeyle, kullanıcılara şu haklar tanınmıştır:

“- Her türlü amaç için programı çalıştırma özgürlüğü.
“- Programın nasıl çalıştığını inceleme ve kendi gereksinimleri doğrultusunda değiştirme özgürlüğü. Program kaynak koduna erişim bunun için bir ön şarttır.
“- Yeniden dağıtma ve toplumla paylaşma özgürlüğü.
“- Programı geliştirme ve gelişmiş haliyle topluma dağıtma özgürlüğü. Böylece yazılım bütün toplum yararına geliştirilmiş olur. Program kaynak koduna erişim bunun için de bir ön şarttır.”

Kaynak kodu nedir?
Yukarda yer verdiğimiz Özgür Yazılım Derneği’ne göre özgür yazılımın gereklerine baktığımızda, tekrar tekrar kaynak kodu denen bir şeyden bahsettiğini ve ısrarla bu kaynak kodunu talep ettiğini görüyoruz. Peki nedir bu kaynak kodu? Özgürlükten söz ederken bu kadar ısrarla üzerinde durulmasının sebebi ne olabilir? Acaba Özgür Yazılım Derneği laf arasında bir punduna getirerek normalde vermeyeceğimiz bir şeyi bizden hileyle almaya mı çalışıyor?

Yazılım üretmenin zor olduğundan söz ederken, yazılımcının bizim anlayacağımız işleri, amaçları ve çözülmesi gereken sorunları bilgisayarın anlayacağı bir şekilde sıralaması gerektiğine değinmiştik. Bizim kelimeleri bir araya getirerek konuşmamız ve bu şekilde -çoğu zaman- anlaşabilmemize benzer olarak bilgisayarlar da kendi dillerini konuşurlar. Bu dil bizim dilimize göre oldukça kısıtlıdır ve yalnızca iki kelime, iki harf veya iki seçenek olarak basite indirgeyebileceğimiz 0 (sıfır) ve 1 (bir) değerlerinden oluşur. Bu iki yapıtaşıyla donanım seviyesinde, açık ya da kapalı, var ya da yok, doğru ya da yanlış kavramları kullanılarak bilgisayara ne yapması gerektiği söylenmelidir. Bilgisayar cevap verirken yine aynı dili kullanacaktır.

Bilişim tarihinin ilk günlerinde yazılım üretme işini sadece bu dili gerçek anlamda bilen, başka bir deyişle bilgisayarca konuşabilen insanlar gerçekleştiriyorlardı. Yazılımcı 0 ve 1’ce konuşarak bilgisayardan ne istediğini adım adım anlatıyor, bilgisayarın cevabını ise yine aynı şekilde 0 ve 1’ce olarak alıp sonuca ulaşıyordu. 0 ve 1’ce zamanında, yazılım üretmek gerçekten zordu. Bilişim alanında gelişmeler oldukça, yine bilgisayarca konuşabilen yazılımcılar tarafından tercüme aracı denebilecek yazılımlar üretilmeye başladı. Derleyici (compiler) diye tabir ettiğimiz bu yazılımların görevi, yarı insanca-yarı bilgisayarca olarak tanımlayabileceğimiz yeni bir dilde yazılan adımları, bilgisayarın anlayacağı 0 ve 1’ceye çevirmektir. Bilgisayar kendi bünyesinde ve bileşenleri arasında hâlâ bilgisayarca konuşmaya devam etmekte, fakat bu tercüman yardımı ile en azından yeni nesil yazılımcıların ne dediğini anlayabilmektedir.

İşte bu insanların da anlayabileceği tercüme öncesi metne, kaynak kodu diyoruz. Kaynak kodunun güzelliği, gerekli eğitimi almış insanların bu metni okuyup anlayabilmesi, gerekirse kendi metnini üretip bilgisayara derdini anlatabilmesidir. Dileyen yazılımcı başka birinin yazdığı kaynak kodunu alıp ona ufak tefek değişiklikler yaparak bilgisayara derdini uzun uzun yeniden anlatmak zorunda kalmadan kendi işini de halledebilir.

Kaynak kodu her bilgisayarda var mı?
Bilgisayarım gayet olağan bir şekilde çalıştığına ve bilgisayar da programlarımın dilini anladığına göre, bende zaten bu kaynak kodu denen metin halihazırda yok mu? Özgür Yazılım savunucuları neden söz ediyorlar? Daha ne istiyorlar?

Buraya kadar okuyup bu sonuca ulaşmanız gayet doğal, çünkü yukardaki tercüme işleminde gerçekleşen bir adımı atladık. Gerçekte yeni nesil yazılımcı bilgisayarcaya tercüme edilmek üzere özel bir dilde yazdığı metni kullanıma hazır hale getirmek için, birkaç belli işlemi gerçekleştirmeli. Birinci adım, metnin dil kurallarına uygun olduğundan emin olmak. Metin dil kurallarına uyuyorsa, tercüme edilmeye hazır demektir. Tercüme işlemini derleyici ile yapıyoruz ve bilgisayarcaya tercüme edilmiş bir ürüne ulaşıyoruz. Bu aşamada elimizde başta kendimiz yazdığımız kaynak kodu ve tamemen bilgisayarca olan son ürün var. Son ürünün ne demek istediğini bilgisayarımız çok iyi anlıyor ve ondan istediğimiz her işlemi güzelce gerçekleştiriyor. Bu aşamada bilgisayarca olan ürünü bir arkadaşımıza versek, elinde kaynak kodu olmadığı halde bunu kendi bilgisayarında çalıştırdığında, bilgisayar bize itaat ettiği gibi ona da itaat edecek ve bizim için gerçekleştirdiği işlemleri onun için de gerçekleştirecektir. Gördüğünüz gibi bir programın çalışması için kaynak kodunun da hazır bulunması gerekmiyor. Tercüme edilmiş metni aynı iş için yeniden kullanabilmek çok güzel bir özellik, fakat ne yazık ki özgürlük söz konusu olduğunda yeterli değil.

Kaynak kodunun varlığı/yokluğu ne sağlıyor?
Arkadaşınızdan size böyle bir yazılım ürünü geldiğini düşünün. Elinizde kaynak kodu yok. Programı kullanıyorsunuz ve aynen arkadaşınızın size anlattığı gibi çalışıyor. Fakat program ekranında arkadaşınızın size bahsetmediği bir tuş var. Sizce bu tuş ne yapıyor olabilir? Programı açıp okumaya girişseniz, daha önce söz ettiğimiz 0 ve1’lerle karşılaşacaksınız ve ne demek istediğini anlayamayacaksınız. Tuşa basarak deneyebilirsiniz, fakat ya bu tuş istemediğiniz bir işlem gerçekleştirirse? Tuş örneğinden daha kötüsü, programda varlığını görmediğiniz fakat yine de orada olan bir özellik veya bir hata olmadığını nereden biliyorsunuz? Arkadaşınıza güvenebilirsiniz diyelim, fakat yüzlerce dolar vererek aldığınız programınızın üreticisine ne kadar güvenebilirsiniz? Daha programı kullanmaya başlarken lisans anlaşmasında her türlü sorumluluğun size ait olduğunu ve üreticinin hiçbir şekilde sorumlu tutulamayacağını söyleyen onlar değil miydi? Oysa elinizde kaynak kodu olsaydı, o kodu kendiniz okuyabilir veya arkadaşınıza okutup neler olup bittiğini öğrenebilirdiniz. Belki dünyanın en kolay işi olmazdı, ama en azından mümkün olurdu.

Kaynak kodu ve açıklık ilkesi
Demek ki sadece kaynak kodunda olan, bu koddan derlenen programda olmayan ilk özellik, kaynak kodunun insanlar tarafından anlaşılabilecek bir dilde yazılmış olması. Bu özellik kaynak kodundan üretilen programa olağanüstü bir açıklık kazandırıyor. Kaynak kodu elinizde olduğu sürece, program sizden gizli bir işlem veya -üreticinin herhangi bir kötü niyeti olmadığı halde yine de programda mevcut olan- istenmeyen bir adım gerçekleştirmeden önce, kaynak koduna bakıp önlem alabiliyorsunuz. Beklenmeyen bir sonuçla karşılaştığınızda kaynak kodunu okuyarak sebebini araştırabiliyorsunuz. Kısaca yazılım amacını, kullandığı yöntemleri, belli şartlarda izleyeceği yolu, beklenmedik bir olayda hareket edeceği şekli ve zayıf ve sorun yaratabilecek yerlerini sizden gizleyemiyor; sizi gözü kapalı bir şekilde, ne olacağından emin olmadan programı kullanmaya zorlamıyor.

Yukarda gözler önüne sermeye çalıştığımız açıklık ilkesi, birçok yönden özgürlük ilkesi ile örtüşmektedir. Seçme özgürlüğünün gerek şartlarından belki en önemlisi, mevcut seçeneklerin açık olarak incelenebilmesi ve seçenekler hakkındaki önemli bütün bilgilere seçim aşamasında ulaşılabilmesidir.

Yazılımı değiştirebilme özgürlüğü
Açıklık kavramı tek başına vazgeçilmemesi gereken bir niteliktir. Kullandığı yazılımın kaynak koduna erişimi olan kullanıcı veya yazılımcı, yazılımı kullandıkça, yazılımda eksikler, gelişmeye açık noktalar olduğunu fark etmeye başlayacaktır. Benzer bir şekilde, kullanıcı yazılımı gündelik olarak kullandıkça, yazılımın özgün halini yazıp derleyen üreticinin öngörmediği ihtiyaçlarını da bu yazılım ile kolayca giderebileceğini fark edecektir. Bu ihtiyaçları yazılıma ilave etmek, üreticinin çıkarları bakımından her zaman tercih edilen bir durum olmayabilir. Üreticinin istenen konuda yeterli tecrübesi olmayabilir; üretici başka bir konu üzerinde bütün kaynaklarını kullanıyor ve sizin istediğiniz konuya ayıracak zamanı bulamıyor olabilir; üreticinin bu ek özellik için talep ettiği ücreti karşılayamayabilirsiniz. En önemlisi üretici bir kere yazıp milyonlarca kere çoğaltıp dağıttığı bu yazılım üzerinde sizin istediğiniz değişikliği yapmaya tenezzül etmeyebilir. En nihayetinde, sizin ihtiyacınız diğer şahıslar için aynı önemi taşımayabilir.

Böyle bir durumda elinizde kaynak kodu yoksa, hayalinizin gerçekleşme ihtimali yok denecek kadar azdır. Mevcut teknoloji ile kaynak kodu olmayan son kullanıcıya yönelik bir program üzerinde değişiklikler yapmak veya programa yeni özellikler eklemek mümkün değildir!

Eğer şanslı iseniz ve elinizde yazılımın kaynak kodu varsa, olaylar çok farklı ve sizin çıkarınıza gelişebilecektir. Derleyicilerin anladığı yazılım dillerini biliyorsanız; kaynak kodunu okuyup, ihtiyacınız olan değişikliği yapıp, yeni kaynak kodunu tekrar derleyerek işinizi görebilirsiniz.

Kendiniz yazılımcı olmayabilirsiniz. Yazılım işinin ciddi ve zor bir iş olduğunu başta söylemiştik. Şimdi de kesinlikle herkesin yazılımı kendi ihtiyaçlarına göre kendisinin değiştirebileceğini ima etmiyoruz. Eğer kendiniz yazılımı değiştirecek bilgi ve beceriye sahip değilseniz, seçeceğiniz kişi veya kuruluşlara gerekli değişiklikleri ücretini ödeyerek yaptırabilirsiniz. Sonuçta esas olan değişikliği kimin yaptığı değildir. Sizin kullandığınız bir programa herhangi bir değişikliği gerçekten yapıp yapmayacağınız da değildir. Esas olan gerekli olabilme olasılığına karşı, yazılımı değiştirme özgürlüğünün mevcut olmasıdır. Zaten özgürlükleri özgürlük yapan özelliklerden biri de, uygulama zorunluluğu olmayıp, uygulamak isteyenlere de kısıtlama getirmemesi değil midir?

Yazılımı insanların geliştirmelerine açmak
Dünyadaki hiçbir bilgisayar kullanıcısı, bilgisayarını bir diğeriyle tamamen aynı amaçlarla ve tamamen aynı şekilde kullanmaz. Bu kişilerin bilgisayar kullanış amaçları da aynı değildir. Bu kadar farklılık gösteren bir kullanıcı kitlesine rağmen, yine de birçok noktada ihtiyaçlar ve amaçlarda bir ortaklık mevcuttur. Sizin kaynak kodunu değiştirerek eklediğiniz özellik belki başkalarının da işini kolaylaştırabilir.

Bunu anlamanın en güzel yolu, değiştirilmiş programı internet ortamına koyup, ihtiyacı olanların erişebilmesini sağlamaktır. Bu değişikliği başkalarıyla paylaşmanın size bir zararı olamayacağına göre, neden yapmayasınız? Yazılımı kamuya açtığınız zaman, ihtiyacı olan insanlar bu yazılımı alıp kullanmaya başlayacaktır. Birçok kişi için yazılımı kullanan kişilerden alınan bir teşekkür, kişinin harcadığı çabaların karşılığı olmaya yeterlidir. Yazılımınızı kullanan insanların yapabileceği bir başka şey de, kendileri programlama yapamadıkları için size yeni fikirler sunmak olacaktır. Hatta yazılımı kullanan bir kısım insanlar, ona kendi değişikliklerini ekleyerek halka açma yoluna gideceklerdir. Bu şekilde önüne geçilmez bir gelişme ve daha iyiye gitme süreci, yazılımın ömrü boyunca ve o yazılıma ilgi olduğu sürece devam edecektir.

Kaynak kodunda değişiklik yapmanın önündeki engeller

Ne yazık ki, insanlığın bir bütün olarak ilerlemesini garanti eden kaynak kodunda değişiklik yapıp dağıtma işlemi, gerçek hayatta bu kadar kolay gerçekleştirilememektedir. Öncelikle günümüzde geniş çapta kullanılan yazılımların ezici bir çoğunluğu, kaynak kodu olmaksızın dağıtılmaktadır. Bu yazılımlar ücretli veya ücretsiz dağıtılabilir. Ödenen ücrete bağlı olmaksızın, kaynak kodu olmadan dağıtılan yazılımın, üreticinin kendisinin yapmayı yeğleyeceği geliştirmeler hariç, geliştirilmesi mümkün değildir. Neredeyse bütün bir yazılım sektörü, ücretli veya ücretsiz dağıtılan yazılımların kaynak kodunun gizli tutulup sadece derlenmiş ürünleri dağıtmak üzerine kurulmuştur.

Kaynak kodunun program ile birlikte dağıtılması her ne kadar sadece derlenmiş ürünün dağıtılmasından nispeten iyi bir durum ise de, tek başına beklentileri karşılamaya yeterli bir yöntem değildir. Günümüzde yazılım konusunu düzenleyen kanunlar, kaynak kodu elinizde olsa bile ona değişiklik yapmanızı, değiştirilmiş veya özgün hali ile kaynak kodunu ve derlenmiş ürünü dağıtmanızı yasadışı sayabilecek yapıdadır. Bu gibi durumlarda kaynak kodunun elinizde olup olmaması ulaşılacak sonucu değiştirmeyecektir.

Özgür yazılım kavramına ve bize neler getirebileceğine kısa bir göz attık. Bütün toplumun yararına olduğu açık olan bu akımın neden hâlâ bütün dünyada yazılım konusundaki tek düşünce tarzı olmadığını merak ediyor olabilirsiniz. Ne yazık ki, gerçek hayatta bizim değindiğimizden çok daha fazla değişkeni göz önüne almak gerekiyor. Özgür yazılım konusunda bilgi vermeye ve bu değişkenleri incelemeye devam edeceğiz.

Bu yazı, (http://ozguryazilim.org) adlı siteden alınmıştır.