- Konu sahibi
- #1
Linux hangi programlama diliyle yazılmıştır?
Linux çekirdeği ağırlıklı olarak C programlama diliyle yazılmıştır. Donanıma çok yakın ve işlemciye özgü bölümlerde assembly kullanılır; çekirdekte belirli yeni bileşenler için Rust da kullanılabilir. Bu nedenle çekirdeği tek bir dille yazılmış bütün olarak tanımlamak eksiktir; C ana dildir.
Önce Linux ile GNU/Linux ayrımını yapın
Günlük kullanımda “Linux” denildiğinde çoğu zaman Ubuntu, Fedora, Debian veya Arch Linux gibi bir dağıtım kastedilir. Dağıtım ise tek bir program değildir; Linux çekirdeğini, sistem araçlarını, kütüphaneleri, servisleri, masaüstü ortamını ve uygulamaları bir araya getirir.
Linux çekirdeği ile dağıtımın diğer parçaları aynı dille yazılmak zorunda değildir. Örneğin bir sistem aracı C, masaüstü uygulaması C++ veya Rust, betik ise Python ya da Shell ile yazılmış olabilir. Dolayısıyla sorunun en doğru kısa yanıtı şudur: Linux çekirdeğinin ana dili C'dir; assembly ve bazı bileşenlerde başka diller de kullanılır.
C neden kullanılır?
Çekirdek; bellek, işlemci, dosya sistemleri, ağ aygıtları ve sürücüler gibi donanıma yakın görevleri yürütür. C, bu alanlarda bellek ve veri yapıları üzerinde düşük seviyeli denetim sağlar; aynı zamanda farklı işlemci mimarileri için yeniden derlenebilir. Çekirdeğin bu özelliklere ihtiyaç duyması, yüksek seviyeli bir uygulama dilinden farklı tercihler yapılmasına neden olur.
Assembly ise doğrudan belirli işlemci komutlarıyla çalışılması gereken başlangıç, bağlam değiştirme veya mimariye özel bölümlerde kullanılır. Bu kod taşınabilir değildir; aynı bölüm her işlemci ailesi için farklı olabilir. Rust, bellek güvenliği bakımından bazı avantajlar sağlayabilir ancak Linux çekirdeğinin tamamı Rust ile yazılmış değildir.
Dil seçimini somut bir örnekle düşünün
Bir dağıtımda terminalden çalışan küçük bir yedekleme aracı yazdığınızı varsayalım. Dosyaları okuyup kopyalayan bu araç için Python, Shell veya Rust uygun olabilir. Ancak işletim sisteminin dosya sistemi sürücüsünü ya da ağ kartı sürücüsünü yazıyorsanız, Linux çekirdeğinin kurallarına ve çekirdek geliştirme ortamına uymanız gerekir. Buradaki araç/sürücü senaryosu bir geliştirme örneğidir, denenmiş bir sürücü projesi veya performans kıyası değildir. Aynı “Linux üzerinde çalışıyor” ifadesi, bu iki yazılım türünün aynı dille yazıldığı anlamına gelmez.
| Bileşen | Yaygın dil veya diller | Temel görev |
|---|---|---|
| Linux çekirdeği | C, assembly, bazı Rust bileşenleri | Donanım ve sistem kaynaklarını yönetmek |
| Komut satırı araçları | C, Rust, Python, Shell ve diğerleri | Kullanıcı işlemlerini ve sistem yönetimini sağlamak |
| Masaüstü uygulamaları | C++, Rust, Python ve diğerleri | Kullanıcı arayüzü ve uygulama işlevleri |
| Dağıtım betikleri | Shell, Python ve benzeri diller | Kurulum, yapılandırma ve otomasyon |
Bu tablo, Linux çekirdeği ile Linux dağıtımındaki tüm yazılımları birbirine karıştırmamanızı sağlar. Bir uygulamanın Python ile yazılmış olması, Linux çekirdeğinin Python ile yazıldığı anlamına gelmez.
Kaynak kodunda dili nasıl kontrol edebilirsiniz?
Linux çekirdeğinin kaynak ağacını inceliyorsanız temel kontrolü şu şekilde yapabilirsiniz:
- Kaynak ağacının kök dizinine geçin; örneğin
cd linuxkomutunu çalıştırın. - C kaynak dosyalarını görmek için
find . -type f -name '*.c' | headkomutunu çalıştırın. - Assembly dosyalarını görmek için
find . -type f \( -name '*.S' -o -name '*.s' \) | headkomutunu çalıştırın. - Rust kaynaklarının bulunup bulunmadığını görmek için
find . -type f -name '*.rs' | headkomutunu çalıştırın.
Bu komutlardaki head yalnız ilk birkaç eşleşmeyi gösterir; farklı dillerin oranını karşılaştırmaz. C'nin ana dil oluşu çekirdeğin kendi belgelerinde belirtilir; dosya uzantısı tek başına bir bileşenin nasıl derlendiğini veya çalıştığını kanıtlamaz. Komutlar hiçbir sonuç vermezse yanlış dizinde olabilirsiniz ya da ilgili kaynak ağacının eksik bir kopyasını kullanıyor olabilirsiniz. Bu yöntem yalnızca dosya türlerini gösterir; dil kullanımının miktarını veya kodun önemini ölçmez.
Sık yapılan hatalar
“Linux bir işletim sistemidir ve tek dille yazılmıştır” demek hatalı bir genellemedir. Linux çekirdeği, GNU araçları, masaüstü ve kullanıcı uygulamaları ayrı projelerdir. Ayrıca “C ile yazıldı” ifadesi, bütün kodun yalnızca C olduğu anlamına gelmez. Assembly, yapılandırma dosyaları, betikler ve farklı dillerle yazılmış yardımcı bileşenler de bulunabilir.