Ana içeriğe geç

UNIX'e Kısa Bir Bakış

UNIX'in Tarihçesi

UNIX'in tarihçesi ile ilgili daha detaylı ve doğru bilgiler almak için bu sayfayı ziyaret edebilirsiniz.

1960'larda; Massachusetts Teknoloji Enstitüsü (MIT), Bell Labs ve General Electric, GE 645 mainframe'i için bir "time-sharing" işletim sistemi olan Multics'i (Multiplexed Information and Computer Services) geliştiriyorlardı. Multics, birçok yenilik içeriyordu ancak aynı zamanda ciddi problemler de barındırıyordu. Multics'in boyutundan ve karmaşıklığından hayal kırıklığına uğrayan, ancak hedeflerinden vazgeçmeyen Bell Labs'taki bazı araştırmacılar projeden çekilmeye başladılar. Son olarak projeden ayrılanlar, Ken Thompson, Dennis Ritchie, Douglas McIlroy ve Joe Ossanna oldu ve bu grup, deneyimlerini daha küçük ölçekli yeni bir projeye aktarmaya karar verdiler.

1969 yılında, Thompson GECOS işletim sistemi altında, GE 635 makinesinde Space Travel adlı bir video oyunu yazmıştı. Bu oyunun problemi ise, 75 USD (2024'te 640+ USD) değerinde CPU çalışma süresi gerektirmesiydi.Thompson, farklı bir departmanda, çok da kullanılmayan küçük bir PDP-7 olduğunu öğrenince, oyununu bu makineye uyarlamaya başladı.

Bu süreç oldukça zahmetli hâle geldi ve Thompson, yeni makineye kendi işletim sistemini yazmayı düşünmeye başladı. Dennis Ritchie ve Rudd Canaday'in yardımlarıyla, 645 üzerinde incelediği hiyerarşik dosya sisteminin bir versiyonunu uyguladılar. Bu dosya sisteminde depolanan programları başlatma yeteneği kısa süre sonra eklendi. Ardından dosyaları kopyalamak, silmek, yazdırmak ve düzenlemek için küçük programlar ve kullanıcının bu işlemleri etkileşimli olarak yapabilmesi için bir komut satırı yorumlayıcısı geliştirildi. Bunlar tamamlandığında, makine için yeni bir assembler yazıldı ve Space Travel tamamen yeni platforma taşındı.

Bu dönemde eklenen önemli bir kavram, Ritchie tarafından getirilen "device file" kavramıydı. Bu, girdi/çıktı işlemleri yapma yeteneğine sahip olan özel bir dosya tipiydi. Bu özellik, farklı cihazların yalnızca dosya sisteminde uygun bir konumda dosya yerleştirilerek desteklenmesini sağladı. Bu pseudo dosyalara yapılan okuma ve yazma işlemleri, cihaz üzerinde işlemler yapıyordu. Bu, cihazların dosya sistemi aracılığıyla soyutlanması anlamına geliyordu ve programlar, hangi tür cihazda olursa olsun, dosyalarla işlem yapabiliyordu.

Her Şey Bir Dosyadır

Linux dünyasında da sıklıkla duyacağınız "her şey bir dosyadır" konusu, buralara dayanıyor.

Yeni işletim sistemi, tek görevli (single-task) bir sistemdi. 1970 yılında grup, Unics (Uniplexed Information and Computing Service) ismini - Multics'e gönderme yaparak - önerdi. Brian Kernighan bu ismi önerdiğini iddia etmekte, ancak ismin son hâlinin (Unix) yazılış şeklinin ortaya çıkışını kimsenin hatırlamadığını da eklemektedir. Dennis Ritchie, Doug McIlroy, ve Peter Neumann da bu konuda krediyi Kernighan'a vermektedir.

Daha sonra, Douglas McIlroy, TMG compiler-compiler'ı PDP-7 assembly diline port etti ve Unix üzerinde çalışan ilk yüksek seviyeli dili yarattı. Thompson, bu aracı, ilk B programlama dili sürümünü geliştirmek için kullandı.

Programlama Dilleri

Burada bahsi geçen "B" programlama dili, Ken Thompson ve Dennis Ritchie tarafından geliştirilmiştir (1969). Ve evet, bugün hâlâ duyduğumuz ve kullandığımız "C" dili de, bu serüvenin bir parçasıdır ve Dennis Ritchie tarafından tasarlanmıştır (1972). Ken Thompson ayrıca, günümüzde sıklıkla karşılaştığımız "Go" dilinin de tasarımcılarındandır (2007).

Ken Thompson ve Dennis Ritchie - 1973

İşletim sistemi başlangıçta assembly diliyle yazılmıştı, ancak 1973'te, Unix'in 4. sürümü C dilinde yeniden yazıldı. Ken Thompson, C dilinin o dönemki bazı eksikliklerinden dolayı, kernel'ı port ederken zorluklarla karşılaştı. 4. sürüm Unix, hâlâ PDP-11'e özgü birçok koda sahipti ve bu durum, cihazlar arasında taşınabilirlik için uygun değildi.

Bell Labs, Unix'in bir dizi sürümünü üretti ve bunlar kolektif olarak Research Unix olarak adlandırıldı. 1975'te, UNIX'in ilk kaynak kodu lisansı, Illinois Üniversitesi Urbana-Champaign (UIUC) Bilgisayar Bilimleri Bölümü'nden Donald B. Gillies'e satıldı.

1970'lerin sonları ve 1980'lerin başlarında, Unix'in akademik çevrelerdeki etkisi, Unix'in ticari girişimler tarafından benimsenmesine (BSD ve System V gibi) öncülük etti. Bu da Unix'in; DYNIX, HP-UX, SunOS/Solaris, AIX ve Xenix gibi birbirine benzer ancak birbirleriyle uyumsuz olan birçok farklı sisteme ayrılmasına sebep oldu.

1990'larda, Unix ve Unix-benzeri (Unix-like) sistemler popülerlik kazandı ve dünyanın en hızlı 500 süper bilgisayarının %90'ından fazlasında tercih edilen işletim sistemi hâline geldi. Çünkü BSD ve Linux dağıtımları, dünya çapında bir programcı ağı tarafından işbirliğiyle geliştirildi.

2000 yılında Apple, Darwin adlı Unix işletim sistemini piyasaya sürdü ve bu sistem, Mac OS X işletim sisteminin temelini oluşturdu. Bu işletim sistemi daha sonra "macOS" olarak yeniden adlandırıldı.

UNIX mi, Unix mi?

UNIX ismi, genelde tescillenmiş (trademarked) Unix işletim sistemi için kullanılır. Unix ifadesi ise, genel olarak Unix ve Unix-benzeri işletim sistemlerini ifade etmek için kullanılır.

The Evolution of the Unix Time-sharing System

Unix işletim sisteminin geliştirilme süreci ile ilgili, Dennis Ritchie'nin şu makalesini okuyabilirsiniz.

Özetle; vaadlerini gerçekleştiremeyeceği düşünülen bir projenin (Multics) devamında, çalıştırma maliyeti düşük bilgisayarlarda oyun oynayabilmek için başlayan bir maceradır Unix. Ancak tabii ki, konu bu kadar basit değil. Bugün bildiğimiz ve kullandığımız işletim sistemi tasarımları, hatta kullandığımız programlama dilleri bile, bu yolculuk sırasında geliştirilmiştir.

Ancak telif hakları, tescilli bir marka olması, şirketlerin tekelinde kalması, insanları yeni arayışlara sürüklemiştir.

Unix Felsefesi

Unix felsefesi, Ken Thompson tarafından ortaya atılmış, minimalist ve modüler yazılım geliştirmeye yönelik kültürel normlar ve felsefi yaklaşımlar bütünüdür. Bu felsefe, Unix işletim sisteminin önde gelen geliştiricilerinin deneyimlerine dayanmaktadır. Erken dönem Unix geliştiricileri, yazılım mühendisliğine modülerlik ve yeniden kullanılabilirlik kavramlarını kazandırmada önemli bir rol oynamış, bu da bir "yazılım araçları" hareketinin doğmasına neden olmuştur. Zamanla, Unix'in önde gelen geliştiricileri (ve üzerinde çalışan programlar) yazılım geliştirme için bir dizi kültürel norm oluşturmuşlardır. Bu normlar, Unix'in teknolojisi kadar önemli ve etkili hale gelmiş ve "Unix felsefesi" olarak adlandırılmıştır.

Unix felsefesi, basit, kompakt, açık, modüler ve genişletilebilir kod yazmayı, bunun da geliştiriciler tarafından kolayca bakımının yapılmasını ve yeniden kullanılmasını hedefler. Unix felsefesi, monolitik tasarım yerine bileşenlerin bir araya getirilmesini tercih eder.

Unix felsefesi, Doug McIlroy tarafından 1978'deki Bell System Technical Journal'da belgelenmiştir:

  1. Her programın bir işi iyi yapmasını sağlayın. Yeni bir iş yapmak için eski programları yeni "özellikler" ekleyerek karmaşıklaştırmak yerine, sıfırdan yeni bir program yazın.
  2. Her programın çıktısının, henüz bilinmeyen başka bir programa giriş olmasını bekleyin. Çıktıyı gereksiz bilgilerle karıştırmayın. Sıkı sütunlu veya ikili (binary) giriş formatlarından kaçının. Etkileşimli girdi üzerinde ısrarcı olmayın.
  3. Yazılımı, hatta işletim sistemlerini, erken - ideal olarak birkaç hafta içinde - test edilebilecek şekilde tasarlayın ve inşa edin. Hantal kısımları atmakta ve yeniden inşa etmekte tereddüt etmeyin.
  4. Araçları inşa etmek için dolaylı bir yol izlemeniz gerekse ve bunları kullandıktan sonra bir kısmını atmanız beklense de, yazılım geliştirme görevini hafifletmek için vasıfsız yardım yerine araçları tercih edin.

Bu felsefe daha sonra Peter H. Salus tarafından, A Quarter-Century of Unix'te (1994) şu şekilde özetlenmiştir:

  1. Bir iş yapan ve onu iyi yapan programlar yazın.
  2. Programları birbirleriyle uyumlu çalışacak şekilde yazın.
  3. Programları metin akışlarını (text streams) işlemek üzere yazın, çünkü bu evrensel bir arayüzdür.

Ritchie ve Thompson'ın 1974 tarihli Unix makalesinde belirttikleri tasarım düşünceleri ise şunlardır:

  1. Programları yazmayı, test etmeyi ve çalıştırmayı kolay hale getirin.
  2. Toplu işleme yerine etkileşimli kullanım.
  3. Boyut sınırlamaları nedeniyle ekonomi ve tasarımda zarafet ("ızdırapla kurtuluş").
  4. Kendini destekleyen sistem: tüm Unix yazılımları Unix altında sürdürülür.