Unix 1970'lerde Bell Labs'de geliştirilirken zamanı için devrimsel farklılıklar yaratmıştı, ancak bu sırada asıl yayılıp popüler olacağı 80 ve 90'lı yılların teknolojisinden habersizdi. Unix'in büyük bölümü 16 bitlik bilgisayarlar olan PDP-11'ler üzerinde geliştirilmiş ve zaman-paylaşımlı, yani bir ana bilgisayara birçok kullanıcının terminaller (VT100 gibi) aracılığıyla bağlanıp işlerini gerçekleştirdiği bir sistem olarak tasarlanmıştı. Bunun da ötesinde, TCP adı verilen ve bugün internetin temelini oluşturan protokolün ilk versiyonunun 1974'te, Unix'in ilk versiyonunun ise 1973'te yayınlandığı düşünülürse Unix'in ne kadar fazla sayıda teknolojiden haberinin olmadığı görülecektir- 1981 yılındaki BSD4.1c'ye kadar Unix sistemlerinde TCP/IP yığını (stack) yoktu.
1975'te piyasaya sürülen VT52.
Sonuç olarak Unix benzeri sistemler teknoloji geliştikçe yeniden şekillenmek yerine 70'lerin sistemine eklemeler yaparak ilerledi. Ne var ki, bu eklemelerin çoğu Unix'in basitlik felsefesinin dışında kalıyor ve sadece o zamanın ihtiyacını o zamanki popüler kelimelerin gerektirdiği şekilde karşılıyordu. NFS, X11, sendmail, BSD soketleri, dosya sistemi kısayolları (softlink) bu şekilde Unix sistemine tam entegre olamamış ve yönetimi zor yenilikler olarak görülebilir.
"cat Berkeley'den bayrak sallayarak geldi" 1
— Rob Pike, Berkeley Unix'te cat programına -n, -E gibi ayarlar eklenmesi hakkında
Bir örnek olarak X11'i ele alalım. Terminallerin çağı bitip CRT monitörlü kişisel bilgisayarlar çıktığında Unixvari sistemler -her şirketin kendi Unix varyantı vardı, Xenix, Aix, Solaris gibi- bu "grafik terminaller" hakkında hiçbir şey bilmiyordu. Sistemin bu konuda getirdiği bir yaklaşım, arayüz ya da standart olmadığından, X.org kendi standardını yarattı ve bu işlevselliği sağladı- gereksizce karmaşık bir sunucu-istemci mimarisi ve dev bir kullanıcı-alanı programıyla. "Grafik pencereleri göstermek için neden sunucu-istemci mimarisi?" diye sorabilirsiniz. Cevabı basit- çünkü o zamanlar popüler sözcük "client-server" mimarisiydi ve birçok kişi gelecekte Cray süperbilgisayarlarında çalışacak programların avuçiçi bilgisayarlarda grafik arayüzlere sahip olacağını düşünüyordu.
"X sunucusu gördüğüm işe yaramaz programların en büyüğü olmalı." 2
— Ken Thompson, Unix geliştiricisi
Bunun gibi sorunları çözmek için 1980'lerin ortasında Bell Labs'de yeni bir işletim sistemi geliştirilmeye başlandı. 1959 yapımı Hollywood filmi Plan 9 from Outer Space'e gönderme olarak Plan 9 from Bell Labs adı verilen sistem Unix gibi birkaç basit ana ilke etrafında şekilleniyordu:
- Tüm kaynaklar bir hiyerarşik dosya sistemindeki dosyalar şeklinde soyutlanır.
Evet, Unix'te birçok şey dosyaydı, ama her şey değildi. Örneğin aygıtlarla (device) doğrudan konuşmak için aygıt sürücüsünü hedefleyen bir ioctl() fonksiyonu çağırıp "şunu söyle yap" demeniz gerekiyordu. Plan 9'da, aygıt sürücüleri arayüzlerini dosya sistemi olarak göstermek zorundadır.
- Bu kaynaklara erişim standart bir protokol olan 9P aracılığıyla sağlanır.
Bir Plan 9 sistemi her şey için ayrı bir protokol icat etmek yerine tek bir protokolü her türlü amaç için kullanır... her türlü.
İşlem | Linux protokolü | Plan 9 protokolü |
---|---|---|
Dağıtık dosya sistemine erişim | NFS, CIFS-SMB, AFS | 9P |
Pencere sistemine erişim | X11, Wayland | 9P |
Uzak sistemde oturum açmak | telnet, SSH, mosh | 9P |
- Sağlanan dosya sistemi arayüzleri, işleme özel bir ad-uzayında (namespace) birleştirilir.
Özel ad-uzayı kavramı Plan 9'ı Plan 9 yapan özelliklerden biridir. Bir örnek olarak mount komutunu düşünelim. Linux ve diğer Unix benzeri sistemlerde mount, dosya sistemi hiyerarşisini tüm kullanıcılar için değiştirdiği için nadir kullanılan ve yönetici izni gerektiren bir komuttur. Plan 9 için ise mount ve kardeşi bind, çok basit ve her gün kullanılan komutlardır, çünkü dosya sistemi hiyerarşisini sadece onları çağıran işlem için değiştirirler.
Linux'ta (ve X11 kullanan diğer Unixvari sistemlerde) bir program fare hareketlerini izlemek istiyorsa X11'e kendini tanıttıktan sonra belirli aralıklarla "X11, beni ilgilendiren yeni bir fare hareketi oldu mu?" diye sormalıdır. Plan 9'da ise tek yapması gereken /dev/mouse adlı dosyayı okumaktır. Her işlem dosya sistemini farklı şekilde gördüğü için /dev/mouse her işlem için kendi penceresindeki fare hareketlerini içerir, ana /dev/mouse dosyasını çoklayıp işlemlere dağıtmak ise rio (eskiden 8½) adlı pencere yöneticisinin işidir.
Plan 9 ilkelerinin kararlı biçimde uygulanması, Unix'in karşılaştığı sorunlara yeni çözümler getirmiştir. Birkaç örnek:
Uzaktaki makinenin ağına bağlanmak : Linux'ta bunun için NAT kullanmanız gerekir- yani uzaktaki bilgisayar kendi üzerinden internete girecekler için bir sanal ağ oluşturmalı ve sanal ağdan geçen paketleri aktif olarak yönlendirmelidir. Plan 9'da, örneğin, uzaktaki makine helix ise import helix /net komutunu çalıştırmalısınız, böylece /net dizininde helix'in ağ aygıtları görünecektir. "O zaman herkes Helix'e ve ağlarına bağlanabilir" diye düşünmeyin- Plan 9 arka planda her işlem için 9P authentication işlemlerini yürüten Factotum adlı bir programa sahip. Factotum Helix'in şifresini anahtar dosyanızda arayacak, bulamazsa size soracaktır.
Grafik yönlendirme : Bu işlemi Linux'ta X11 kullanarak SSH üzerinden yapmak için ssh -X şeklinde girmeli ve karşı SSH sunucusunun X yönlendirmeden haberdar olmasını beklemelisiniz. Basit bir işlem gibi görünse de, SSH uzaktaki X sunucusuyla anlaşmak için uzun bir diplomatik süreç yürütür. Plan 9'da ise cpu komutu /dev/mouse, /dev/bitblt ve /dev/cons dosyalarını uzaktaki makineyle -CPU sunucusuyla- paylaşır, böylece orada çalıştırılan işlemler yerel makinenin grafik imkanlarını kullanabilirler.
TCP bağlantısı açmak : Bugün tüm sistemler bunun için BSD soketleri kullanır- dosyalara yeterince benzeyen, yazıp okuyarak üzerinden bilgi aktarılabilen bağlantı uçları. Linux'ta bir TCP soketi istemek için socket() fonksiyonunu çağırmalısınız. Daha sonra bir _sockaddr_in_ veri yapısına istediğiniz bağlantı türünü tanımladıktan sonra connect() ile soketi bir adrese bağlamalısınız. Çekirdek "oldu" derse send()/recv() ile soket üzerinden veri alıp gönderebilirsiniz. Plan 9'da ise yeni bir TCP bağlantısı oluşturmak socket.h ya da arpa/inet.h gibi header'lar gerektirmez. /net/tcp/clone dosyasına connect <host>!</host> yazıp aynı dosyayı okuyun. "5" aldınız diyelim, /net/tcp/5/data dosyasına yazıp okuyarak bağlantının öteki ucuyla konuşabilirsiniz.
Bunların ötesinde Plan 9, Unix'in geleneksel geliştirme döngüsüne birtakım yenilikler getirdi:
C dialect'i. Plan 9 C versiyonu ANSI C'den belirgin farklılıklar gösterir.
mk. Plan 9 mk programı bildiğimiz Unix make'ine (bugün GNU make) birçok yenilik getirmiştir.
Farklı işlemci mimarileri için derleme (cross-compilation).
Unix benzeri sistemler ve Linux'ta bu kolay bir iş değildir, gcc ve binutils'i her yeni hedef mimari (ARM, MIPS, SPARC...) için tekrar derlemeniz gerekir. Plan 9'da çapraz derleyiciler (cross-compiler) ana dağıtımın bir parçasıdır, yani her Plan 9 sisteminde desteklenen tüm mimariler için birer derleyici vardır. Programınızı ARM işlemcileri için derlemeniz gerekirse tek yapmanız gereken objtype=arm mk yazmaktır.
- Yeni yazı editörleri sam, acme. Plan 9'da Emacs ya da Vi(m) yoktur, hatta Emacs'in man sayfası bilerek boş bırakılmıştır.
Her ne kadar unutulmuş görünse de Plan 9'un bugünkü sistemlerde belirgin izleri vardır. Ana işlemin tüm hafızasını kopyalamadan yeni bir işlem oluşturan Plan 9 rfork()'u, bugün kendine Linux'ta clone(), FreeBSD'de rfork() olarak yer bulmuştur. Bir Plan 9 standardı olan UTF-8 bugün web sayfalarının %85'ten fazlasında karakter kodlaması (encoding) olarak kullanılmaktadır, aynı şekilde Linux ve diğer Unix benzeri sistemlerde artık standartlaşmış /proc dosya sistemi Plan 9'ın getirdiği bir yeniliktir.
"Unix işletim sistemi araştırmalarını 10 yıl aksattı. Linux bunu 20 yıla çıkardı." 3
— Boyd Roberts
1990'ların diğer yenilikçi araştırma sistemlerinin (Spring, Sprite, Amoeba...) aksine, Plan 9 bugün tamamen ölü değil. 2002'de dördüncü sürümünün kaynağı özgür bir lisans altında açıldıktan sonra 9front, Harvey OS, Akaros gibi birkaç proje Plan 9 geliştirmesini devam ettiriyor. Her ne kadar bu projeler düzenli olarak katkı görse de kullanıcı kitleleri çok küçük- ana Plan 9 dağıtımıyla birlikte 1000 kişiyi geçmiyor.
Sağladığı kullanıcı deneyimi alışılmadık olsa da Plan 9 uzun yıllar boyunca hayatta kalan ve Windows NT ya da Unix tabanlı olmayan nadir işletim sistemlerinden biri. Onlardan çok fazla yok, o yüzden yeşili sevelim, araştırma sistemlerini koruyalım.
Glenda, Plan 9 maskotu.
1 "cat came back from Berkeley waving flags"
2 "The X server has to be the biggest program I’ve ever seen that doesn’t do anything for you."
3 "Unix has retarded OS research by 10 years and linux has retarded it by 20."