Birçok mit ve kafa karıştırıcı şey vardır açık kaynaklı yazılımlarla ilgili. Bedavadırlar, acaba geliştiricileri nasıl para kazanırlar? Kodları açık olduğu ve herkes gördüğü için güvensizler midir? Herkes istediği değişikliği yapabiliyorsa kaos olmaz mı? Bir takım vakti bol, hippi kılıklı tipler elde bira mı bu yazılımları geliştirirler? Kullanırken bir sorun çıksa destek alacak kimseyi nereden bulacağız? Açık kaynaklı yazılımların tek işlevi ticari yazılımları aynen taklit etmek ve dolayısıyla hep geriden gelmek midir?
Amacımız bunları açıklığa kavuşturmak. Konuya iyice dalmadan belirtmem lazım ki, bu tarz yazılımları isimlendirirken aslında beğendiğim isim özgür yazılım'dır. Bu işi ilk başlatan kişi olan Richard Stallman yazılımlarını "Free Software" diye nitelendirmiş, ve İngilizce'de özgür ve bedava kelimelerinin aynı kelime, yani "free" ile olmasından dolayı "free as in freedom, not as in beer", yani "özgürlükteki özgür gibi, biranın bedava olması gibi değil" diyerek kelimeyi açıklamıştır. Sanırım özgür kelimesi politik olarak tehlikeli olduğundan açık kaynak deyimi daha çok yayılmıştır, ben de yazımda yaygınlığından dolayı bunu kullandım.
Richard Stallman |
Bence açık kaynaklı yazılım geliştirme şekli bilime benzemektedir. Bilimin en önemli özelliği açıklığıdır. Bulgular gizli tutulmaz, makale haline getirilerek yayınlanır. Bu makaleler konusu olduğu bilimle ilgili eleştirilere (peer-review) açıktır. Diğer makalelerden alıntı yapılarak yeni makaleler yayınlanır ve bilim böylece devlerin omuzlarına tırmanmak suretiyle gelişir.
Ticari birimlerde yapılan teknoloji geliştirmelerinde ise bulgular mümkün olduğunca gizlenmeye çalışılır. Çünkü bunlar rakiplerin sahip olmadığı rekabet avantajlarıdır. Yine de birilerinin paralel olarak aynı şeyi bulması ihtimaline karşı patent alınır. Böylece başkaları aynı bulguyu ya kullanamaz, ya kısıtlı kullanabilir ya da kullanabilmek için patent sahibine belli bir para ödemek zorundadır.
Açık Kaynak vs Ticari
Ticari yazılımlar kaynak kodu olmadan derlenmiş halde dağıtılırlar. Derlenmiş yazılım çalıştırılabilir, ama kodu kapalı olduğu için tam olarak ne yaptığına bakmak imkansıza yakın derecede zordur. Bu durum yazılımın benzerini yapmayı zorlaştırarak ticari olarak avantaj sağlar. Başka bir açıdan bakarsak, söz konusu yazılımı geliştirmeyi kaynak koduna ulaşabilen şirket içi elemanların tekelindedir.
Açık kaynak yazılımlar ise kaynak kodları ulaşılabilir halde dağıtılırlar. Bunun ilk avantajı kodları her isteyenin inceleyebilmesidir. Avantaj diyoruz, çünkü ne kadar çok göz bakarsa o kadar çok koddaki hataları ve daha iyi hale getirilebilecek yerleri bulmak kolaylaşır. Bunu açık kaynak teriminin mucidi Eric Raymond açık kaynakla alakalı yazdığı "Katedral ve Pazar" isimli kitabında ifade etmiştir. Karşıt olarak, ticari yazılımda ise ister istemez göz sayısı şirket eleman sayısıyla sınırlıdır. Bilime benzetirsek, kodu açık olarak dağıtmak makale'ye denk gelirken, kodun istenen kişiler tarafından incelenebilmesi "peer-review"'a denk gelmektedir.
Dezavantaj ise, yazılım ürününü satmanın zorlaşmasıdır. Zorlaşması derken, açık kaynaklı bir yazılımı satmak imkansız değildir. Bizzat Richard Stallman'ın kurduğu GNU, özellikle ilk zamanlarda, yani 1980'lerde o zamanki disket, kaset gibi ortamlarda yazılımlarını satarak para kazanmıştır. Günümüzden örnek verirsek, Linux işletim sistemi dağıtıcı firmaları (ki sayıları pek çoktur) CD ile ürünün kopyasını satmakta ve yanında desteğini vermektedirler.
Şu teknik bilgiyi de vermek lazım; Linux projesi sadece işletim sisteminin çekirdeği ile ilgilidir. Bu çekirdeği alıp derleyip kullanabilmek her babayiğitin harcı değildir. Dağıtıcı firmalar Linux çekirdeğini alıp derlerler, ayrıca bunun yanına çok sayıda başka açık kaynak kodlu yazılımı da ekleyip kullanılabilir halde dağıtırlar. Böylece bir katmadeğer eklemiş olurlar.
Windows işletim sistemine bakarsak aslında onda da aynı yapı vardır. Bu işletim sisteminin de bir çekirdeği vardır ve yanında onlarca destek yazılımı vardır. Microsoft firması tüm bunların dağıtıcısıdır. Ama tek dağıtıcısıdr, yani başka biri gidip Windows'u dağıtamaz (ve doğal olarak, satamaz).
Her isteyenin önceden izin almaksızın dağıtıcı olabilmesinin avantajları ve dezavantajları vardır. Avantajlardan başlarsak, ilk olarak bir çok alternatif ortaya çıkar. Herkesin isteğine göre Linux işletim sistemleri mevcuttur. Böylece bir sistem oldukça cafcaflı olabileceği gibi, oldukça sade de olabilir. Örneğin masaüstü için KDE ile GNOME amansız rekabet halindedirler. Tabii masaüstü sadece bunlarla sınırlı değildir, daha birçok masaüstü vardır. Aynı şey başka uygulamalar tipleri için de geçerlidir.
Oldukça gelişmiş bir masaüstü ortamı |
Dezavantaj ise, birçok alternatif olması halinde kullanıcının hangisini kullanacağı konusunda kafasının karışmasıdır. Bu az buz dezavantaj değildir, özellikle iş dünyasında. Zira iş dünyası standart ister; Linux'u düşünseler bile kafaları karışır ve biraz tuzluya gelse de "Windows'a alıştık, onu kullanıverelim" derler. İşyerinde, okulunda Windows olan ve ona alışan kişi evinde de kolay kolay başka işletim sistemini kullanamaz. Linux'un son kullanıcılarda yeterince yaygınlaşamama sorunu Linux cephesinde bayağı kafaları yormaktadır ve bu sorunun masaüstü ortamı olduğunda genelde çoğu kişi hem fikirdir.
Normal kullanıcı açısında Linux'un alacağı çok yol varken, sunucu dünyasında, yani bilişim profesyonellerinin dünyasında açık kaynaklı yazılımlar çok daha fazla kullanılmaktadırlar. Çünkü bilen kişilerin elinde bu yazılımlar, aynı bir Formula 1 arabasının belli bir piste göre ayarlanması gibi ayarlanabilirler. Bunu biraz açalım: Microsoft Windows işletim sistemini önceden derlenmiş olarak sattığından, ister istemez her makinede çalışabilecek şekilde "orta yolu bularak" derlemek zorundadır. Bu da belli bir donanımın başka donanımlarıyla uyumlu olmayan avantajlarından yararlananamaması anlamına gelir. Ayrıca Windows dağıtımı ister istemez tüm çevresel yazılımlarıyla beraber dağıtılır. Windows'un da kendine göre dağıtım varyasyonları vardır, ama bunlar teknik olmaktan ziyade ticari kaygıyla yapılandırılmıştır.
Diğer taraftan, örneğin, güçlü bir web sunucusu kurmak isteyen bir firma önce bir sunucu donanımı alıp Linux'un kaynak kodunu bunda derlerse tam olarak o donanımdan maksimum kapasiteyle yararlanan bir işletim sistemi elde eder. Elbette bu Linux'un üstünde sistemi yavaşlatacak hiçbir gereksiz servis yoktur. Sonra bunun üstünde Apache web sunucusu aynı şekilde derlenir. Böylece maksimum performans verecek bir yazılım-donanım birlikteliği elde edilir.
Diğer yandan sunucu tarafında koda ulaşılabilirlik de mühim bir avantajdır. Diyelim ki sistemde bir hata veya performansı az olan bir yer var. Bir kere kodu takip etmek suretiyle bunun sebebini bulmak imkanlıdır. Üstelik bu sorun başkalarını beklemeden hemen düzeltilebilir. Windows'da ise bu mümkün değildir, bir kara kutuda sorunun tam olarak ne olduğunu anlamak zordur. Ayrıca dışarıdan görünen sorunun düzeltilmesi için de Microsoft firmasının keyfini beklemek gerekir. Tüm bu özellikler yazılım sisteminin yönetilebilirliğini arttırdığından sunucu sistemlerde açık kaynaklı yazılımlar kullanmak oldukça avantajlı olmaktadır.
Açık Kaynaklı Yazılım Süreci
Şimdiye kadar başarılılığı tescilli açık kaynaklı yazılımlardan örnekler verdik. Elbette iş o kadar basit değildir. En eski ve yaygın açık kaynak yazılım barındırıcılarından biri olan sourceforge.net'e bakıyorum şu anda: Toplam 324,436 proje mevcut. İsteyenin proje başlatabilmesi böyle bir şişkin rakamın en büyük sebebi. Üstelik daha birçok başka açık kaynak yazılım barındırma siteleri de mevcut. Bunların hepsinin başarılı olmasın doğaya aykırı olurdu. O halde açık kaynaklı yazılımların yaşamlarına biraz göz atalım.
Normalde ticari şartlarda bir yazılım ürünü başlatmak oldukça zorlu bir süreçtir. Bir şirket olması, yoksa kurulması gerekir. Şirketin boyutuna göre ortakları ikna etmek gerekir. Sonra geliştirme için geliştiriciler, test için testçiler, dökümantasyon için yazarlar tahsis etmek gerekir,. Ayrıca ürünün pazarlanması, satışı, satış sonrası desteği, yeni özellikler eklenerek tekrar tekrar satılabilir şekilde ayarlanması gibi birçok süreç gerekir.
Açık kaynak sürecinde, eğer kendine özgü kurallarıyla iyi yönetilebilirse elbette, yukarıdaki paragrafta saydığımız şeylerin hemen hepsi otomatik hale gelebilir. Bu başlıkta bunları anlatacağız.
Proje sayısının çokluğundan da anlaşılacağı üzere, proje başlatmak kolaydır. Kendinize ait bilgisayarda açık kaynaklı editörler, programlama dilleri, derleyiciler vb. kullanarak yazılım projenizi başlatırsınız. Herhangi bir aşamasında, bu en baştan olabileceği gibi, yazılım kendi bilgisayarınızda belli bir olgunluğa ulaşınca da olabilir, herhangi bir açık kaynak barındırma sitesinde projenizi tanımlayıp kodunuzu yükleyebilirsiniz.
Bundan sonra duyuru aşaması gelir. Elbette barındırma (barındırma=hosting bu arada) sitesinde bulunmak arayanlara bir nevi duyuru işlevi görse de, yine de başka bir yerlerde de duyuru yapmak gerekir. Örneğin Linus Torvalds Linux'u comp.os.minix adlı haber grubunda mütevazi bir mesaj ile duyurmuştu (kendisi aslında, en azından Linux bağlamında mütevaziliğin yanından bile geçmez). Günümüzde spamciler sağolsun, haber grubu (newsgroup) diye birşey kalmasa da, yine de haberleşme listesi, forum gibi duyuru için kullanılabilecek bir mecra bulunabilir. Bu mecranın yazılımın konusu ile alakalı bir grup olması iyi olur. Yukarıdaki Linus'un anonsu o zamanlar popüler olan Minix işletim sistemiyle ilgili bir grupta yapılmıştır. Buna göre bir muhasebe programı yapıyorsanız bu duyuruyu muhasebeyle ilgili bir grupta yapmak mantıklıdır.
Linus Torvalds'ın genç ve karizmatik olmayan bir resmi |
Yazılım birilerinin işine yaradıkça destek artacaktır. Alınacak ilk destek testtir. Kullanıcılar programı kullanması en sağlam test yöntemidir. Testle hataları bulacaklar ve rapor edebileceklerdir. Rapor edebilecekleri bir mecra olması mühimdir. Neyse ki barındırma servisleri haberleşme listesi olsun, forum olsun, hata (bug) raporlama aracı gibi araçları sunmaktadırlar. Hatalar kadar, yeni özellik önerileri de bir yazılımın daha iyiye gitmesi elzemdir, kullanıcılar bu konuda müthiş girdi sunabilme potansiyeline sahiptirler.
Dökümantasyon aslında en kritik, ama en geç destek alınan yerlerden biridir. Bunu ilk başta yazılımcının yapması yerinde olur. Yazılımın başkalarına tavsiye edilmesi de en güzel pazarlama yöntemidir, beleş olması da şüphesiz tavsiye edilmeyi kolaylaştırmaktadır. Sonuçta belli bir aşamada, belki kendine göre oldukça zahmetli ve başarı oranı düşük, ama en azından yazılım ürününün yararlılığına bağlı olan (ki teknik adamlar olarak başka ne isteriz şu hayatta?) bir başarı mümkündür.
Geliştirme yardımı da elbette çok önemlidir. Kodu geliştirmeye yetkili, diğer deyişle yazılımın tutulduğu versiyonlama aracına "commit" etme imtiyazı ilk başta orijinal geliştiricidedir. Eğer çok çok şanslıysanız, geliştirme yeteneğine sahip kişiler bazı hataları veya eklenecek özellikleri kendi bilgisayarlarındaki koda ekleyeceklerdir. Sonra kendi kodlarıyla orijinal kodların arasındaki farkı alacak (diff) ve size yama (patch) olarak göndereceklerdir. Siz de yazılımın iyi kalpli diktatörü olarak yamayı gözden geçirip, eğer beğenirseniz kendi orijinal kodunuzla birleştirebileceksiniz (merge).
Belli bir süre sonra bu geliştiricilerle arkadaş olabilir ve güvendiklerinize "commit" yetkisi vererek geliştirmeyi birçok elle yürütebilir hale gelebilirsiniz. Böylece artık hiçbir firmanın elinde olamayan şekilde bedava geliştiricilere sahip oldunuz. Elbette bütün bu avantajlar yazılım kaynak kodlarının açık olması sayesinde oldu. Açık kaynaklı kodun bir başka avantajı da, kodun gayet özenli olmasıdır. Zira başkalarının görmesi ve acımasızca eleştirme ihtimali, ister istemez herkesi kodunu gayet özenli yazmaya itecektir. Bu da firmaların sahip olması hemen hemen imkansız olan bir lükstür.
Tabii bir geliştirici olarak illa ki de bir yazılım projesi başlatmak zorunda değilsiniz. Başka bir proje için bu sürecin herhangi bir aşamasına katılarak da işe başlayabilirsiniz (hatta çoğu zaman böyle yapmak daha mantıklıdır). Açık kaynaklı yazılım projelerine katkıda bulunmanın bir yararı da size ün kazandırmasıdır. Bir CV'den daha iyisi, açık kaynaklı projeye attığınız imzadır. Aynı zamanda bu motivasyon kodun daha da kaliteli olmasına sebep olur.
Peki, diyelim ki varolan bir projeye katkıda bulunmak istediniz, ama projenin sahibi olan diktatöre bir türlü istediğiniz özellikleri kabul ettiremediniz. Haklı olduğunuza eminsiniz, ve en önemlisi sizin haklılığınızı destekleyenler de var. Bu durumda projeyi fork edebilirsiniz, yani o ana kadar yazılmış olan kodun tamamını alırsınız (buna hakkınız var), bir barındırma sitesinde başka bir proje başlatırsınız ve o projede istediğinizi yaparsınız. Böylece sizin yolunuzu seçenler sizin yazılımınızı kullanabilirler. Açık kaynak tarihinde birçok ünlü fork vardır. Örneğin Stallman'ın ilk projelerinden olan C derleyicisi GCC 1997'de EGCS adıyla fork etmiş, sonra da 99'da iki proje barışıp tekrar birleşmişlerdir. Ünlü metin editörü Emacs'in (yine bir Stallman ürünü) XEmacs diye halen kendi yolunda devam eden bir fork'u vardır. Oracle MySQL'i satın alınca hemen MariaDB diye fork ettirilmiştir. Son örnekten de anlaşılabileceği gibi, açık yazılımlar toplumun malıdır ve eğer gerçekten haketmiyorsanız sahip olmak da mümkün değildir.
Açık Kaynak Kültürü
Ticari yazılımlara benzer olarak, açık kaynaklı yazılımların da lisansları vardır. Bunlardan en ünlüsü GPL lisansıdır (Stallman ürünü, yine). Bu lisans kısıtlayıcı bir lisanstır, şöyle ki, bir kere kaynak kodu kapamayı yasaklar. Ayrıca kod değiştirilirken daha kısıtlayıcı bir lisans kullanılamaz. Biraz esprili bir şekilde Copyleft denen kavramla hakların geri alınamayacağını da garanti eder. GPL dışında başka açık kaynaklı lisanslar da mevcuttur. Örneğin BSD lisansı kodu kapamaya bile karşı değildir. Hatta Microsoft'un kapalı kaynak kodlu Windows'unda BSD işletim sisteminden alınmış kodlar vardır. GPL lisansı ilk başlarda şirketleri korkuttuğu için eleştiriliyordu. Bu biraz doğru olsa da, uzun vadede kötü olmadığı anlaşıldı. Günümüzde açık kaynaklı yazılımlar rüştünü ispat ettiği için bu korku eşiği de aşılmıştır denebilir.
Açık kaynağın kendince rahat ve esprili bir kültürü vardır. Bunun ilk görünümü proje adlarında ve logolarında esprinin eksik olmamasıdır. Örneğin Stallman'ın başlattığı GNU projesinin açılımı "GNU's Not Unix" gibi bir yinelemeli kısaltmadır. Linux adı Linus'un isminden gelmiştir, üstelik logosu Linus'un İskandinav olmasından dolayı penguendir. Apache ismi apaçilerin savaşma becerilerinden esinlenerek alınmıştır. Çizim programı olan GIMP (GNU Image Manipulation Program) isminin kötü anlamından pek rahatsız değildir (En sevdiğim yazım sistemi olan LaTeX de ayn şekilde). Yani geleneksel pazarlamanın oluşturduğu kastırık isimlerle ilgilenmez.
GNU'nun logosu |
Ayrıca açık kaynak yazılımları samimidir. Hatalar, eksiklikler ve yapısal sorunlar gizlenmek, yadsınmak yerine güzel güzel itiraf edilir. İtirafın bir sebebi de elbette yardım bulmak içindir. Bu sayede açık kaynaklı bir yazılımda sorunla karşılaştığınızda, hele bu yazılım kritik kitleye ulaşmışsa çözümü için birçok kaynak bulabilirsiniz. Kimse sizi kandırmaya çalışmaz. Teknik açıklamalar da gayet esprilidir. Ticari dünyada ise genelde bunun tam tersidir.
Tabii herşey güllük gülistanlık değildir. Açık kaynak yaklaşımının popüler olmasıyla şirketlerin de ilgisini çekmiştir. Şirketlerin ilgisi genelde gayet yararlı olmakla beraber, bazı tehlikeleri de barındırmaktadır. Örneğin bir şirket açık kaynaklı yazılımı yukarıda anlattığımız şekilde mahçup başlatmaz, büyük reklamlarla başlatır. Geliştirme de yine yeterince açık olmayabilir, bundan kastımız, kod şeklen açık olsa bile, tartışmalar gizli olabilir. Bu da aslında yazılım ürününün (ve aslında toplumun) zararınadır. Çünkü kapalı ardında alınan tasarım kararları yüzünden kimse dışarıdan koda müdahale edecek bilgiyi elde edemez ve yukarıda bahsettiğimiz sinerjiden faydalanılamaz.
Bunun dışında bazı açık kaynak toplulukları belli bir başarı seviyesinden sonra g_t kalkması tabir edebileceğimiz bir şeye kapılarak soru soranlara, öneri getirenlere kibar olmayan şekilde davranma alışkanlığı edinebilir ve kendi kapalı toplumlarında kalmayı tercih edebilirler. Bu yaklaşım bazen gereksiz gürültüleri engellese de, aşırıya gidince toplumdan gelebilecek katkıları engellediğinden zararlı olabilir.
Peki Nasıl Para Kazanılır?
Açık kaynaklı yazılımları satma konusuna yukarıda değinmiştik. Onun dışında yazılımı doğrudan satmayı fazla düşünmemek bence en iyi yaklaşımdır. Yazılım nasıl olursa olsun danışmanlığıyla ve desteğiyle para kazanılabilir. Çünkü herkesin yazılımın kodundan doğrudan faydalanabilecek kadar zamanı ve yeteneği olmayabilir.
Onun dışında yazılımdan doğrudan para kazanmak yerine, açık kaynak yaklaşımı profesyonel bir dayanışma içinde ortak olan problemleri beraber çözmek ve bu çözümlerle esas müşteriye hizmet üretmek biçiminde de faydalı olabilir. Örneğin bir yazılım kütüphanesi bu şekilde ortak geliştirilebilir ve herkes kendi müşteri projelerinde kullanabilir.