01 - Linux nedir?

Giriş

Linux (ki kendisi linuks diye telaffuz edilir), masaüstü bilgisayarların kullanımına bakıldığında, kullanım oranı çok da fazla olmayan bir işletim sistemidir (araştırmalara göre %3 civarında). Bilgisayarların diğer kullanım alanlarını da hesaba katarsak (gömülü sistemler, mobil cihazlar, sunucular, ağ sistemleri vb.) Linux’un payı çok daha yüksek. %3 de azımsanacak bir oran olmasa da, halen birçok kişi Linux’un ne olduğunu bilmiyor veya nasıl kullanacağı hakkında herhangi bir fikri yok. Bu kitapta bir kullanıcının bakış açısından kopmamaya çalışarak Linux’a teknik ve hızlı bir giriş yapacağız. Özgür yazılımın avantaj / dezavantajlarına veya Linux’un tarihçesine çok fazla dalmadan ilerleyeceğiz. Bu konuları irdelemek isterseniz bu bölümün sonundaki diğer kaynaklar bölümüne göz atabilirsiniz. Linux modüler ve açık bir işletim sistemi, yani sistemi oluşturan parçalar kullanıcıların gözetimine ve denetimine açık durumda. Ama işletim sistemlerinin yapısını ve bileşenlerini bilmeyen bir kullanıcının bu söylediğimize bir anlam yüklemesi zor. Bu sebeple öncelikle işletim sistemi kavramına bolca yer vereceğiz. İşletim sisteminin ne olduğunu anlattıktan sonra Linux işletim sistemleri ile, yani “Linux dağıtımları” ile devam edeceğiz. Ayrıca her bölümün sonunda, cevapların tümünü kitapta bulamayacağınız bir alıştırma ekledik. Bunları, Linux hakkında araştırma yaparak kendinizi geliştirebileceğiniz birer yardımcı olarak görebilirsiniz. Kitabın sonunda ipuçlarını veya varsa cevapları bulabilirsiniz.

Bir İşletim Sisteminin Yapısı

İşletim sistemi, aslında her parçası belirli bir görevi yerine getiren (kabaca aşağıdaki gibi kategorileyebileceğimiz) yazılımların bütünüdür.

  • Çekirdek (kernel) , işletim sisteminin merkezidir. Yazılım ile donanım arasındaki iletişimden ve işlemci, hafıza, ağ gibi kaynakların yönetiminden sorumludur. Bununla beraber, yazılımcılara donanıma erişip yeni programlar üretebilecekleri temel bir altyapı da sunar.
  • Sistem kütüphaneleri, yazılımcıların işletim sistemi üzerinde çalışacak uygulamaları yazmasına yardımcı olacak yazılımsal yöntemleri içerir. Bu yöntemler; çalışan süreçlerin/işlemlerin oluşturulması ve yönetimi, dosyalara erişim, ağ işlemleri gibi uygulamalara gerekli olan ve birçok uygulamanın ortak şekilde yaptığı işlemlerin yapılmasına yardımcı olurlar. Yazılımcıların programı yazarken çekirdek ile direkt olarak iletişim kurmaması için (ki bu pek verimli veya sağlıklı olmazdı) bu kütüphaneler oldukça önemli.
  • Sistem araçları, bahsettiğimiz sistem kütüphaneleri kullanarak yazılan uygulamalardır. Kullanıcıların çalışan işlemleri yönetmesi, dosyaları gezmesi, uygulama çalıştırması, ağ ayarlarını düzenlemesi gibi işleri yapabilmelerini, yani sistemi yönetebilmelerini sağlayan araçlardır.
  • Geliştirme araçları ise, sistemde (veya sistem için) çalışacak yazılımların geliştirilmesine yardımcı olan araçlardır. İşletim sisteminin çalışması için gerek olmasa da, devamlılığı açısından ihtiyacı olduğu için kategorilerimize ekledik. Bunlara örnek olarak derleyicileri (yazılımcıların yazdığı kodu makina diline çeviren araçları) verebiliriz.

Çekirdek (Kernel)

Bir çekirdek genel olarak 4 temel görevi yerine getirir:

  • Donanım yönetimi
  • Bellek yönetimi
  • İşlem yönetimi
  • Sistem çağrılarının uygulanması

