Linux mı Windows Server mı: Doğru Sunucu Seçimi

Yıllarca her iki tarafta da çalışmış biri olarak şunu net söyleyeyim: “Linux mı Windows Server mı?” sorusu aslında yanlış sorulan bir sorudur. Doğru soru şu olmalı: “Bu iş yükü için hangi platform daha mantıklı?” İşte bu farkı kavradığınızda, tartışma ideolojik olmaktan çıkıp mühendislik kararına dönüşür.

Önce Sağlıklı Bir Çerçeve Kuralım

Birçok ekipte şunu görüyorum: Windows kökenli sysadminler her şeyi Windows’a yıkmak istiyor, Linux meraklıları ise tam tersi. İkisi de yanlış. Platform seçimi şu faktörlere göre yapılmalı:

  • İş yükünün doğası: Web servisi mi, veritabanı mı, aktif dizin mi, oyun sunucusu mu?
  • Ekip yetkinliği: Hangi platformda daha hızlı sorun çözüyorsunuz?
  • Lisans ve maliyet: Toplam sahip olma maliyeti (TCO) hesabı yapıldı mı?
  • Vendor desteği: Kullandığınız yazılımın hangi platformda resmi desteği var?
  • Bakım kapasitesi: Gece 2’de bir şey patlasa kim çözecek?

Bu soruları sormadan “Linux daha iyi” veya “Windows daha güvenilir” diye tartışmak, makas yerine tornavida kullanmak gibidir.

Linux’un Gerçekten Parlayan Alanlar

Web ve Uygulama Sunucuları

Nginx, Apache, HAProxy gibi araçların Linux üzerindeki performansı tartışmasız. Epoll tabanlı I/O modeli, yüksek eşzamanlı bağlantıları Windows’un IOCP implementasyonuna kıyasla genellikle daha düşük kaynak kullanımıyla yönetiyor. 10.000 eşzamanlı bağlantıyı idare eden bir Nginx kurulumunun memory footprint’i karşılaştırıldığında fark ortaya çıkıyor.

Basit bir Nginx durum kontrolü:

# Nginx worker process ve bağlantı durumunu görüntüle
ss -s
nginx -T | grep worker_processes
ps aux | grep nginx | grep -v grep | awk '{print $1, $2, $3, $4, $11}'

Konteyner ve Orkestrasyon Altyapısı

Kubernetes, Docker, containerd, cri-o… Bunların hepsi Linux çekirdeğinin namespace ve cgroup altyapısı üzerine inşa edilmiş. Windows Server üzerinde de konteyner çalıştırabilirsiniz ama bu, balığı karaya çıkarmak gibi bir şey. Ekosistem Linux için yazılmış, imajların büyük çoğunluğu Linux bazlı.

# Node kaynak kullanımını kontrol et
kubectl top nodes
kubectl describe node worker-01 | grep -A 5 "Allocated resources"

# Namespace bazlı pod dağılımı
kubectl get pods --all-namespaces -o wide | awk '{print $1}' | sort | uniq -c | sort -rn

Yüksek Performanslı Hesaplama ve Veritabanı

PostgreSQL, MySQL, MariaDB bu platformda nefes alıyor. Dosya sistemi seçenekleri (XFS, ext4, ZFS), I/O scheduler ayarları, NUMA topology optimizasyonu gibi konularda Linux size çok daha fazla kontrol sunuyor.

# Disk I/O scheduler görüntüleme ve değiştirme (NVMe disk için)
cat /sys/block/nvme0n1/queue/scheduler
echo "none" > /sys/block/nvme0n1/queue/scheduler

# PostgreSQL için dirty page ayarı
sysctl vm.dirty_ratio
sysctl vm.dirty_background_ratio
# Üretim için önerilen değerler:
sysctl -w vm.dirty_ratio=10
sysctl -w vm.dirty_background_ratio=3

DevOps Araç Zinciri

GitLab Runner, Jenkins agent, Ansible kontrol makinesi, Terraform çalıştırma ortamı… Bunların hepsi Linux’ta daha doğal çalışıyor. Shell scripting, cron, systemd ile otomasyon yazmak PowerShell ile yazmaktan çoğu durumda daha az eforla sonuç veriyor.

# Systemd ile uygulama servisi oluşturma örneği
cat > /etc/systemd/system/myapp.service << 'EOF'
[Unit]
Description=My Application Service
After=network.target postgresql.service
Requires=postgresql.service

[Service]
Type=simple
User=appuser
WorkingDirectory=/opt/myapp
ExecStart=/opt/myapp/bin/start.sh
Restart=on-failure
RestartSec=5s
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable --now myapp

Windows Server’ın Gerçekten Güçlü Olduğu Alanlar

Active Directory ve Kimlik Yönetimi

Burada dürüst olmak gerekiyor: Kurumsal ortamlarda AD DS, Group Policy, ADFS, Azure AD Connect gibi servislerin yönetimi için Windows Server hala rakipsiz. Samba ile AD domain kurabilirsiniz ama enterprise ortamda GPO yönetimi, fine-grained password policy, LAPS gibi özellikleri eksiksiz çalıştırmak hala macera dolu olabiliyor.

