🔗 Ekosistem

Ekosistem: Linux, QA ekosistemindeki tek bir araç değildir — stack'indeki diğer her aracın üzerine inşa edildiği ortak kernel'dir.

Linux, QA ekosistemindeki tek bir araç değildir — stack'indeki diğer her aracın üzerine inşa edildiği ortak kernel'dir. Docker container'ları host'un Linux kernel'ini paylaşır. Kubernetes node'ları Linux çalıştırır. GitHub Actions `ubuntu-latest` runner'ları Linux VM'dir. Jenkins agent'ları AWS veya Azure'da açıkça yapılandırılmadıkça neredeyse her zaman Linux'tur. Ama şunu düşün: tüm bu araçlar Linux'u kendi CLI'larının arkasına saklıyorsa, altındaki işletim sistemini neden anlamak gereksin? Çünkü her soyutlama baskı altında sızar. Docker container "exec format error" dediğinde bu bir Linux binary mimari uyumsuzluğudur. Kubernetes pod "OOMKilled" ile çöktüğünde bu Linux OOM killer'ın process'ini sonlandırmasıdır. Jenkins pipeline "workspace'te permission denied" dediğinde bu bir Linux dosya izin sorunudur — ve Docker CLI, kubectl veya Jenkins UI bunu senin için çözmez, çünkü çözmek Linux'un altta gerçekte ne yaptığını anlamayı gerektirir. Java'daki benzetimle: bu, `ArrayList`'i nasıl kullanacağını bilmek ile 0. konuma eklemenin `O(n)` olduğunu anlamak arasındaki fark gibidir — performans kırılana kadar iç yapıyı görmezden gelebilirsin, ama o an bilmemek sana saatler kaybettirir.

Linux & Docker — Gerçek İlişki

Bir Docker container ayrı bir işletim sistemi değildir — host makinenin kernel'ini paylaşan, sadece dosya sistemi, ağ ve process görünümü açısından izole edilmiş kısıtlı bir Linux process'idir. Docker'ın Windows'ta WSL2/Hyper-V'ye ihtiyaç duymasının sebebi tam olarak budur: container'ları gerçekten çalıştırmak için gerçek bir Linux kernel'ine gereksinimi vardır.

🎬 Sızan Soyutlama: Her Aracın Altındaki Kernel

QA yığınındaki araçların hepsi aynı zeminde durur: Docker container'ları, Kubernetes node'ları, `ubuntu-latest` runner'ları, Jenkins agent'ları — altta HEP aynı Linux kernel.

Docker container ayrı bir işletim sistemi DEĞİLDİR: host'un kernel'ini paylaşan, sadece dosya sistemi/ağ/process görünümü izole edilmiş bir Linux process'idir. Windows'ta WSL2 şart olmasının sebebi tam olarak bu.

Araçlar Linux'u kendi CLI'larının arkasına saklar — docker, kubectl, Jenkins UI. Her şey yolundayken bu soyutlama kusursuz çalışır; altını bilmene gerek yokmuş gibi hissettirir.

Baskı altında soyutlama SIZAR — vaka 1: pod "OOMKilled" ile ölür. Bu bir Kubernetes hatası değildir; Linux OOM killer'ın, cgroup bellek limitini aşan process'ini öldürmesidir.

Vaka 2: Jenkins "permission denied on the workspace" der. Bu bir Jenkins ayarı değildir — düpedüz bir Linux dosya izni sorunudur; ne kubectl ne Jenkins UI bunu senin yerine çözer.

Linux bilgisi bir el feneridir: sızıntı anında hatanın HANGİ katmandan geldiğini görürsün — izin mi, bellek mi, disk mi, ağ mı. Feneri olmayan, saatlerce YANLIŞ katmanda debug eder.

Final — Java köprüsü: `ArrayList`'i içini bilmeden yıllarca kullanabilirsin, ta ki 0. index'e milyon ekleme yapan kod O(n) yüzünden çökene kadar. Linux da öyledir: soyutlamanın altını bilmemek, ödemeyi hata gününe ertelemektir — ve QA'de o gün her zaman gelir.

Adım Adım: Container Kernel'i Nasıl Paylaşır?

`docker run ubuntu` çalıştırılır — yeni bir işletim sistemi AÇILMAZ; host üzerinde sıradan bir Linux process'i başlar.

Container, host makinenin kernel'ini AYNEN kullanır — kendi kernel'i yoktur; bu yüzden saniyeler içinde başlar, bir VM gibi dakikalar sürmez.