İlk özelliğimiz donanım yönetimi: Bilgisayarlarda birçok donanım elemanı bulunmakta. İşlemci, RAM, diskler, ağ kartları, ekran kartları, ses kartları vs… Her donanım da farklı şekilde çalıştığı için, çekirdeğin hangi donanımın neler yapabileceğini, yani yeteneklerini bilmesi gerekmekte. Bu tür bilgiler çekirdeğin erişebileceği *donanım sürücüleri*nde tutuluyor. Bu sürücüler sayesinde donanımlar birbiriyle uyumlu şekilde çalışabilmekte. Bellek yönetimi kısmında ise çekirdek, sistemin belleğe (RAM/swap vs..) erişiminden ve kullanılan/kullanılmayan alanın yönetiminden sorumludur. Bir işleme atanmış belleğin kaydının tutulması ve onun verilerine başka bir işlemin ulaşamaması gibi hayati işlevleri de çekirdek sağlar. Bunu yapmak için çekirdek, “sanal bellek” (virtual memory) denen bir özellik kullanarak, hangi veriyi bellekte nereye koyduğunun kaydını tutar. Uygulamalar ön tarafta yalnızca sanal bellekteki yerleri üzerinde işlem yaparlar, ancak çekirdek arka tarafta hangi sanal konumun gerçekte nereye denk geldiğini bilir ve yönetimi sağlar. Bu yaklaşımın faydalarına bir örnek olarak: Belleğin dolu olduğu durumlarda, aslında bellek üzerinde tutulması gereken ancak çok sık erişilmeyen bir veriyi, uygulama bunun farkında dahi olmadan, diskin ek bellek gibi kullanıma ayrılmış bir bölümüne (swap) alınabilir. Ayrıca çekirdek işlemlere belirli öncelikler verip, öncelik sırasına göre zamanlama yapar ve tüm işlemlerin işlemciyi gerektiği kadar kullanmasını da sağlar. İşlem yönetimi özelliği bununla sınırlı değil tabi, çalışan işlemlerin güvenlik ve sahiplikleri, işlemler arası iletişim gibi özelliklerin de sağlayıcısı yine çekirdektir. Çekirdeğin sistemi çalıştırabilmesi, sistem ve yazılımcı arasında veri alışverişini sağlayacak sistem çağrıları sayesinde mümkündür. Bu çağrılar sayesinde, yazılımcı çekirdekten sistemin durumu hakkında bilgi alabilir ve çekirdeğe komutlar verebilir. Örnek olarak donanımın bir parçasına bir iş yaptırmak için (“web kamerasını kapat!” gibi) komut gönderip bunun sonucunda bilgi alması (“başarıyla kapatıldı”) sistem çağrıları tarafından sağlanmaktadır. Bu çağrıların güvenli şekilde yönetilmesi de, kötü amaçlı yazılım(cı)ların sistemde zararlı işlemler yapmasını önleyeceği için, bir zorunluluktur.

Sistem Kütüphaneleri

Çekirdek tüm işleri tek başına yapamayacağı ve her işletim sistemi çekirdeği kendine özel bazı sistem çağrıları içerdiği için; yazılımcılara sistemle iletişime geçtiklerinde yardımcı olmak adına, “sistem kütüphaneleri” bulunmaktadır. Bu kütüphanelerde birtakım standart işlemler için yöntemler bulunmakta, bu yöntemleri kullanan programların çağrıları, üzerinde çalıştığı sisteme uyumlu çalıştırılmaktadır. Popüler bir örnek olarak muhtemelen en önemli sistem kütüphanesi olan C dili kütüphanesini gösterebiliriz. Bu kütüphane, yazılımcıya lazım olacak önemli işler için standart fonksiyonlara sahiptir (örn. matematiksel metodlar, hafızadaki verinin yönetimi, dosya işlemleri). Yazılımcının bu fonksiyonları kullanarak yazdığı program, C kütüphanesini destekleyen tüm işletim sistemlerinde çalışabilir. C kütüphanesi, her çekirdek için gerekli ve geçerli işlemleri bilip, bulunduğu sisteme uyumlu çalışmasına yardımcı olacaktır. Bu sayede yazılımcıların çekirdek ve sistem tarafında gereksiz işlerle uğraşmadan, bu kütüphaneleri kullanarak birden çok platformda çalışabilecek programlar üretmesi sağlanır. *Sistem kütüphanesi*nin kesin bir tanımı yok. Ancak kabaca, bir işletim sisteminin minimal kurulumunda içinde gelen kütüphaneleri (sistemin kendisine dahil oldukları için) sistem kütüphanesi sayabiliriz. Aynı yazılımları çalıştıracak olan Linux dağıtımları, (aralarında çok az farklar olsa da) aşağı yukarı aynı sistem kütüphanelerini öntanımlı sistem kurulumlarına dahil etmekteler. Linux için en bilinen sistem kütüphanesi glibc olarak da bilinen GNU C Kütüphanesidir.

Sistem araçları