# Active Directory üzerinde stale computer account tespiti
Import-Module ActiveDirectory
$cutoffDate = (Get-Date).AddDays(-90)
Get-ADComputer -Filter {LastLogonDate -lt $cutoffDate -and Enabled -eq $true} `
    -Properties LastLogonDate, OperatingSystem |
    Select-Object Name, LastLogonDate, OperatingSystem |
    Sort-Object LastLogonDate |
    Export-Csv -Path "C:Reportsstale_computers.csv" -NoTypeInformation

.NET Framework ve Legacy Kurumsal Uygulamalar

Eğer şirketinizde 2008’den kalma bir ERP uygulaması, IIS üzerinde çalışan bir ASP.NET WebForms projesi veya SQL Server Reporting Services kurulumu varsa, Windows Server sizin platformunuzdur. Bu uygulamaları Linux’a taşımak büyük ihtimalle iş değeri yaratmaz, sadece risk ve efor üretir.

RDS ve Uzak Masaüstü Altyapısı

Remote Desktop Services, RemoteApp, VDI senaryoları için Windows Server hala en mantıklı seçim. Özellikle kurumsal kullanıcıların masaüstü uygulamalarına uzaktan erişmesi gerektiğinde bu mimari çok değerli.

Hyper-V ve Windows Sanallaştırma Ekosistemi

Eğer altyapınız Microsoft merkezliyse, Hyper-V üzerinde Windows VM’leri çalıştırmak, VMware yerine bu yolu tercih etmeniz için birçok iyi neden var. SCVMM ile entegrasyon, live migration, replica gibi özellikler olgun durumda.

Hibrit Senaryolar: Gerçek Hayat Her Zaman Karmaşık

Prodüksiyondaki çoğu ortam saf Linux veya saf Windows değil. Tipik bir kurumsal senaryo şöyle görünüyor:

  • Windows Server: AD DS, Exchange/M365 hybrid, SCCM/Intune, SQL Server (lisans varsa), RDS
  • Linux: Web/API sunucuları, konteyner platformu, CI/CD altyapısı, log toplama (ELK), monitoring (Prometheus + Grafana)

Bu hibrit yapıyı yönetmek için Ansible hem tarafı da yönetebilir:

# Karma envanter dosyası örneği
cat /etc/ansible/hosts

# Inventory'i gruplarla test et
ansible -i inventory/ windows_servers -m win_ping
ansible -i inventory/ linux_servers -m ping

# Tüm sunucularda uptime kontrolü
ansible all -i inventory/ -m shell -a "uptime" --limit linux_servers
ansible all -i inventory/ -m win_command -a "cmd /c systeminfo | findstr 'Up Time'" --limit windows_servers

Maliyet Hesabı: Sadece Lisans Değil

Burası çoğu zaman atlanıyor. Windows Server lisans maliyeti gerçekten yüksek, bu doğru. Standard edition ile Datacenter arasındaki fark ciddi. Ama hesabın tamamına bakmak lazım:

Linux tarafındaki gizli maliyetler:

  • RHEL, SLES gibi enterprise dağıtımların abonelik ücretleri (yılda sunucu başına 300-1000 dolar aralığı)
  • Ubuntu Pro (LTS extended support için)
  • Ekip training maliyeti eğer Windows’tan geçiş yapıyorsa
  • Bazı yazılımların Linux desteğinin daha az olgunlaşmış olması nedeniyle ek entegrasyon geliştirme maliyeti

Windows tarafındaki gizli maliyetler:

  • CAL (Client Access License) maliyetleri büyük envanterlerde ciddi rakam oluşturuyor
  • SQL Server lisansları astronomik olabiliyor (Core bazlı fiyatlandırma)
  • Enterprise Agreement dışında kaldığınızda fiyatlar katlanıyor

CentOS’un EOL sürecinden sonra birçok ekip RHEL’e geçti veya AlmaLinux/Rocky Linux’a migrate oldu. Bu geçişler de maliyetsiz değildi. Dolayısıyla “Linux ücretsiz” söyleminin gerçeği tam yansıtmadığını vurgulamak lazım.

Güvenlik Perspektifi: Hangi Platform Daha Güvenli?

Bu sorunun cevabı “yönetim kalitesine bağlı” şeklinde olmalı. Yanlış yapılandırılmış bir Linux sunucusu, iyi hardened bir Windows Server’dan çok daha tehlikeli olabilir.

Linux güvenlik kontrolü için temel bir checklist:

# SUID/SGID bitleri olan dosyaları listele
find / -perm /6000 -type f 2>/dev/null | grep -v proc

# Dinleyen portları ve sahiplerini listele
ss -tlnp

# Son başarısız login girişimleri
lastb | head -20

# Sudoers dosyasındaki düzenlemeleri kontrol et
visudo -c && grep -v "^#|^$" /etc/sudoers /etc/sudoers.d/*

# Cron job'ları tüm kullanıcılar için tara
for user in $(cut -f1 -d: /etc/passwd); do
    crontab -u $user -l 2>/dev/null && echo "--- $user ---"
done

Windows tarafında da benzer bir yaklaşım gerekiyor: SMBv1 kapalı mı, PowerShell execution policy nerede, WinRM güvenli mi, local administrator hesabı devre dışı mı?

Her iki platformda da CIS Benchmark’larını temel referans noktası olarak kullanmanızı öneririm. CIS-CAT aracıyla her iki platform için de otomatik uyum skorlaması yapabilirsiniz.

Karar Ağacı: Hangi Senaryoda Ne Seçersiniz?

Pratik olalım. Bazı tipik senaryolar ve öneriler:

E-ticaret web uygulaması (Node.js/Python/Go backend): Linux, tartışmasız. Nginx + uygulama + PostgreSQL trifectası, maliyet ve performans açısından açık ara önde.

Şirket içi ERP (SAP, ya da .NET tabanlı özel geliştirme): Vendor desteğine bakın. SAP için RHEL veya SLES önerilir. .NET tabanlı uygulamalar artık Linux’ta da çalışıyor ama eski versiyon ASP.NET (Web Forms, ASMX servisler) için Windows Server zorunlu.

Hybrid bulut altyapısı (Azure dominant): İkisi de destekleniyor. Ama AD senkronizasyonu, Azure Arc, SCCM entegrasyonu gibi konular Windows Server’ı daha cazip kılıyor. Linux VM’leri Azure’da da çok iyi çalışıyor, seçim iş yüküne göre yapılmalı.

Startup, microservice mimarisi: Linux + konteyner. Bunu tartışmaya bile gerek yok.

50 kullanıcılı KOBİ, Office 365 kullanan: Windows Server (sadece AD için bile olsa) artı Azure AD hybrid, hayatı çok kolaylaştırıyor.

# Linux sunucunun temel performans profilini çıkarmak için hızlı script
#!/bin/bash
echo "=== CPU Bilgisi ==="
lscpu | grep -E "Model name|CPU(s)|Thread|Core"

echo "=== Bellek ==="
free -h

echo "=== Disk I/O ==="
iostat -x 1 3 2>/dev/null || echo "sysstat paketi gerekli: apt install sysstat"

echo "=== Ağ Bağlantıları ==="
ss -s

echo "=== Yük Ortalaması ==="
uptime

echo "=== En Fazla CPU Kullanan 5 Proses ==="
ps aux --sort=-%cpu | head -6

Ekip Yetkinliği: Göz Ardı Edilen Faktör

Teknik olarak en iyi platformu seçseniz bile, onu yönetecek insanlar yoksa değeri sıfır. Bu noktada kendinize şunu sorun: “Ekibimiz hangi platformda gece 2’de patlayan bir sorunu daha hızlı çözer?”

Bir şirkette Docker ve Kubernetes geçişi yaparken ekibin yarısının hiç Linux CLI deneyimi olmadığını görüyorsunuz. Bu durumda önce ekibi yetiştirmeden platform değiştirmek, makineyi sürerken lastik değiştirmeye benziyor. Önce temel Linux becerilerini oturtun:

# Yeni ekip üyeleri için temel Linux beceri kontrolü
# Aşağıdakileri yapabiliyorlar mı?

# 1. Log dosyasında hata satırlarını bul ve say
grep -c "ERROR" /var/log/application.log

# 2. En büyük dosyaları bul
du -sh /var/log/* | sort -rh | head -10

# 3. Belirli bir portun hangi process tarafından kullanıldığını bul
ss -tlnp | grep :8080

# 4. Bir servisin son 100 log satırını göster
journalctl -u nginx --no-pager -n 100

# 5. Disk doluluk durumunu kontrol et
df -h | awk '$5 > "80%" {print $0}'

Sonuç

Platform seçimi bir din meselesi değil, mühendislik kararıdır. En iyi sysadminlerin her iki platformda da rahat çalışabildiğini, iş yüküne göre doğru aracı seçtiğini görüyorum.

Eğer hala “Linux mu Windows mu?” diye bütüncül bir cevap arıyorsanız, pratik bir formül şu: Web, konteyner, CI/CD, yüksek performanslı servisler için Linux; kurumsal kimlik yönetimi, legacy .NET uygulamalar, masaüstü servis altyapısı için Windows Server. Çoğu gerçek ortam ikisinin de olduğu hibrit bir yapıdır ve bu tamamen normaldir.

Son olarak şunu ekleyeyim: Platforma bağımlılığı azaltmak her zaman iyi bir hedeftir. Ansible, Terraform, konteyner teknolojileri bu konuda yardımcı olur. Altyapınızı bir platforma mahkum etmek yerine, workload’larınızı taşınabilir kılmak uzun vadede size çok daha fazla esneklik sağlar. Gelecekte bulut sağlayıcısı değiştirebilmek, maliyet optimizasyonu yapabilmek, yeni teknolojilere geçiş yapabilmek için bu esneklik kritik.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir