Standartlar
Önceki bölümde Unix ve C'den başlayarak Linux'un gelişimine kadarki genel tarihçe üzerinden özet olarak geçmeye çalıştık. Kitaplarda yer alan tarihçe bölümleri çoğunlukla atlanır. Siz de öyle yaptı iseniz bu noktada önceki bölüme geri dönüp, olabildiğince özetlemeye çalıştığımız tarihçeye göz atmanızı öneriririz.
1980'li yıllarda BSD veya SystemV tabanlı Unix versiyonlarının sayısı hızla artmaktaydı. Çoğu ticari Unix versiyonu da bazı özellikleri BSD'den bazılarını SystemV'den alıp üstüne bir de kendileri kimi yeni özellikler eklemekteydi. GNU projesi, Minix ve Linux da bu açıdan değerlendirildiğinde, 90'lı yıllara gelindiğinde ortada epey karmaşık bir durum olduğu rahatlıkla söylenebilir.
Bir uygulamayı çalıştığı Unix sisteminden diğerine aktarmakta zorluklarla karşılaşıldığı gibi, bir Unix sistemine aşinalık kazanmış bir kullanıcının da diğer bir sisteme alışması zor oluyordu.
Bu durumların üstesinden gelebilmek adına C dili ve Unix sistemleri arasında bir standardizasyonuna gitmek gerekliydi ve öyle de oldu.
C ve C++
1970'li ve 80'li yıllarda Unix'in gelişimine paralel olarak C dilinin de kullanımı hızla yaygınlaşmaktaydı. Farklı sistemlerdeki implementasyonları arasında özellikle bu konuda ana kaynak teşkil eden Kernighan ve Ritchie'nin 1978 yılında yayınlamış oldukları The C Programming Language kitabında detaylı bir şekilde değinilmemiş olan kısımlar, farklılıklar gösterebiliyordu.
1979'da AT&T Bell Laboratuarları'nda çalışan Danimarka'lı bilgisayar bilimcisi Bjarne Stroustrup, "C with Classess" ismini verdiği çalışmalarına başlamıştı. Stroustrup özellikle Unix platformlarında dağıtık programlama ile ilgilenmiş ve büyük projelerde Simula dilinin avantajlarını iyi değerlenmişti. Bunun sonucunda C diline Simula benzeri özelliklerin eklenmesi için çalışmalara başladı. 1983 yılında dilin ismi C'deki 1 artırma operatörünün eklenmesiyle, C++ haline geldi. 1985 yılında The C++ Programming Language kitabı yayınlandığında henüz ortada herhangi bir standart yoktu.
C++ dilinin gelişim sürecinin C diline de katkıları oldu ve fonksiyon prototipleri, void kelimesi, struct atamaları, enum tipi vb. yeni özellikleri içeren ANSI C standardı 1989 yılında yayınlandı. Böylelikle C dili için sözdizimi ve kullanımıyla birlikte, içerdiği başlık dosyaları ve fonksiyonları da bir standarda bağlanmış oldu. ANSI C, bazen Standard C veya C89 biçiminde de adlandırılmaktadır.
ANSI C standardının ardından 10 yıl sonra 1999'da C99 standardı yayınlanmıştır. C99 ile birlikte inline fonksiyonlar, long long int gibi yeni veri tipleri, değişken uzunlukta dizi tanımlama imkanı, belirsiz sayıda parametre alabilen makro desteği, daha iyi IEEE 754 kayar nokta desteği, // tek satırlık yorum desteği gibi özellikler eklenmiştir.
2011 yılında C11 standardı yayınlanmıştır. Bu versiyonda eklenen bir çok özellik arasında başlıcaları multi-threading desteği, unicode iyileştirmeleri, gets() fonksiyon ailesinin dilden çıkartılması, _Atomic tip niteleyeciler, anonim struct ve union tanımları sayılabilir. Bununla birlikte henüz derleyiciler tarafından tüm özellikleri tam olarak gerçeklenmemiştir.
Son olarak 2018 yılında C18 standardı yayınlanmıştır. Bu versiyonda önemli bir değişiklik bulunmamakta, sadece C11'e yönelik bazı düzeltmelere yer verilmektedir.
POSIX
Portable Operating System Interface (POSIX) standartları, IEEE'nin gözetiminde uygulamaların kaynak kod seviyesinde platformlar arası taşınabilirliğini sağlamak için geliştirilmiştir.
POSIX ismi Richard Stallman tarafından önerilmiş olup, sonundaki X de Unix like sistemler için genel olarak yapılan ekleme alışkanlığından kaynaklanır.
POSIX.1 standardı 1988 yılında duyuruldu. POSIX.1 standardı UNIX sistem çağrıları ve C kütüphanesi arayüzünü tanımlamaktadır. Bu arayüzü gerçekleyen işletim sistemleri POSIX.1 Uyumlu olarak nitelendirilirler ve UNIX dışındaki bir işletim sistemi için de arayüzü sağladığı müddetçe POSIX uyumluluğundan bahsetmemiz mümkündür.
POSIX.1 standardı, POSIX.1b, POSIX.1c ... ve son olarak realtime işlemlere yönelik destekle birlikte 2000 yılında POSIX.1j olarak genişletilmiştir.
POSIX.2 standardı ise, kabuk uygulamasının özellikleri, çeşitli sistem araçları ve C derleyicisinin kullanımı ve parametrelerini standardize etmeye çalışmakta olup, 1992 yılında duyurulmuştur.
SUS & X/Open & The Open Group
1984 yılında başta Bull, ICL, Siemens, Olivetti, Nixdorf, Philips ve Ericsson olmak üzere, çeşitli Avrupa firmaları biraraya gelerek X/Open Company Ltd. konsorsiyomunu kurdular. Bu yapının amacı UNIX tabanlı işletim sistemlerinde uygulamaların taşınabilirliğinin sağlanması için gereken standartları oluşturmaktı. Oluşturulan standartlar X/Open Portability Guide (XPG) adıyla yayınlandı. 1992 yılına gelindiğinde Avrupa kıtasının dışından da katılımlarla konsorsiyomdaki firma sayısı 21'e ulaşmıştı.
1993 yılında Unix iş departmanı Novell tarafından AT&T'den satın alındı. Hemen ardından Novell, Unix tarafından geri çekilmeye karar verdi ve Unix ticari markasının haklarını X/Open konsorsiyomuna devretti. Bu noktada mevcut XPG4 standartları Single UNIX Specification (SUSv1) ismiyle birleştirildi ve yayınlandı. Ardından 1997'de SUSv2 ve 1999'da SUSv3 standardı yayınlandı. SUSv3, POSIX standardına göre daha detaylı bir belgedir (3700 sayfa, 1742 interface) ve syslog arayüzü, memory-mapped io, SysV IPC, login accounting, pseudoterminals vb. pek çok başlığı adreslemektedir.
Son olarak 2008 yılında SUSv4 yayınlanmış olup, bazı arayüzler çıkartılmış, bazı yeni eklemeler de yapılarak son hali verilmiştir. Standardın güncel haline http://www.unix.org/online.html adresinden erişebilirsiniz.
1996 yılında X/Open oluşumu Open Software Foundation (OSF) çatısı altında The Open Group olarak birleşti. Günümüzde UNIX sistemleri üzerinde çalışan kurum ve organizasyonlar The Open Group'a üyedirler.
Linux Standard Base
Linux'un gelişim sürecine baktığımızda POSIX ve Single Unix Specification'larına çok önem verildiği ve geliştirmelerin bu yönde yapıldığı görülür. Ancak buna rağmen henüz herhangi bir Linux dağıtımı, The Open Group tarafından bir UNIX sistemi olarak görülmemektedir. Geleneksel UNIX üretici firmalarından farklı olarak Linux'un gelişim modeli farklılığı ve her versiyonda UNIX olarak markalama yapabilmek için gereken test süreçleri ve bu sürecin maliyetleri nedeniyle, Linux dağıtımlarının UNIX olarak görülmeye fazla önem vermediğini söyleyebiliriz.
Linux dağıtımları temelde resmi bir Linux kernel versiyonunu baz alır; üzerine yapılan bazı yamalar veya kernel içerisine dahil edilmiş öntanımlı seçenekler açısından ise birbirinden farklılıklar gösterebilir. Dağıtımların kernel üzerinde bu şekilde yaptıkları iyileştirme çabaları, genellikle dağıtımın stratejik hedefleriyle ilgili olur. Örneğin temel hedefi sunucu sistemleri olan bir Linux dağıtımı, maksimum sayıda Host Bus Adapter kartı için sürücüyü sisteme dahil edebilir, hatta ana Linux kaynak kodu içerisine henüz girememiş bazı sürücüleri de dağıtım içerisinde gelen kernel ile uyumlu hale getirebilir.
Dağıtımların temel stratejileri doğrultusunda yaptığı değişiklikler sadece kernel seviyesiyle de sınırlı değildir. Bazı dağıtımlar grafik arayüzde ve çok kolay kurulumu hedeflerken bazıları en fazla sayıda mimaride çalışmayı, bazıları sadece sunucu sistemleri hedeflerken bazıları da güvenlik önlemleri artırılmış sistemlerde kullanılmayı vb. hedefleyebilir. Tüm bu kararlar Linux dağıtımlarının kolaylıkla birbirinden farklılaşması olasılığını doğurur ve bu noktada bir standardizasyon ihtiyacı ortaya çıkar. İşte Linux Standard Base oluşumu bu süreci adresler. Günümüzde son LSB versiyonu 5.0 olup, Haziran 2015'de yayınlanmıştır. POSIX ve SUS standartlarından farklı olarak, sadece kaynak kod seviyesinde taşınabilirliği değil, çalıştırılabilir dosyaların da dağıtımlar arasında taşınabilirliğine dair tanımları içerir.
Güncel duruma https://wiki.linuxfoundation.org/en/LSB adresinden erişilebilir.