Sistem kütüphaneleri gibi, sistem araçlarının da kesin bir tanımı bulunmamaktadır. Ancak kütüphanelerin aksine, sistem araçları kullanıcıya direkt olarak görünür durumdalar. Bu sebeple birçok Linux dağıtımı genellikle aynı araçları kullanmakta. Peki sistem aracı nedir? Çekirdek ve sistem kütüphanelerinin yardımı ile uygulamalarımızı yazdık. Ancak sistemdeki dosyaları listeleme, arama yapma, bir işlemi başlatma-sonlandırma veya kullanıcılarla ilgili yetkilendirme gibi işlemleri, yani sistemin yönetim işlerini nasıl yapacağız? İşte bu tür işleri yapmamızı sağlayan araçlara sistem araçları diyoruz. Bu araçları kullanmayı bilmeden, sistemde olan bitenden haberdar olup, sisteme müdahale etmeniz mümkün değil. Bazı işletim sistemleri bu tür araçları arka planda tutuyor. Linux ve benzerleri ise, her iş için sade bir araç üretip, bunları kullanıcıya sunmakta. Linux sistemlerde bu tür işlerin çoğunu yerine getirmek için GNU çekirdek araçları (GNU Core Utilities) kullanılmaktadır.

Geliştirme araçları

Yukarıdaki üç bileşen ile şu anda tüm istediğimiz işleri yapmıyor olsa da çalışır durumda bir işletim sistemine sahip olduk. Peki istediğimiz işleri nasıl yapacağız? Tabi ki sisteme işimize yarayan programları ve kütüphaneleri kurarak… Bu kütüphaneler ve programların yazılmasını ve (ilerideki bölümlerde örnekleri ile göreceğimiz şekilde) sisteminize uyumlu şekilde çalışması için derlenmesini sağlayan birtakım araçlar bulunmaktadır. Bu araçlara, sırayla kullanıldıklarında çalışan bir program ortaya çıkardıkları için, tool chain yani araç zinciri adı verilir. Araç zinciri, geliştirme araçlarının sadece bir parçasıdır. En bilinen geliştirme araçları arasında, yine GNU vakfı tarafından sağlanan, (ilerde göreceğimiz) GNU Derleyici Koleksiyonu’nu (gcc) sayabiliriz.

Son Kullanıcı Araçları

Yazılımcı işini tamamladığında, ortaya son kullanıcıların kullanabileceği bir yazılım çıkıyor. Kullanıcı bu yazılım ile sistemde istediği işi artık yapabilir durumda. Sistemin çalışması bakımından bu tür yazılımlar şart olmasa da, kullanıcının ihtiyacını temsil ettiği için, önemi büyük. Bu son kullanıcı araçlarına örnek olarak ofis uygulamalarını, web tarayıcıları ve video oynatıcıları verebiliriz. Birçok işletim sistemi, son kullanıcı araçlarının tamamını içerisinde barındırmıyor. Bunun sebebi çok fazla olmaları ve kullanıcının tercihine bırakılması. Bazı işletim sistemleri, bu yazılımların kurulabilmesi için bir yöntem bile sunmayıp; yazılımcıdan kurulum yapacağı bir araç geliştirmesini beklemektedir. Linux gibi bazıları da kullanıcıyı fazla arayışa sokup işlerini uzatmadan, sistemine yazılım kurabilmesine ve sistemindeki yazılımları güncellemesine yardımcı olacak bazı araçlar sunar.

Peki, GNU ne demek?

GNU projesi, birçok geliştirici/yazılımcının bir araya gelmesi ile ortaya çıkmış bir oluşum. Açılımı ise “_GNU is Not Unix_” yani GNU Unix Değildir. GNU’nun arkasındaki yasal oluşum olan GNU vakfı, yazılımların sadece ücretsiz olmasından öte, kullanıcıların bir yazılımı istediği gibi kullanabilmesi, içeriğine müdahale edebilmesi ve bu şekilde yaptıkları değişiklikler ile dağıtabilmesi özgürlüğünü de savunmakta. Sık olarak kullanılan yazılımların çoğu ücretsiz olmasına rağmen, beraberinde bir “Son Kullanıcı Lisans Sözleşmesi” (EULA) ile gelmekte (genellikle kurulum sırasında görüntülenen) ve kullanıcıların yazılımı nasıl kullanması (veya kullanmaması) gerektiğini belirleyen şartlar sunmaktadır. Özgür yazılımlarda da buna benzeyen ancak kullanıcıyı kısıtlamak yerine, kullanım özgürlüğünü garantiye alan sözleşmeler bulunmaktadır. Örnek olarak GPL (GNU Genel Kamu Lisansı) gösterebiliriz.

Linux İşletim Sisteminin Çekirdeği: Linux

