Tarihçe
Unix ve C
1969 yılında Ken Thompson Bell laboratuarlarında ilk Unix versiyonunu geliştiriyorken aynı yıl kilometrelerce uzakta Linus Benedict Torvalds hayata gözlerini açıyordu.
İlk Unix versiyonu Digital PDP-7 sistemi üzerinde assembler ile yazılmıştı. Bir yıl sonra da Unix bu defa Digital PDP-11 için yeniden yazıldı.
Ken Thompson işletim sistemini tasarlarken pek çok prensibi MULTICS'den almıştı. Bu vesileyle genel olarak MULTICS'e de kısaca değinmekte fayda görüyoruz.
MULTICS (Multiplexed Information and Computing Service) projesi 1964 yılında Cambridge, Massachusetts'de başlamıştır. Ardından önce General Electric sonrasında da Honeywell firmalarında bir ürüne dönüştürülmeye çalışılmış fakat ticari açıdan tarihe başarısız projelerden biri olarak geçmekten kurtulamamıştır.
Yapılan kritiklerde MULTICS'in zamanının ötesinde, fazla karmaşık bir işletim sistemi olduğu değerlendirilmiştir. Bununla birlikte MULTICS, işletim sistemleri dünyasında bazı temel yöntemlerin ilk uygulandığı ve geliştirildiği sistemlerden biri olmuş, kendisinden sonra yapılan dizaynları etkilemiştir.
İlk defa MULTICS'te görülen başlıca özellikler aşağıdaki gibi sıralanabilir:
- Dosya Sistemi: Dosya ve dizinlerden oluşan ağaç yapısındaki hiyerarşi geliştirilmiştir. Sembolik link desteği gibi özelliklere de yer verilmiştir.
- Per-Process Stack: Çekirdek seviyesinde her process için ayrı bir stack alanı kullanılmıştır.
- Komut İşleyici - Kabuk: İlk defa komut işleyici (command processor) kullanıcı kipinde çalışan bir uygulama ile yapılmıştır. Bu fikir daha sonra kabuk şekliyle diğer işletim sistemlerinde ortaya çıkmıştır.
- Process Memory: Dosya işlemleri için IO katmanı yerine, dosyaların process'in adres alanı içerisine haritalanması ve dosya işlemlerinin standart bellek operasyonlarıyla yapılması, alt katmandaki işlemlerin ise işletim sistemi çekirdeği tarafından yerine getirilmesi sağlanmıştır. Günümüzdeki POSIX standartlarıyla konuşacak olursak, sistemdeki tüm dosyaların Memory-Mapped IO mmap ile kullanıldığındakine benzer bir uygulama söz konusudur.
- Dinamik Linkleme: Bazı yönleriyle günümüzdeki kullanımdan bile ileride olduğu söylenebilecek dinamik link desteği geliştirilmiştir.
- Çoklu İşlemci: Birden fazla CPU kullanımı desteklenmektedir.
- Hot-Swap: Çalışma zamanında sistemi kapatma ihtiyacı olmaksızın bellek, disk ve CPU eklenip çıkarılabilmektedir.
Ken Thompson ve Dennis Ritchie |
Unix ismi de MULTICS üzerinde yapılan kelime oyunlarından ortaya çıkmıştır. MULTICS zamanında büyük ve kompleks bir işletim sistemi olarak çok eleştirilmişti ve Unix ismindeki U, MULTICS'in Multiplexed'ine antitez olması niyetiyle Uniplex'den gelmektedir.
MULTICS'ten esinlenilmiş olan pek çok fikre karşın, ondan farklı olarak Unix'te her zaman sadelik ve tüm sistemin belirli bir işlevi iyi yapan küçük parçalardan oluşması prensibi herşeyin önünde tutulmuştur.
Bir süre sonra Thompson'ın Bell laboratuarlarından arkadaşı olan Dennis Ritchie C dilini geliştirdi. C dili öncesinde Thompson tarafından interpreted modda çalışmak üzere geliştirilen B dilinin devamı niteliğindeydi. Thompson & Ritchie işbirliği bununla kalmadı ve 1973'e gelindiğinde UNIX kodu C dilinde yeniden yazıldı. O tarih için ilk defa bir işletim sistemi, C gibi yüksek seviyeli bir dille yazılmış oluyordu.
O gün için C dili yüksek seviyeli dillere örnek olarak gösterilirken, kitabımızın devamında daha çok düşük seviyeli bir dil olarak adlandıracağız.
C dili o zamanki FORTRAN veya COBOL gibi belirli bir iş alanını adresleyen daha büyük ve karmaşık dillerin aksine, çok küçük bir ekiple, güçlü, verimli, taşınabilir, modüler ve sade biçimde tasarlanmıştır. Unix'in C ile yazılması aynı zamanda işletim sisteminin diğer donanım ve mimarilerde de çalışır hale getirilebilmesini kolaylaştırmıştır. Bunu da büyük oranda C dilinin iyi tasarımı ve kolay taşınabilirliğine borçludur.
1974 yılına gelindiğinde 50'den fazla UNIX kurulu sistem AT&T bünyesinde çalışmaktaydı. Ancak AT&T'nin A.B.D. içerisinde telefon sistemleri konusudaki tekel durumu ve devlet tarafından bağlayıcı maddeler nedeniyle, Unix'in bir ürün olarak ticari piyasaya sunulması mümkün olamıyordu.
Bir ara çözüm olarak, Unix'in 5. versiyonunun yayınlandığı 1974 yılından başlayarak, kaynak kodlar ve dokümantasyonun sembolik bir bedel ile üniversitelerin kullanımına açıldı. Bu tarihte Unix kaynak kodu yaklaşık 10 bin satırdan oluşmaktaydı.
O zamana kadar alternatif çok kullanıcılı - zaman paylaşımlı (multi-user & time-sharing) sistemler oldukça pahalıydı. Unix'in kaynak kodlarıyla birlikte üniversitelerin kullanımına sunulması bir anda hızlı bir büyüme ivmesine de yol açtı. 1977 yılına geldiğinde toplamda 125'i üniversitelerde olmak üzere 500'den fazla sistemde Unix çalışır hale gelmişti.
BSD ve SystemV Ekolleri
Ken Thompson 1975-76 yıllarını mezunu olduğu University of California Berkeley kampüsünde ziyaretçi profesör olarak geçirir. Bu süre zarfında öğrencilerle yaptığı çalışmaların neticesinde Unix'e çok sayıda yeni özellik eklenmesi de sağlanmış oldu.
Bu öğrencilerden biri olan Bill Joy vi editörünün mimarı olduğu gibi 1982 yılında Sun Microsystems'in kurucuları arasında yer alacaktır.
Bu süre zarfında geliştirilen başlıca yenilikler arasında C shell, vi editörü, sendmail e-posta sunucusu, Digital VAX sistemi için bir virtual memory management desteği ve yeni bir dosya sistemi Berkeley Fast File System sayılabilir.
Geliştirilen araçlar önceleri Berkeley Software Distribution adıyla dağıtılıyorken, 1979 yılında yayınlanan 3BSD versiyonuyla birlikte Unix çekirdeğini de içeren tam bir işletim sistemi olarak dağıtılmaya başlanmış ve kısa zamanda özellikle üniversiteler arasında yoğun olarak kullanılmaya başlanmıştır.
1983 yılına gelindiğinde University of California'da 4.2BSD versiyonu yayınlandı. Bu versiyonda ilk defa tam bir TCP/IP stack implementasyonu bulunuyor ve çeşitli network araçlarının yanı sıra soket programlama için gerekli kullanıcı kipi fonksiyonları da sağlanmaya başlanmış oldu.
1986 yılında 4.3BSD ve son olarak 1993 yılında 4.4BSD versiyonu yayınlandı.
Bir tarafta özellikle University of California'nın başını çektiği bu gelişmeler yaşanırken, diğer yandan da AT&T'nin telefon tekeli ortadan kalktı ve AT&T'nin Unix'i ticari olarak pazarlayabilmesinin önündeki engeller ortadan kalkmış oldu.
Bu durumu takiben AT&T tarafından öncelikle 1981 yılında System III, 1983 yılında System V ve 1989 yılında System V Release 4 (SVR4) yayınlandı. AT&T ticari olarak kendi özel Unix versiyonlarını üretmek isteyen firmalara System V'i uygun lisans ile satmaya başladı. Bunun sonucunda SunOS, Digital Ultrix, IBM AIX, HP-UX, NeXTStep, XENIX (Microsoft) vb. ticari Unix versiyonları ortaya çıktı.
Sonuç olarak BSD versiyonu üniversitelerde yoğun kullanım alanı bulup genişlerken, System V versiyonları ticari dünyada gelişim imkanı buldu ve bu versiyonlar çeşitli noktalarda birbirlerinden ufak tefek farklar içermeye başladılar. Zamanla daha belirgin hale gelen bu farklar, BSD ve System V ekolü olarak isimlendirildi ve sonrasındaki işletim sistemlerinin tanımlamasında da bu ifadeler kullanılmaya başlandı.
Microsoft XENIX Açılış Ekranı |
GNU Projesi
27 Eylül 1983 tarihinde, Massachusetts Institute of Technology'de (MIT) çalışan Richard Stallman tarafından GNU Projesi'nin duyurusu yapıldı.
Stallman'in amacı, legal açıdan kullanıcıyı hiç bir şekilde kısıtlamayan, "özgür" (free) bir işletim sistemi oluşturulmasını sağlamaktı. Buradaki özgürlük, ücretsiz anlamına gelmemekle birlikte, hedeflenen idealler doğrultusunda geliştirilecek olan sistemin de ücretsiz veya herkesin kolay erişimini mümkün kılacak makul bir ücretle sunulması da dolaylı hedeflerden biriydi.
GNU'nun açılımı, GNU is Not Unix şeklinde olup, diğer özgür olmayan Unix işletim sistemlerine karşı alternatif bir işletim sistemini ifade ediyordu.
Bir işletim sistemi için çekirdek önemli bir bileşen olmakla birlikte, üzerinde çalışacak uygulamalar olmaksızın tek başına çekirdek çok fazla anlam teşkil etmez. O yıllarda akademik dünyada yoğun kullanım alanı bulmuş olan BSD işletim sistemi (ve çekirdeği) de Stallman'ın tariflediği anlamda "özgür" bir işletim sistemi değildi zira kullanmak için AT&T'den lisans almak zorunluydu ve içerisinde yer alan AT&T tarafından yazılmış kodları özgürce değiştirmek ve dağıtmak mümkün değildi.
Bu noktadan hareketle GNU projesinin tam bir işletim sistemi ortaya çıkarabilmesi için bir özgür yazılımlar topluluğu ve özgür bir işletim sistemi çekirdeği üretmesi gerekliydi.
1987 yılına gelindiğinde, GNU Projesi kapsamında Emacs editörü, gcc C derleyicisi, linker, çeşitli yardımcı araçlar (awk, make, grep vb.) üretilmiş durumdaydı. Üretilen bu yazılımlar ise halihazırda "özgür" olmayan Unix işletim sistemi çekirdekleri üzerinde çalışıyordu.
Proje halen özgür işletim sistemi çekirdeği bileşeninden yoksundu. 1985 yılında Carnegie Mellon Üniversitesi'nde, monolithic Unix çekirdek mimarisinden farklı olarak microkernel mimarisinin ilk örnekleri arasında gösterilen Mach çekirdeği projesine başlanmıştı. Stallman çekirdeğin microkernel mimarisinde geliştirilmesi gerektiğine inanıyordu ve 1987 - 1990 yılları, Carnagie Mellon Üniversitesi'nin Mach çekirdeğini özgür bir lisansla yayınlayıp yayınlamayacağının netleşmesini beklemekle geçti.
Bu beklemeden sonuç çıkmayınca, 1990 yılında eksik olan işletim sistemi çekirdeği parçasının tamamlanabilmesi için, Hurd projesi başlatıldı. Hurd projesinde temel amaç Unix çekirdeği ile uyumlu ancak monolithic Unix mimarisinden farklı olarak microkernel mimarisinde modern bir çekirdek üretilmesiydi.
Monolithic ve Microkernel Mimarileri |
Maalesef Hurd projesinin gelişim süreci, Linux'un da etkisiyle oldukça yavaş ilerledi. 2002 yılında Stallman'ın yılın sonunda kararlı versiyonunu çıkartmayı planlıyoruz mesajına rağmen, günümüzde Hurd halen tamamen kararlı bir çekirdek haline gelebilmiş değildir.
Linux
Önceki başlıklarda Unix ve GNU'nun gelişim sürecini kısaca incelemiş olduk. Unix kullanımı zamanın gelişmiş bilgisayar sistemleri ve mainframe'ler ile mümkün oluyordu, kişisel bilgisayarlar için Unix çok pahalıydı.
1985 yılında Intel Memory Management Unit ve paging desteğine sahip ilk 32bit x86 ailesi işlemcisini çıkardı: 80386
1986 yılında AT&T'den Maurice J. Bach'ın, The Design of the UNIX Operating System kitabı yayınlandı. Bu kitapla birlikte daha geniş bir kesim Unix ile ilgilenmeye başladı.
Bir yıl sonra 1987'de Andrew S. Tanenbaum'un Operating Systems: Design and Implementation kitabı ve üniversitedeki derslerini desteklemek için geliştirilen MINIX işletim sistemi duyuruldu.
25 Ağustos 1991'de Helsinki Üniversitesi'nden Linux Torvalds, comp.os.minix haber grubuna hobi amaçlı olarak 386/486 ailesi için MINIX benzeri bir işletim sistemi çekirdeği geliştirdiğini ve halihazırda bash (1.08) kabuğu ve gcc (1.40) derleyicisini port ettiğini duyuran bir mesaj gönderdi.
From: [email protected] (Linus Benedict Torvalds)
Newsgroups: comp.os.minix
Subject: What would you like to see most in minix?
Summary: small poll for my new operating system
Message-ID:
Date: 25 Aug 91 20:57:08 GMT
Organization: University of Helsinki
Hello everybody out there using minix -
I'm doing a (free) operating system (just a hobby, won't be big and
professional like gnu) for 386(486) AT clones. This has been brewing
since april, and is starting to get ready. I'd like any feedback on
things people like/dislike in minix, as my OS resembles it somewhat
(same physical layout of the file-system (due to practical reasons)
among other things).
I've currently ported bash(1.08) and gcc(1.40), and things seem to work.
This implies that I'll get something practical within a few months, and
I'd like to know what features most people would want. Any suggestions
are welcome, but I won't promise I'll implement them :-)
Linus ([email protected])
PS. Yes - it's free of any minix code, and it has a multi-threaded fs.
It is NOT protable (uses 386 task switching etc), and it probably never
will support anything other than AT-harddisks, as that's all I have :-(.
Torvalds daha sonraki bir ropörtajında, eğer GNU Hurd çekirdeği kullanılabilir olsaydı veya 32 bit 386 ailesi için uygun lisanslı BSD çekirdekleri bulunsaydı muhtemelen yeni bir çekirdek yazmayı hiç düşünmeyecektim diyecektir.
MINIX'in dezavantajı ise 16 bit'lik bir dizayna sahip olması ve kaynak kod değişiklikleri ve dağıtımları için lisansında sorunlu maddeler bulunmasıydı.
Tüm bu şartlar neticesinde Linux doğdu ve hızla gelişti.
Linux İsmi
Linus Torvalds projesine free, freak ve x'in birleşiminden oluşan Freax ismini uygun görmüştü. Projeye isim bulma safhasında Linux ismi de aklına gelmiş ancak bunu fazla "egoist" bulduğundan vazgeçmişti. 6 ay kadar süre boyunca Torvalds tüm kaynak kodları "Freax" adlı bir dizinde tutuyordu.
Eylül 1991'de projenin kaynak kodları ftp.funet.fi FTP sunucusuna yüklendi. Torvalds'ın Helsinki Üniversitesi'nden de iş arkadaşı olan FTP Sunucusunun sistem yöneticisi Ari Lemmke Freax'ın iyi bir isim olduğunu düşünmüyordu. Bu nedenle Torvalds'a danışmadan FTP sunucu üzerinde projeyi "Linux" ismiyle açtı ve sonradan Torvalds da buna razı oldu.
Linux telaffuzu için bakınız: https://www.youtube.com/watch?v=5IfHm6R5le0
Lisans Modeli
İlk versiyonlarda Linux, Torvalds'ın her tür ticari çalışmayı engelleyen özel bir lisans ile dağıtılıyordu.
1992 yılında Linux'un lisans modeli Torvalds tarafından GPL olarak değiştirildi ve Aralık 1992'de 0.99 versiyonu GPL lisansıyla dağıtılmaya başlandı.
Sonraki yıllarda Torvalds, "Linux'un lisansını GPL'e çevirmek hayatım boyunca verdiğim en iyi karardı" diyecektir.
GPL lisansına geçiş ve internetin de yaygınlaşmasıyla birlikte Linux projesi çok hızlı bir gelişme ivmesi yakalamış oldu.
GNU/Linux
Linux sadece işletim sisteminin çekirdeğini oluşturur. İşe yarar bir işletim sistemi için pek çok uygulamaya ihtiyaç bulunuyordu ve bu uygulamalar GNU projesinden sağlanıyordu. Linux çekirdeği ve GNU yazılımları topluluğundan oluşan işletim sistemi ise GNU/Linux olarak adlandırılır.
Richard Stallman 1996 yılında GNU ve Linux kelimelerinden yola çıkarak bu işletim sistemi için Lignux ismini önermiş ve bunu emacs editöründe sistem ismi olarak kullanmış olsa da kabul görmedi ve GNU/Linux şeklindeki kullanım devam etti.
Günümüzde Linux dağıtımlarının da GNU/Linux şeklinde isimlendirilmesi gereklidir. Debian dağıtımı bu isimlendirmeye özen gösterir ve Debian GNU/Linux ismini kullanır. Ancak çoğu zaman sadece Linux isminin kullanıldığı ve bazen işletim sisteminin bazen de çekirdeğin kastedildiği görülmektedir.