GitHub Radar — cilium/ebpf
CGO ve libbpf bağımlılığı olmadan saf Go ile çalışan, BTF ve CO-RE yeniden konumlandırmalarını çekirdek seviyesinde yöneten açık kaynak eBPF kütüphanesi.
cilium/ebpf, Linux çekirdeğinin modern gözlemlenebilirlik ve ağ güvenliği omurgasını oluşturan eBPF programlarını çalıştırmak için geliştiricileri hantal CGO bağlamalarına, libbpf C kütüphanesi derleme karmaşasına ve LLVM çalışma zamanı bağımlılıklarına mahkum eden eski yaklaşımları ortadan kaldırmak amacıyla saf Go ile geliştirilmiş açık kaynaklı bir sistem kütüphanesidir 1. Geleneksel araçların C ile Go çalışma zamanı arasında pahalı bağlam değişimlerine (context switch) yol açtığı, dinamik paylaşımlı kütüphaneler (.so) yüzünden konteyner dağıtımlarını kırılganlaştırdığı mimarilere karşı cilium/ebpf; doğrudan ham bpf() sistem çağrılarıyla konuşan, BPF Type Format (BTF) ayrıştırmasını ve CO-RE (Compile Once - Run Everywhere) yeniden konumlandırmalarını bütünüyle Go içinde çözen devrimci bir altyapı bileşenidir 2.
Sistem programlama, ağ güvenliği ve çekirdek seviyesi gözlemlenebilirlik çevrelerinde 8 bin yıldız ve son commit bugün düzeyinde derin bir mühendislik güveni inşa eden depo, aktif olarak yönetilen 140 açık issue ve Linux 7.1 uyumluluğunu getiren son sürüm v0.22.0 (Ekim 2026) metrikleriyle canlılığını sergilemektedir.
Mimari Deep-Dive: cilium/ebpf
cilium/ebpf’in sistem mimarisinde yarattığı en büyük mühendislik sıçraması, eBPF yaşam döngüsünü C dünyasından tamamen koparıp saf Go ile taşınabilir tek bir statik ikiliye dönüştürmesidir 1. Go seçimi; CGO bağlam geçişlerinin getirdiği işlemci ek yüklerini sıfırlamak, Kubernetes ortamlarında scratch veya distroless imajları üzerinde harici C kütüphanesine ihtiyaç duymadan çalışabilmek ve goroutine tabanlı yüksek eşzamanlılıkla çekirdek halka tamponlarını (ring buffer) alt milisaniyelik gecikmelerle boşaltabilmek amacıyla yapılmıştır.
Sistemin kalbinde yer alan ilk temel mimari sütun kullanıcı alanında (userspace) çalışan saf Go BTF ve CO-RE motorudur 2. Klasik eBPF geliştirme modellerinde hedef çekirdeğin veri yapıları (örneğin struct sock veya task_struct) değiştiğinde bayt kodu çalışmaz hale gelirdi. cilium/ebpf, /sys/kernel/btf/vmlinux dosyasını doğrudan bellek eşlemeli (mmap) olarak okur, tip tanımlarını lazy decoding ile ihtiyaç duyuldukça çözer ve Clang tarafından üretilen ELF nesnesindeki yeniden konumlandırma (relocation) kayıtlarını hedef çekirdeğin struct ofsetlerine göre Go çalışma zamanında dinamik olarak yamalar. Böylece tek bir derlenmiş eBPF bayt kodu, farklı Linux çekirdek sürümlerinde yeniden derleme gerektirmeksizin kusursuz biçimde yüklenir.
İkinci kritik sütun kod üretim ve iskelet aracı olan bpf2go mekanizmasıdır 3. Geliştirici C dilinde yazdığı eBPF çekirdek kodunu //go:generate direktifiyle bpf2go aracına iletir. bpf2go; C kodunu hem little-endian hem de big-endian mimarileri için eBPF bayt koduna derler ve bu bayt kodunu Go kaynak dosyası içine gömer (embed). Aynı zamanda eBPF map’lerinin anahtar ve değer yapılarını tip güvenli yerel Go struct’larına dönüştürür. Uygulama derlendiğinde eBPF bayt kodu diskte ayrı bir dosya olarak aranmaz; doğrudan Go ikilisinin veri segmentinde taşınır.
Üçüncü sütun ise ham sistem çağrısı ve halka tamponu (ringbuffer) soyutlamasıdır 4. Kütüphane; program yükleme (BPF_PROG_LOAD), map oluşturma (BPF_MAP_CREATE) ve kprobe/tracepoint/XDP kancalarına bağlanma işlemlerini doğrudan unix.Syscall üzerinden SYS_BPF çağrılarıyla yönetir. Çekirdek olayları, bellek kopyalamasını en aza indiren bellek eşlemeli perf_event_open veya modern BPF_MAP_TYPE_RINGBUF soketleri üzerinden doğrudan Go kanallarına pompalanır. Son sürümle eklenen BPF Token desteği ise kapsayıcı çalışma zamanlarında CAP_SYS_ADMIN yetkisine ihtiyaç duymadan çekirdek programı yükleme yetkisi sağlayarak güvenlik sınırlarını güçlendirir.
Kod ve Topluluk Sağlığı
cilium/ebpf, Cloud Native Computing Foundation (CNCF) mezun projelerinden Cilium ve Cloudflare mühendislerinin ortak girişimiyle başlatılmış olup Lorenz Bauer ve yetkin bir çekirdek sistem mühendisliği ekibi tarafından sürdürülmektedir 1. Cilium, Tetragon, Grafana Beyla, Datadog ve Cloudflare gibi küresel ölçekli altyapıların doğrudan üretim omurgasını oluşturan kütüphane, eBPF dünyasında standart bir referans haline gelmiştir.
Depodaki 140 açık issue sayısı, projenin Linux çekirdeğinin hızla değişen kprobe, fentry, struct_ops ve XDP kancalarını kapsamasından ileri gelen son derece dinamik ve iyi yönetilen bir envanteri temsil eder. Bakımcı kadrosu gelen hata bildirimlerine hızla yanıt vermekte, her çekme isteği (PR); kernel.org LTS sürümlerinden (Linux 4.9’dan Linux 7.1’e kadar) oluşan geniş sanal makine matrislerinde, donanım mimarilerinde (amd64, arm64) ve katı Go yarışma denetleyicisi (race detector) altında otomatik olarak test edilmektedir 4. Sürümleme takvimi semantik kurallara tam bağlı kalarak düzenli aralıklarla yürütülmektedir. health_score bu bölümden türer: issue kapanma hızı, sürüm düzeni, bakımcı ekibi. Ajanın tahminidir; künyede öyle yazılır. Projenin açık kaynak ekosistemindeki bağımsızlığı, kurumsal arkalığı ve kod disiplini dikkate alınarak health_score: 9.3 takdir edilmiştir.
Production Riski: Gerçekten Kullanılır mı?
cilium/ebpf’i kurumsal altyapı araçlarına veya özel güvenlik ajanlarına dahil etmeyi değerlendiren sistem mimarları için lisanslama açısından hiçbir engel bulunmamaktadır; proje son derece özgür MIT lisansı ile dağıtılmakta olup ticari ürünlerde ve şirket içi platformlarda kısıtlamasız kullanım serbestisi sunar 2.
cilium/ebpf’in üretimde tartışmasız hayat kurtardığı senaryolar oldukça açıktır: Harici C çalışma zamanı kütüphaneleri olmadan tek bir statik Go ikilisiyle sıfır ayak izine sahip ağ izleme araçları geliştirmek, soket düzeyinde yük dengeleme (socket-based load balancing) yapmak, API gecikmelerini çekirdek seviyesinde TCP katmanında ölçmek ve konteyner kaçışlarını kprobe kancalarıyla mikrosaniyeler içinde yakalamak. CGO içermemesi sayesinde çapraz derleme (cross-compilation) dakikalar içinde tamamlanır.
Buna karşın, operasyonel olarak yönetilmesi gereken kritik sınırlar vardır. İlk kısıt çekirdek doğrulayıcısı (verifier) karmaşıklığıdır; yazılan C eBPF kodu karmaşık döngüler veya sınırlandırılmamış işaretçiler içerdiğinde çekirdek yüklemeyi reddeder ve verifier log’larını ayrıştırmak ileri düzey sistem bilgisi gerektirir. İkinci kısıt ise bellek tüketimidir; BTF tipleri ayrıştırılırken doğru önbellekleme yapılmadığında vmlinux boyutu bellek üzerinde gereksiz yük oluşturabilir. Bu sınırlar doğru yönetildiğinde cilium/ebpf, Go ekosisteminde Linux çekirdeğiyle doğrudan konuşmak için tasarlanmış en olgun ve güvenilir eBPF kütüphanesidir.