Linux işletim sisteminin temel parçası, işletim sistemine adını veren çekirdeğidir. Çekirdeğin geliştirme süreci birkaç ayrı daldan ilerler. Tüm Linux işletim sistemleri Linux çekirdeğini kullanmakla beraber, çoğu kendisine göre çekirdeği biraz düzenler. En önemlisi elbette ki resmi sitesinde yayınlanan vanilla çekirdektir. Çekirdek geliştiricilerinin büyük kısmı, buradaki kodu geliştirmek için çalışıyorlar. Farklı ihtiyaçlara yönelik sistemler gerektiğinde yazılımcılar (veya firmalar) bu kaynaktaki çekirdeği alıp, farklı yamalar ekleyerek -uyumluluğu bozmadan- vanilla çekirdekte olmayan bazı özellikleri ekleyebiliyor. Bu özellikler zaten genelde vanilla çekirdeğe koyulacak kadar geliştiği düşünülmeyen veya yerini farklı bir özelliğe bırakanlar. Linux çekirdeği, Linus Torvalds tarafından 1991 yılında yaratılan, hızlıca gelişen (1.0.0 sürümü 1994’de) ve büyüyen (1.0.0 sürümündeki kod ~175bin satır) bir çekirdektir. Geliştirilmesinde birçok yazılımcının (firma destekli veya şahsi) katkısı bulunmaktadır. Örneğin (2007’deki) 2.6.21 sürümünün çıkması için 800’den fazla katkı sağlayan var. Sürümlerin numaralandırılması ise şöyle: Genelde ilk iki numara büyük sürüm, sonrakiler de ufak sürümler (hata düzeltmeleri) olarak yapılmaktadır. İlk iki numarada bir değişiklik varsa, çekirdeğin ana özelliklerinde bir değişiklik olduğunun göstergesidir. Peki sürekli geliştirilen bu çekirdeğin yeni bir sürümü çıktığında, kullanıcılar bundan otomatik olarak hemen faydalanabiliyor mu? Hayır. Bu noktada dağıtımların görevi başlıyor…

Linux İşletim Sistemleri: Dağıtımlar

