“Linux mu, BSD mi?” sorusu internet forumlarında yıllardır tartışılıyor ve genelde kişisel tercih savaşına dönüşüyor. Bu yazıda bu tartışmayı değil, sunucu tarafında gerçekten önemli olan teknik farkları ele alacağım — yıllarca her iki platformda production iş yükü çalıştırmış birinin gözünden.
Sonucu baştan söyleyeyim: ikisi de mükemmel. Önemli olan hangi iş yükü için hangisinin daha uygun olduğunu bilmek.
Mimari Felsefe: İki Farklı Dünya
Linux bir kernel’dir. Yani donanım soyutlama, süreç yönetimi, dosya sistemi ve ağ stack’ini sağlar. Üzerine gelen her şey — init sistemi (systemd, OpenRC, runit), paket yöneticisi (apt, dnf, pacman), kullanıcı araçları (GNU, musl, BusyBox), display server (X11, Wayland) — dağıtım tarafından seçilir ve entegre edilir. Bu yüzden Ubuntu, Arch, Gentoo, Alpine ve NixOS birbirinden tamamen farklı deneyimler sunar, ama altlarında aynı Linux kernel çalışır.
FreeBSD ise bir “complete operating system” felsefesiyle geliştirilir. Kernel, userland araçları, standart kütüphaneler, dokümantasyon ve temel sistem araçları tek bir proje tarafından koordineli şekilde geliştirilir. FreeBSD’nin ls, cp, grep komutları GNU coreutils değil, BSD userland’a aittir — davranış farkları olabilir (flag’ler, çıktı formatı).
Bu felsefe farkı pratikte şu anlama gelir:
Linux’ta dağıtım seçimi çok önemlidir. Aynı kernel üzerinde tamamen farklı deneyimler yaşarsınız. Ubuntu’da apt install nginx ile Arch’ta pacman -S nginx arasında sadece komut farkı yoktur — konfigürasyon dosyalarının yeri, init scriptlerinin yapısı, varsayılan ayarlar bile farklı olabilir. Bir Linux sysadmin’in “hangi dağıtım” sorusuna cevabı, o kişinin dünyasını tanımlar.
FreeBSD’de ise “FreeBSD” dediğinizde herkes aynı şeyi anlar. FreeBSD 14.0 ile FreeBSD 14.1 arasındaki fark iyi tanımlanmış ve dokümante edilmiştir. man sayfaları gerçekten güncel ve doğrudur — çünkü man sayfaları ile kaynak kod aynı ekip tarafından, aynı commit’te güncellenir.
Dosya Sistemi: ZFS Derinlemesine
ZFS, Sun Microsystems tarafından geliştirilen ve şu anda OpenZFS projesi tarafından sürdürülen bir dosya sistemi ve volume manager’dır. Copy-on-write mimarisi, end-to-end checksumming, snapshot/clone yönetimi ve dahili RAID (RAIDZ) desteği ile diğer dosya sistemlerinin çok ötesinde özellikler sunar.
FreeBSD’de ZFS
FreeBSD’de ZFS birinci sınıf vatandaştır. Kernel modülü olarak entegredir, boot from ZFS desteklenir ve installer’da ZFS root kurulum seçeneği varsayılan olarak sunulur. Bu, ZFS’in “sadece çalıştığı” ve ekstra çaba gerektirmediği anlamına gelir.
FreeBSD’nin ZFS entegrasyonunun en değerli özelliği Boot Environment (BE) yönetimidir. bectl komutu ile sistem yükseltmesinden önce mevcut boot ortamının bir klonunu alırsınız. Eğer yükseltme başarısız olursa, reboot sırasında önceki BE’yi seçerek sistemi saniyeler içinde eski haline döndürürsünüz.
# Mevcut boot environment'ları listele
bectl list
# Yükseltme öncesi BE oluştur
bectl create pre-upgrade
# Yükseltme yap
freebsd-update fetch install
# Eğer sorun çıkarsa
bectl activate pre-upgrade
reboot
Bu özellik, production sunucularda sistem yükseltmesi yapma cesaretini artırır. “Ya bozulursa” korkusu ortadan kalkar çünkü geri dönüş kelimenin tam anlamıyla bir komuttur.
FreeBSD’de ZFS ayrıca VM subsystem ile iyi entegredir. ARC (Adaptive Replacement Cache) bellek yönetimi, FreeBSD’nin VM subsystem’i ile koordineli çalışır — bellek baskısı altında ARC otomatik olarak küçülür ve belleği uygulamalara bırakır. Bu, Linux’taki durumdan daha pürüzsüzdür.
Linux’ta ZFS
Linux’ta ZFS, CDDL lisansı ile GPL’nin uyumsuzluğu nedeniyle kernel ağacına dahil edilemez. OpenZFS projesi DKMS (Dynamic Kernel Module Support) ile out-of-tree modül olarak kurulur. Bu genelde sorunsuz çalışır ama bazı operasyonel zorluklar yaratır.
Kernel güncellemesi sonrası DKMS otomatik olarak ZFS modülünü yeniden derler. Ama bazen yeni çıkan bir kernel versiyonuyla OpenZFS uyumluluğu henüz hazır olmayabilir. Bu durumda sunucu reboot sonrası ZFS pool’larını mount edemez — production’da kabul edilemez bir durum. Bu nedenle production sunucularda kernel güncellemesini otomatikleştirmemek ve test ortamında doğruladıktan sonra uygulamak en güvenli stratejidir.
Ubuntu, ZFS desteğini diğer dağıtımlara göre daha iyi entegre etmiştir. Root on ZFS kurulumu Ubuntu installer’da desteklenir (deneysel olarak). Canonical, ZFS modülünü kendi kernel paketleriyle birlikte derlemiş olarak sunar. Bu, DKMS bağımlılığını azaltır.
Performans açısından her iki platformda ZFS benzer sonuçlar verir. Ancak Linux’ta “double caching” sorunu daha belirgindir. ZFS kendi ARC’ını kullanır ama Linux kernel da page cache tutar. Aynı verinin hem ARC’da hem page cache’de olması bellek israfıdır. Bu sorunu tam olarak çözmek zor ama primarycache=metadata ayarı ile belirli dataset’lerde sadece metadata cache’lenmesi sağlanabilir.
Öte yandan Linux’ta ext4, XFS ve Btrfs gibi alternatifler mevcuttur. Her iş yükü ZFS gerektirmez — basit bir web sunucu veya CI/CD runner için ext4 mükemmel çalışır, overhead çok daha düşüktür ve kernel entegrasyonu doğaldır.
İzolasyon: Jails vs Containers
İzolasyon mekanizmaları, modern sunucu yönetiminin temel yapı taşıdır. FreeBSD ve Linux burada çok farklı yaklaşımlar sunar.
FreeBSD Jails
FreeBSD’nin Jails mekanizması 2000 yılında FreeBSD 4.0 ile tanıtıldı — Docker’dan 13 yıl, LXC’den 8 yıl önce. Jails, işletim sistemi seviyesinde izolasyon sağlar: her jail kendi dosya sistemi ağacına, ağ yapılandırmasına, kullanıcılarına ve süreçlerine sahiptir.
Jail’lerin güvenlik modeli basit ve sağlamdır. Jail içindeki root kullanıcı bile host sisteme erişemez. securelevel mekanizması ile jail içindeki operasyonlar kısıtlanabilir. VNET (Virtual Network) ile her jail’e tamamen izole bir ağ stack’i verilebilir — kendi IP adresi, routing tablosu ve firewall kuralları olan bağımsız bir ağ ortamı.
# Basit jail oluşturma
jail -c name=web path=/jails/web host.hostname=web.local \
ip4.addr="192.168.1.100" command=/bin/sh
# iocage ile jail yönetimi (daha pratik)
iocage create -r 14.0-RELEASE -n web
iocage set ip4_addr="vnet0|192.168.1.100/24" web
iocage set defaultrouter="192.168.1.1" web
iocage start web
# Jail içine paket kurma
iocage exec web pkg install -y nginx
Jail’lerin ZFS ile entegrasyonu özellikle güçlüdür. Her jail bir ZFS dataset üzerinde oluşturulabilir — snapshot, klonlama ve replikasyon jail bazında yapılabilir. Bir jail’in anlık yedeğini almak tek bir komuttur.
Dezavantajları da var: Linux uygulamalarını çalıştıramazsınız (FreeBSD Linuxulator kısıtlı destek sağlar ama tam uyumluluk yoktur). Hazır jail image ekosistemi Docker Hub ile karşılaştırılamaz. Orkestrasyon araçları (Kubernetes muadili) mevcut değildir.
Linux Containers
Linux’ta container teknolojisi cgroups (kaynak sınırlama) ve namespaces (izolasyon) üzerine kuruludur. Bu iki kernel özelliği, farklı soyutlama seviyelerinde container çözümleri oluşturulmasını sağlar.
LXC/LXD: Sistem container’ları — tam bir Linux userland çalıştırır, jail’lere kavramsal olarak en yakın yaklaşım. init sistemi, syslog, cron gibi sistem servisleri container içinde çalışabilir. VM benzeri ama çok daha hafif.
Docker: Uygulama container’ları — tek bir uygulamayı izole eder. Layered image sistemi, Dockerfile ile tekrarlanabilir build, Docker Hub ile devasa bir hazır image ekosistemi ve docker-compose ile çoklu container orkestrasyonu. Modern yazılım geliştirme ve deployment’ın standart aracı.
Kubernetes: Container orkestrasyonu — yüzlerce/binlerce container’ı yönetir. Auto-scaling, self-healing, rolling update, service discovery ve load balancing. Production-grade container altyapısının fiili standardı.
Bu ekosistem FreeBSD’nin Jails’ine kıyasla devasa. Docker Hub’da milyonlarca hazır image, Kubernetes için yüzlerce operator, CI/CD pipeline’ları container-native ve IaC (Infrastructure as Code) araçları container-aware.
Ancak bu karmaşıklık güvenlik yüzeyini de genişletir. Container escape açıkları (CVE-2024-21626 gibi), image supply chain saldırıları (kötü niyetli base image), yanlış yapılandırılmış Docker daemon (varsayılan root erişimi) ve Kubernetes RBAC hataları ciddi güvenlik riskleri oluşturabilir. Jails’in basitliği burada bir avantajdır — daha küçük attack surface.
Firewall: pf vs nftables
pf (Packet Filter)
FreeBSD’nin pf firewall’u orijinal olarak OpenBSD’den gelir. Okunabilir konfigürasyon, macro ve tablo desteği, anchor mekanizması (modüler kural setleri) ve ALTQ ile entegre QoS (Traffic Shaping) sunar.
# /etc/pf.conf — okunabilir ve sezgisel
# Macro'lar
ext_if = "em0"
int_if = "em1"
tcp_services = "{ ssh, http, https, 8080 }"
icmp_types = "{ echoreq, unreach }"
# Tablolar (dinamik IP listeleri)
table <bruteforce> persist
table <trusted> { 10.0.0.0/8, 192.168.0.0/16 }
# Kurallar
set skip on lo0
scrub in all
# Varsayılan politika
block in all
pass out all keep state
# SSH brute-force koruması
pass in on $ext_if proto tcp to port ssh \
flags S/SA keep state \
(max-src-conn 5, max-src-conn-rate 3/30, \
overload <bruteforce> flush global)
# Brute-force listesindeki IP'leri tamamen engelle
block in quick from <bruteforce>
# Güvenilir ağlardan tam erişim
pass in on $int_if from <trusted>
# Dış erişim için belirli portlar
pass in on $ext_if proto tcp to port $tcp_services
# ICMP
pass in on $ext_if inet proto icmp icmp-type $icmp_types
pf‘in güçlü yanı okunabilirliktir. Yukarıdaki konfigürasyon dosyasını okuyarak ne yaptığını anlayabilirsiniz — bu, gece 3’te bir sorun çözerken çok değerli bir özelliktir. pfctl -f /etc/pf.conf ile kural seti atomik olarak yüklenir — ya tüm kurallar yüklenir ya da hiçbiri. Partial load olmaz.
nftables
Linux tarafında nftables, iptables’ın halefi olarak geliştirilmiştir. Daha esnek sözdizimi, daha iyi performans (kernel içinde JIT derleme) ve programlanabilir yapı sunar.
# /etc/nftables.conf
table inet filter {
set bruteforce {
type ipv4_addr
timeout 5m
flags dynamic
}
chain input {
type filter hook input priority 0; policy drop;
# Established bağlantılar
ct state established,related accept
ct state invalid drop
# Loopback
iif lo accept
# SSH rate limiting
tcp dport ssh ct state new \
limit rate 3/minute burst 5 packets accept
# Web servisleri
tcp dport { http, https, 8080 } accept
# ICMP
icmp type { echo-request, destination-unreachable } accept
}
chain output {
type filter hook output priority 0; policy accept;
}
}
nftables, iptables’a göre çok daha tutarlı bir sözdizimi sunar (ipv4 ve ipv6 kuralları inet ailesi ile birleştirilebilir). Ancak birçok dağıtımda hâlâ iptables uyumluluk katmanı (iptables-nft) aktiftir ve geçiş süreci devam etmektedir.
Her iki firewall da production kullanıma tamamen uygundur. pf’in avantajı sadelik ve okunabilirlik, nftables’ın avantajı ise esneklik ve Linux ekosistemiyle doğal entegrasyondur.
Ağ Stack’i ve Performans
FreeBSD’nin ağ stack’i tarihsel olarak güçlüdür ve bazı yüksek performanslı ağ uygulamalarında tercih edilir. Netflix’in CDN altyapısının büyük kısmı FreeBSD üzerinde çalışır — tek bir sunucudan 400 Gbps trafik servisi yapılabildiği raporlanmıştır. netmap framework’ü kernel bypass ile hat hızında paket işlemeye olanak tanır. sendfile system call’u FreeBSD’de çok optimize edilmiştir — statik dosya sunucularında fark yaratır.
Linux’un ağ stack’i de son yıllarda büyük gelişmeler kaydetti. XDP (eXpress Data Path) ve eBPF ile kernel bypass ve programlanabilir paket işleme mümkündür — eBPF, aslında Linux kernel’ı programlanabilir bir platform haline getirmiştir. TC (Traffic Control) ile gelişmiş QoS uygulanabilir. DPDK (Data Plane Development Kit) ile kullanıcı alanında hat hızında paket işleme yapılabilir.
Pratikte ağ performansı açısından her iki platform da son derece yeterlidir. Fark, uç senaryolarda — çok yüksek PPS (packets per second), hat hızı forwarding, özel protokol işleme — ortaya çıkar. Çoğu production iş yükü için bu fark irrelevant’tır.
Sanallaştırma
FreeBSD’de bhyve hypervisor’u hafif ve hızlıdır. Type-2 hypervisor olarak çalışır, hem FreeBSD hem Linux guest’leri destekler ve Windows guest desteği de eklenmiştir. Ancak yönetim araçları sınırlıdır — GUI tabanlı management aracı yoktur, vm-bhyve veya CBSD gibi üçüncü parti wrapper’lar kullanılır.
Linux tarafında KVM/QEMU standart haline gelmiştir. libvirt soyutlama katmanı, virt-manager GUI, Proxmox VE, OpenStack ve oVirt gibi yönetim platformları muazzam bir ekosistem oluşturur. Live migration, memory ballooning, virtio para-virtualized sürücüler, GPU passthrough, VFIO ve nested virtualization gibi gelişmiş özellikler production-ready durumdadır. Sanallaştırma konusunda Linux açık ara öndedir.
Donanım Desteği
Linux’un donanım desteği FreeBSD’den çok daha geniştir. Neredeyse her donanım üreticisi Linux sürücüsü sağlar. Wi-Fi, GPU, özel depolama kontrolcüleri, FPGA’lar, InfiniBand kartları — Linux’ta destek bulmak çok daha kolaydır.
FreeBSD’de donanım desteği daha sınırlıdır. Sunucu sınıfı donanım (Intel/AMD CPU, Intel/Broadcom NIC, LSI/Broadcom HBA) genelde sorunsuz çalışır. Ama tüketici sınıfı donanım (özellikle Wi-Fi kartları, bazı GPU’lar) sorunlu olabilir. Donanım seçerken FreeBSD uyumluluk listesini kontrol etmek önemlidir.
Karar Matrisi
Her iki platformu yıllarca kullandıktan sonra şu genel çerçeveye ulaştım:
FreeBSD’yi tercih edin: Ağ ağırlıklı iş yüklerinde (router, firewall, CDN, proxy, load balancer). ZFS’in birinci sınıf entegrasyonunun kritik olduğu storage server’larda. Basit ve güvenli izolasyonun yeterli olduğu durumlarda (Jails). Tutarlılık ve öngörülebilirliğin ön planda olduğu ortamlarda. Küçük ekiplerin yönettiği, az sayıda ama kritik sunucularda. Minimal attack surface istenen güvenlik odaklı yapılarda.
Linux’u tercih edin: Container ekosisteminin gerekli olduğu yerlerde (Docker, Kubernetes). Bulut altyapısı ve orkestrasyon gerektiren ortamlarda (OpenStack, Ceph, Ansible). Geniş donanım desteğinin kritik olduğu durumlarda. Ekip üyelerinin Linux deneyiminin daha fazla olduğu yerlerde. Üçüncü parti yazılım ve kütüphane gereksinimlerinin yoğun olduğu projelerde. CI/CD pipeline’ları ve DevOps pratiklerinin uygulandığı ortamlarda.
Sonuç
FreeBSD ve Linux arasında “hangisi daha iyi” sorusu yanlış sorudur. Doğru soru “bu iş yükü için hangisi daha uygun” olmalıdır. Her iki platform da onlarca yılın mühendislik birikimini taşır ve production kullanıma fazlasıyla uygundur.
Benim kişisel yaklaşımım: ev lab’ında storage sunucu ve firewall olarak FreeBSD, container iş yükleri ve genel amaçlı sunucu olarak Linux. Her iki dünyayı da bilmek sizi daha iyi bir sistem mühendisi yapar — çünkü farklı perspektifler farklı çözüm stratejileri sunar.