Eğer bir kullanıcı, Linux işletim sistemini herhangi bir yerden yardım almadan kurmak isterse; çekirdeği ve gerekli bileşenleri (kütüphaneler, sistem araçları, son kullanıcı uygulamaları) kendisi derlemeli, yazılımların güncellemelerini (yeni sürüm ve güvenlik yamaları) takip etmeli ve sistemine uygulamalıdır. Tüm bunları elle yapmak mümkün olsa da (bkz: LFS projesi) çoğu kullanıcı biraz daha kullanıcı dostu bir yöntem tercih etmektedir. Dağıtımlar, Linux’un kullanıcılara görünen yüzü olarak, Linux’u farklı şekillerde sunan projelerdir. Kullanıcı bir dağıtımı sistemine kurduktan sonra, belirli işlerini o dağıtımın yöntemi ile hallederler. Dağıtımlar, sistemi ilgilendiren bazı kararlar verirler:

  • Kullanıcılar işletim sistemini nasıl kurmalı?Kullanıcılara olabildiğince detaylı adımlar ile kurulum yaptıran LFS “dağıtımı” ve herhangi bir kurulum bile gerektirmeden CD veya USB diskten direkt olarak çalışabilen dağıtımlar bu konuya iki uç örnek olabilir.
  • Kurulum seçenekleri ne olmalı? (CD, DVD, İnternet…)Birçok dağıtım kurulum ortamını CD/DVD olarak sunar. Ancak farklı kurulum seçenekleri de mevcuttur. Bir dağıtımı ağ üzerinden (iş ortamları için, herhangi bir yapılandırma işlemi yapmadan hızlıca kurulum), Windows işletim sistemi gibi CD/DVD ile bilgisayarınızı başlatarak veya farklı bir işletim sisteminin içerisinden de kurabilirsiniz.
  • Kullanıcı hangi yazılımlara erişebilir?Popüler Linux dağıtımları kullanıcılarına kurabilecekleri oldukça geniş yazılım seçenekleri sunmakta, bu sayede geniş kullanıcı kitlelerine (ihtiyaçlarının çoğunu karşılayabildikleri için) uygundurlar. Ancak özel işler için tasarlanmış dağıtımlar da bulunuyor: Örneğin ev sinema sistemi, güvenlik duvarı, az kaynağa sahip olan veya eski cihazlar için geliştirilen dağıtımlar gibi.
  • Yazılımlar nasıl derlenmeli (hangi sistemlere özel, hangi özelliklere sahip …)?Eğer bir dağıtım, sistemin birçok işlemci türünde çalışabilmesini istiyor ise (Pentium, i7, Athlon, Xeon, Itanium, …) yazılımları derlerken “Itanium” gibi özel bir işlemci türü yerine, “i686” gibi temel bir *mimari*ye (ilerde bahsedeceğiz) uyumlu olarak hazırlamalıdır. Bunun sonucu olarak - tabi ki yeni işlemcilerin sağladığı bazı özellikler kullanılamaz olsa da - bu şekilde derlenen yazılımlar bu platformdaki tüm işlemciler tarafından kullanılabilir olacaktır. Benzer şekilde, yazılımların bazı özellikleri (Örn. ipv6, ssl, grafiksel ortam desteği…) derleme sırasında açılıp/kapatılabilir. Yazılımlarını derlenmiş olarak sunan dağıtımlar (ki dağıtımların çoğu bu şekilde) bu tercihi kullanıcılarının yerine yaparak, yazılımların açılabilen tüm özelliklerini açarlar. Bu sebeple kullanıcı ihtiyaç duymasa bile bazen kurulan bir yazılımın ek bir özelliğinin çalışması için ihtiyaç duyulan kütüphaneleri de sisteme kurulabilir.
  • Yazılımın çevirisi önemli mi?Bazı dağıtımlar, bölge veya dile özelleşmiş durumda (Örn. “Kanada’daki Fransızca konuşan topluluğa”). Bazıları da olabildiğince çok bölge ve dili destekleyerek global olma amacındadır.
  • Kullanıcılar sistemini nasıl güncellemeli?Birçok dağıtım, otomatik olarak işleyen bir güncelleme yöntemi sunar. Ancak hepsi için durum böyle değil. Yeni sürümün CD’sini takarak güncelleme yapmanızı isteyen dağıtımlar da bulunuyor.
  • Kulanıcı sistemini nasıl düzenleyebilir?Eğer masaüstü kullanıcısı iseniz, yapacağınız bir özelleştirme için (mesela masaüstü arkaplanınızı değiştirmek) ilgili ayar dosyalarını bulmak veya komut satırında bazı komutlar vermek istemezsiniz. Muhtemelen grafiksel olarak size gerekli özelleştirme ortamını sağlayacak bir dağıtım daha çok işinize yarayacaktır.
  • Dağıtımın hedef kitlesi ne olmalı?Çoğu dağıtım ev/ofis kullanıcıları için üretilmesine rağmen; yaşlılara, öğrencilere, bilim adamlarına, görme engellilere veya internet erişimi olmayan insanların kullanımına özelleşmiş dağıtımlar da bulunmaktadır.
  • Yazılım politikası nasıl olmalı?FSF (Özgür Yazılım Vakfı) gibi organizasyonların, yazılım özgürlüğü konusundaki vizyonlarını paylaşan bazı dağıtımlar, sistemde FSF’nin onaylamadığı yazılımları barındırmamaktadır. Bazı dağıtımlar da kullanıcıya temelde bu şekilde bir sistem sunmakta, ancak kullanıcıya isterse özgür olmayan yazılımları kurma şansı sağlamaktadır. Güvenliği ön plana çıkaran ve dahil edeceği yazılımları önce sıkı bir güvenlik filtresinden geçiren dağıtımlar da bulunmakta.
  • Dağıtıma ücretsiz erişim olmalı mı?Tabi ki fiyat da önemli bir tercih sebebi. Tüm dağıtımlar ücretsiz olarak indirilebilir durumda değil. Hatta dağıtımı bedava sunarak, güvenlik güncellemeleri için ücret talep eden dağıtımlar da var.


Her biri işleri birbirinden farklı yürüten birçok dağıtım var. Bunlardan size uygun olanını bulmak ise, genellikle zaman alıcı ve deneyim isteyen bir iş. Ancak Linux’a yeni başladıysanız, muhtemelen bol sayıda kaynak bulabileceğiniz bir dağıtım hoşunuza gidecektir. Arkadaşlarınıza ve çevrenize sormanızda fayda var. Malum, destek yöntemleri arasında en iyisi, kişisel destek.

Peki bu dağıtım denen şey ne?

Dağıtım için, “paket adı verilen yazılım kutularının, işlevsel bir bütün oluşturacak şekilde örgütlenmiş halidir” diyebiliriz. Paketler, diğer projeler tarafından oluşturulmuş yazılımları ve çoğunlukla dağıtıma özel yamaları kapsarlar. Bu şekilde paketlenen bir yazılım, dağıtımın (sistemin) geri kalanına uyumlu bir şekilde çalışabilir. Paketin formatı ve içindeki yazılım dosyalarının yerleşimi gibi özellikler, dağıtıma bağlı olarak değişebilir. Örnek olarak MPlayer isimli, birçok video formatını desteklemesiyle ünlü bir video oynatıcı programı ele alalım. Eğer bu yazılım ile Windows Media Video (WMV) dosyalarını açmak isterseniz, win32 formatı olarak bilinen, özgür olmayan bir formatı da destekleyecek şekilde derlenmiş haline ihtiyacınız var. Bazı dağıtımlar MPlayer’i bu desteğe sahip şekilde sunarken, bazıları özgür olmadığı gerekçesiyle bunu yapmamakta. Örnek olarak göreceğimiz Gentoo Linux ise size seçim şansı verenlerden.

Dağıtım ne işe yarar?

Bir dağıtım, size sistemde ihtiyaç duyduğunuz işlemleri yaparken bazı yardımcı araçlar sunar:

  • Dağıtımı kurmak için
  • Sisteminize yazılımlar kurmak için
  • Sisteminizi yapılandırmak için

Buradaki önemli bir nokta, bu işlemleri yaparken sağlanan araçları kullanmak zorunda olmadığınız. Dağıtımı farklı bir şekilde kurabilir, yazılımları elle derleyerek vb. kurabilir ve sistem dosyalarını direkt olarak düzenleyerek sisteminizi yapılandırabilirsiniz. Peki neden dağıtımlar bu araçları üretmek için çaba harcıyor? Yanıt basit: Kolaylık. Bu araçları kullanmadan da (hatırlarsanız LFS’den bahsetmiştik) sistemde işlemlerinizi yapabilirsiniz. Ancak bu araçlar işleri büyük oranda kolaylaştırmakta. Dağıtımların sağladığı bir diğer artı da, bahsettiğimiz “paketler”. Paket dediğinizde, aklınıza içerisinde sistem ile entegre olması için gerekli bilgiler bulunan tam bir yazılım kutusu getirebilirsiniz. Genellikle bir dağıtım paketinin içeriğinde yazılımın bilgileri (adı, tanımı, sürümü, kurulabilmesi/çalışabilmesi için gerekli olan diğer paketlerin adları) ve yardımcı (menüde nerede bulunacağı, sistemde derlenmesi gerekiyorsa nasıl derleneceği gibi) bilgiler bulunur. Paketler karışık ve zor bilgiler içerdiklerinden, genellikle hazırlamaları zaman alır. Bu yüzden her dağıtım, her yazılımı yeni sürümünü çıktığında hemen paketleyerek kullanıcıya ulaştıramaz. Ancak uygulamaların güvenlik açıkları tespit edildiğinde, yazılımda büyük bir değişiklik olmadığı için bu süreç hızlı işler ve güvenlik yaması uygulanmış paket hızlıca servis edilir. Bir dağıtım projesi, yazılımın yanı sıra aşağıdakileri de sağlar:

  • Dağıtım ile ilgili yardımcı belgeler
  • Dağıtımı ve belgelerini indirebileceğiniz bir altyapı
  • Güncel yazılımlar için yeni paketler
  • Günlük güvenlik güncelleştirmeleri
  • Destek (dağıtımın forumları, e-posta, telefon veya ticari destek şekillerinde olabilir)


Aslında bugün bir dağıtım bundan çok daha fazla şeyi ifade ediyor. Dağıtımlar “ticari seviyede” hizmet vermek için, geniş bir organizasyon yapısında, birimlere ayrılarak çalışıyorlar.

Mimari ne demek?

Mimari kelimesini yukarıda kullanmıştık. Açıklamak için öncelikle komut seti (instruction set) kavramından bahsedelim. Bilgisayarlardaki (veya telefon gibi akıllı cihazlardaki) işlemciler; matematiksel fonksiyonlar, hafıza yönetimi, akış yönetimi gibi işler için diğerlerinden farklı yöntemlere sahip olabilir. Komut seti, bir işlemcinin anlayabileceği bu yöntemlere verilen isimdir. Yeni bir program yazıldığında; programın kodları bilgisayarınızın çalıştırabileceği, yani bilgisayarınızın işlemcisinin anlayabileceği hale getirilirken (derlenme) aslında bu yöntemleri kullanacak şekilde düzenlenirler. Her işlemci de farklı yöntemleri desteklediği için, örn. bilgisayarınızdaki Intel Pentium 4 işlemcisinin komut setini kullanmak üzere derlenmiş bir yazılım, Sun UltraSPARC III işlemcili bir bilgisayarda çalışamayacaktır. İşte bu yüzden işlemciler mimari (architechture) ismi verilen gruplara ayrılırlar. Örneğin Intel uyumlu sistemlere genel olarak x86 mimarisi denmektedir. x86’da sistemin açılışı “BIOS” ile gerçekleşirken, Sun Sparc işlemcilerinin mimarisi olan _sparc_‘da “Boot PROM” ile gerçekleşmektedir. Linux dağıtımları genellikle çok sayıda mimariyi destekliyor. Kişisel bilgisayarınızda büyük ihtimalle x86 veya amd64 mimarisini kullanacak olsanız da, diğer mimarilerin varlığını bilmenizde fayda var. İleride bazı araçların bir mimariye özel olduğunu veya dağıtımların bazı mimarilerde güncel yazılımları sağlarken, diğerinde geriden takip ettiğini görebilirsiniz.

Linux’un Efsaneleri

Linux arada bir internette/medyada karşınıza çıkabilir. Linux’un ne olduğuyla ilgili tanıma bakalım:

Linux, genelde Linux çekirdeği ve üzerinde çalışan araçların oluşturduğu işletim sistemine verilen isimdir.

Tabi bu tanım bilgisayarında Microsoft Windows’dan başka işletim sistemi kullanmamış kişiler için pek anlam ifade etmeyecektir. Linux’u öğrenmenin en iyi yolu kullanmak olsa da, devam etmeden önce Linux hakkında etrafta konuşulan bazı efsanelere değinelim.

Efsaneler

Linux’u kurmak zor

Her zaman Linux’u kurmanın zor olduğunu söyleyen birileri çıkacaktır. Elbette her dağıtım aynı değil ve bazıları kurulum sırasında biraz zorlayıcı olabiliyor. Ancak çoğu dağıtımın kurulumu son derece kolay. Birçoğu kurulum sırasında ekranda yardım seçeneği de sunuyor ve kurulumları Microsoft Windows’u kurmaktan daha karmaşık değil. Bazı dağıtımlar iki veya üç soruya yanıt verilerek kurulabiliyor. Hatta önceden bahsettiğimiz gibi, kurmanıza bile gerek olmadan kullanabileceğiniz dağıtımlar mevcut.

Linux için destek yok

Linux’un ticari olarak desteklenmediği günler geçtiğimiz yüzyılda kaldı. Artık Linux’u Novell veya RedHat gibi sağlayıcılardan (desteğiyle birlikte) alabilir veya benzer sağlayıcılardan yalnızca kullandığınız dağıtım için destek paketleri alabilirsiniz. Ayrıca birçok dağıtımın ücretsiz destek kanalları da gayet başarılı şekilde işlemekte. Masaüstü kullanıcısı iseniz, herhangi bir ücretli destek paketine gerek kalmadan, bu kanallar üzerinden size gerekli tüm yardımı alabilirsiniz.

Linux açık kaynak kodlu, bu yüzden yazılımlarında çok problem bulunuyor

Aslında bu kapalı kaynak kodlu yazılım satanların sevdiği bir bahane. Ancak açık kaynak kodlu olduğu için, kodu inceleyen çok sayıda insanın ve şirketin bulunduğundan ve bu sayede güvenlik açıkları uzun süre yaşayamadığından pek bahsetmiyorlar. Ayrıca bunun bir artısı da sistemin bir parçasını geliştirmek isteyen bir yazılımcının kaynak kodlara çok hızlı bir şekilde ulaşması.

Linux siyah ekrandan ibaret

Linux çekirdeği tek başına sizi masaüstü ile karşılamaz. Ancak Linux’da elbette grafiksel arayüz de var. Hatta çoğu dağıtım, kullanıcıya gerekli tüm adımlarda grafiksel arayüz sağlamaya çalışıyor. Bu sayede sisteminizi kullanırken grafiksel bir ekran görüyor ve grafiksel araçları kullanıyorsunuz. Yine de bu kitapta, daha iyi kavramanızı sağlayamak amacıyla işlemleri komut satırı üzerinde gerçekleştireceğiz.

Kullandığın yazılım Linux’da çalışmaz

Çoğu Microsoft Windows yazılımı için, bu söylem doğru. Ancak Linux’da size gerekli işi yapabileceğiniz başka bir yazılım bulma ihtimaliniz çok yüksek. Hatta halihazırda kullandığınız bazı yazılımların direkt olarak Linux sürümleri zaten var. Örnek olarak web tarayıcıları Firefox ve Chrome’u verebiliriz. Windows yazılımlarını çalıştırabilmeniz için kütüphaneler ve emülatörler de bulunmakta. İşlerinizin çoğunu Linux ile halledebiliyor, ama bir iki yazılım yüzünden Windows’a bağımlı kalıyorsanız, bunları deneyebilirsiniz.

Linux güvenlidir

Bu da bir efsane. Linux, Windows veya Mac OS X’den daha güvenli değildir. Güvenlik, yazılımlardaki açıklardan daha geniş ve büyük oranda da kullanıcılara bağlı bir kavramdır. Örneğin parolasını 123456 yapan bir kullanıcının Windows yerine Linux kullanması, açık bıraktığı bilgisayarına başka birinin giriş yapabilmesine engel olmayacaktır. Ancak Linux, istenirse paranoyak seviyesinde güvenli olabilir. Bazı dağıtımlar özel olarak güvenlik üzerine yoğunlaşmış durumda. Yine de güvenli bir sisteme sahip olmak için illa bu dağıtımları kullanmanız gerekmiyor. Kullandığınız dağıtımın güvenlik ile ilgili belgelerini okumak, sisteminizi düzenli olarak güncellemek ve güvenmediğiniz yazılımları çalıştırmamak gibi basit önlemler ile sisteminizi güvenli tutabilirsiniz.

Linux çok bölünmüş durumda

Çok fazla sayıda Linux dağıtımı olduğu için Linux’un bölünmüş olduğu sık söylenir. Ancak burda gözden kaçan nokta, aslında kullanılan yazılımların aynı olması. Bir dağıtımın kullanıcısı, zorlanmadan başka bir dağıtımı kullanabilir veya kullananlara yardımcı olabilir. Yani dağıtımın farklı olması genelde işlevselliği etkilemez. Bu sebeple çok sayıda dağıtım olmasını bir zayıflık değil, son kullanıcıya seçim hakkı tanıyan bir özellik olarak belirtebiliriz. Eğer bu bölünme, çekirdek türlerine atıfta bulunuyor ise, geliştirmelerin vanilla çekirdeğin önderliğinde gittiği unutulmamalı. Vanilla güncellendiğinde, diğer çekirdek çeşitleri de güncellenerek uyumluluk bozulmuyor. Zaten çekirdekteki çeşitlenmenin sebebi genellikle lisans veya olgunluk gibi sebeplerle vanilla’ya alınmayan özellikleri de kullanıcıya sunabilmek. Bölünme olarak, farklı masaüstü ortamları kastediliyor da olabilir (KDE, GNOME gibi). Ancak bu ortamları da uyumlu çalışıyor; yani bir KDE uygulamasını GNOME altında çalıştırabilirsiniz, tersi de mümkün. Bu da yine kullanıcıya bir tercih hakkı sunuyor. Bölünerek gelişme Linux’un (ve genelde özgür yazılımın) bir özelliği. Bölünmenin sebebi genellikle farklı yazılımcıların yazılımları kendi yöntemleri ile daha iyi hale getirmeye çalışması.

Linux, Microsoft Windows’a alternatiftir

Linux alternatif değil, farklı bir işletim sistemidir. Bu kavramlar arasındaki farka dikkat çekmekte fayda var. Alternatifler, aynı özelliği farklı bir arayüzle sunar. Ancak Linux farklı bir işletim sistemi ve Windows’un sağladığı özellikleri sağlamak gibi bir hedef gözetmiyor.

Linux, Microsoft karşıtıdır

Linux’un amacı, yaygın olarak kullanılan ve işlevsel bir işletim sistemi ortaya çıkarmaktır. Microsoft’a karşı iyi düşünceleri olmayan insanların genellikle Linux kullanması, Linux’un Microsoft karşıtı olduğu anlamına gelmemektedir. Hatta Linux çekirdeğine Microsoft tarafından eklenen kodlar da hatırı sayılır seviyede.

Zayıf Yönler

Tabi ki Linux hakkındaki tüm eleştiriler haksız değil. Linux’un da kendini geliştirmesi gereken noktalar da var.

Oyun desteği yavaş ilerliyor

Doğru. Linux üzerinde oynayabileceğiniz birçok özgür oyun bulunmasına rağmen, oyunları çoğu özellikle Microsoft Windows için üretiliyor. Bunlardan Steam gibi projelerin yardımı ile Linux’a uyumlu hale getirilenlerin yanısıra, emülatörler ve WINE kütüphaneleri aracılığıyla oynayabileceklerinizin sayısı gayet fazla.

Son çıkan donanımın adapte olması zaman alıyor

Eğer üretici firması Linux desteği verip sürücü üretmemiş ise, yeni bir donanımın desteğinin çekirdeğe girmesi zaman alabiliyor. Tabi ki yıllardan değil, aylardan bahsediyoruz. Örnek olarak yeni çıkan bir ses/ekran kartının sürücüsü yazılarak, çekirdek tarafından desteklenmesi ortalama 3-6 ay arasında zaman almakta. Tabi çoğu üründe üretici firmanın desteğiyle bu süre çok daha kısalıyor. Aynı durum, önceden büyük bir eksiklik olan kablosuz ağ donanımlarında da artık geçerli. Bunun en büyük sebebi yine üreticilerin artık Linux sürücüsü ve dökümanı da yayınlamaya başlaması.

Alıştırmalar

  1. Duyduğunuz Linux dağıtımlarının bir listesini oluşturup, bunları inceleyerek, size cazip gelen taraflarını sıralayın. Örneğin dökümanları, donanım desteği, çevirileri vb…
  2. 7 tane işlemci mimarisi bulun.
  3. Yeni çekirdek sürümleri neden son kullanıcılara anında ulaştırılmıyor? Burada dağıtımların rolü ne?

Diğer Kaynaklar