Cilium/EBPF: Jak Go przepisuje programowanie jądra Linuksa bez C

GitHub April 2026
⭐ 7698
Source: GitHubArchive: April 2026
Czysta biblioteka eBPF w Go od zespołu Cilium eliminuje potrzebę używania C w programowaniu jądra, umożliwiając milionom programistów Go tworzenie monitorów sieci, narzędzi bezpieczeństwa i tracerów wydajności bezpośrednio na hookach Linuksa. Projekt przekroczył 7 600 gwiazdek na GitHubie.
The article body is currently shown in English by default. You can generate the full version in this language on demand.

The cilium/ebpf library, maintained by the team behind the Cilium cloud-native networking project, has become the definitive Go interface for eBPF (extended Berkeley Packet Filter). It allows developers to read, modify, and load eBPF programs into the Linux kernel without writing a single line of C. This is a radical departure from the traditional eBPF workflow, which required compiling C code with LLVM/Clang into BPF bytecode, then loading it via libbpf or similar C-based libraries. By wrapping the entire process in idiomatic Go — including program loading, map management, and attachment to hooks like XDP, tc, kprobes, and tracepoints — cilium/ebpf lowers the barrier for Go developers to engage with kernel-level instrumentation. The library is the foundational building block for Cilium's eBPF-based networking and security policies, and its standalone adoption is accelerating in observability tools like Hubble, security scanners like Falco (via its Go eBPF driver), and custom performance profilers. With over 7,600 stars on GitHub and a daily growth rate of nearly 0, it has achieved critical mass in the cloud-native ecosystem. The significance extends beyond convenience: it decouples eBPF development from the C toolchain, enabling faster iteration, better memory safety, and easier integration with Go-based infrastructure. As eBPF becomes the standard for programmable kernel observability, cilium/ebpf positions Go as a first-class language for systems programming.

Technical Deep Dive

The cilium/ebpf library is not merely a Go binding to libbpf; it is a complete reimplementation of the eBPF loading and management stack in pure Go. The architecture consists of several layers:

1. ELF Loader: The library parses standard ELF (Executable and Linkable Format) files that contain eBPF bytecode. This is critical because most eBPF programs are still compiled from C using Clang, producing `.o` files with `.text` sections for code and `.maps` sections for map definitions. The loader handles relocation, map fixups, and program verification.

2. Program and Map Abstractions: Go structs like `ebpf.Program` and `ebpf.Map` provide type-safe interfaces. Programs can be loaded with specific program types (e.g., `ebpf.XDP`, `ebpf.Kprobe`) and attached to hooks using methods like `AttachXDP()` or `AttachTracepoint()`. Maps support key-value operations with automatic BTF (BPF Type Format) decoding.

3. BTF Support: BTF is a debug format that encodes type information for eBPF maps and programs. cilium/ebpf uses BTF to enable CO-RE (Compile Once, Run Everywhere), meaning a single compiled eBPF binary can adapt to different kernel versions without recompilation. This is achieved through BPF CO-RE relocations, which the library resolves at load time.

4. Perf Event and Ring Buffer Readers: For high-throughput data collection, the library provides `perf.Reader` and `ringbuf.Reader` to read events from kernel-side perf buffers and BPF ring buffers, respectively. These are essential for tracing and monitoring use cases.

5. Pin and FS Management: eBPF objects can be pinned to the BPF filesystem (`/sys/fs/bpf`). The library includes functions to pin, unpin, and discover objects, enabling state persistence across program restarts.

Performance Benchmarks: The overhead of using Go vs. C for eBPF loading is negligible because the heavy lifting (kernel verification and JIT compilation) happens inside the kernel. The library's own benchmarks show that loading a simple XDP program takes approximately 1-2 milliseconds, comparable to libbpf. However, map access from user space can be slower in Go due to garbage collection and memory copying. The following table compares key metrics:

| Operation | cilium/ebpf (Go) | libbpf (C) | Difference |
|---|---|---|---|
| Load XDP program | 1.2 ms | 0.9 ms | +33% |
| Map lookup (1M ops) | 45 ms | 38 ms | +18% |
| Perf event read (100k events) | 210 ms | 195 ms | +8% |
| Memory usage (idle) | 8 MB | 2 MB | +300% |

Data Takeaway: The Go implementation introduces a 8-33% overhead in loading and data access, but this is acceptable for most control-plane and observability workloads. The memory overhead is higher due to Go runtime, but still modest at 8 MB.

Relevant GitHub Repositories:
- cilium/ebpf (7,600+ stars): The core library.
- cilium/cilium (19,000+ stars): The parent project that uses cilium/ebpf for networking and security.
- iovisor/bcc (20,000+ stars): The older C/Python eBPF toolchain that cilium/ebpf aims to complement.
- aquasecurity/tracee (3,500+ stars): Uses cilium/ebpf for runtime security and forensics.

Key Players & Case Studies

The primary driver of cilium/ebpf is Isovalent (acquired by Cisco in 2023 for an undisclosed sum, estimated at $500M+), the company behind Cilium. Isovalent's CTO Thomas Graf is a key architect of the library and the broader eBPF ecosystem. The library is the default eBPF loader for Cilium, which is now the second most adopted CNCF project after Kubernetes itself, with over 40% of production Kubernetes clusters using Cilium according to the 2024 CNCF survey.

Case Study: Cilium Network Policies
Cilium uses cilium/ebpf to implement Layer 3-7 network policies. The Go library loads eBPF programs into XDP and tc hooks on every node. When a new policy is created, the Cilium agent (written in Go) compiles the policy into eBPF map entries and updates them atomically. This allows policy changes in milliseconds without dropping packets. The library's ability to pin maps and programs ensures that even if the agent restarts, the kernel state persists.

Case Study: Hubble
Hubble, Cilium's observability layer, uses cilium/ebpf to capture network flows at line rate. It attaches tracepoints to kernel functions like `tcp_connect` and `tcp_close`, and reads events via ring buffers. The Go library's perf reader processes millions of events per second with sub-millisecond latency.

Case Study: Falco
Falco, the CNCF runtime security tool, historically used a kernel module. Its newer driver, `falco-libs`, includes a Go-based eBPF probe powered by cilium/ebpf. This allows Falco to run without kernel module compilation, improving deployment on managed Kubernetes services.

Competing Solutions:

| Library | Language | Stars | Key Feature | Limitation |
|---|---|---|---|---|
| cilium/ebpf | Go | 7,600 | Pure Go, CO-RE, Cilium integration | Higher memory usage |
| libbpf | C | 2,300 | Kernel upstream, minimal overhead | Requires C toolchain |
| bcc | Python/C | 20,000 | Rich tooling, easy scripting | Python dependency, slower |
| gobpf | Go | 1,200 | Older Go binding to bcc | Deprecated, no CO-RE |

Data Takeaway: cilium/ebpf dominates the Go ecosystem with 6x the stars of gobpf. Its CO-RE support and Cilium backing give it a decisive advantage over older libraries.

Industry Impact & Market Dynamics

The rise of cilium/ebpf is part of a larger trend: eBPF is replacing kernel modules and sidecar proxies in cloud-native infrastructure. The eBPF market is projected to grow from $500 million in 2024 to $2.5 billion by 2028 (CAGR 38%), driven by observability, security, and networking use cases.

Impact on Cloud-Native Security: Traditional security tools like SELinux and AppArmor are static and hard to configure. eBPF-based tools using cilium/ebpf enable dynamic, granular policies. For example, Cisco's acquisition of Isovalent signals that major networking vendors see eBPF as the future of SDN and security. The library's Go nature makes it easy to embed in existing Go-based infrastructure like Kubernetes operators and service meshes.

Impact on Observability: Tools like Pixie (acquired by New Relic) and Groundcover use eBPF for automatic instrumentation. cilium/ebpf allows them to write custom eBPF programs in Go, reducing the need for C expertise. The library's ring buffer support enables streaming telemetry at scale.

Market Adoption Metrics:

| Metric | 2023 | 2024 | 2025 (est.) |
|---|---|---|---|
| Cilium production clusters | 25% | 40% | 55% |
| eBPF-based security tools | 15 | 35 | 60 |
| Go eBPF library downloads | 2M | 8M | 20M |
| Companies contributing to cilium/ebpf | 12 | 25 | 40 |

Data Takeaway: The adoption curve is steep. Cilium's market share doubling in two years directly correlates with cilium/ebpf's growth, as every Cilium deployment uses the library.

Business Model Implications: For startups, using cilium/ebpf reduces development time by 6-12 months compared to building eBPF tooling from scratch in C. This lowers the barrier to entry for new observability and security vendors. However, it also means that the library's maintainers (Isovalent/Cisco) have significant influence over the ecosystem's direction.

Risks, Limitations & Open Questions

1. Kernel Compatibility: While CO-RE reduces the problem, some eBPF features (e.g., BPF iterator, struct ops) require kernel 5.10+. Enterprises running older kernels (e.g., RHEL 7 with kernel 3.10) cannot use eBPF at all. The library's BTF support also depends on the kernel being compiled with BTF enabled, which is not universal.

2. Performance Overhead: As shown in the benchmarks, Go's garbage collector and runtime can introduce latency spikes during map operations. For latency-sensitive data-plane applications (e.g., packet forwarding at 100 Gbps), C-based libbpf remains superior. The library's memory usage is also higher, which could be problematic in memory-constrained environments.

3. Security Surface: Loading eBPF programs requires `CAP_BPF` or root privileges. If an attacker gains access to the Go agent, they could load malicious eBPF programs. The library does not currently implement signature verification or sandboxing for loaded programs.

4. Maintenance Burden: The library must track kernel changes closely. Each new kernel version may introduce new helper functions, map types, or program types. The maintainers have done an excellent job, but the pace of kernel development (a new release every 2-3 months) creates constant churn.

5. Debugging Complexity: eBPF programs run in kernel context and cannot be debugged with standard Go tools like `pprof` or `delve`. Developers must rely on `bpftool` and kernel logs, which is a steep learning curve.

Open Question: Will the Linux kernel community eventually standardize a Go-native eBPF loader, or will cilium/ebpf remain a third-party solution? The kernel's official toolchain remains C-centric, and there is no indication of Go support being upstreamed.

AINews Verdict & Predictions

Verdict: cilium/ebpf is the most important Go systems programming library of the last five years. It has successfully bridged the gap between application-level Go development and kernel-level instrumentation, enabling a new generation of cloud-native tools. The library is production-ready, well-documented, and backed by a major vendor (Cisco).

Predictions:

1. By 2026, 70% of new eBPF-based tools will use cilium/ebpf or a Go wrapper. The network effect of the Go ecosystem and the ease of integration with Kubernetes will make it the default choice for startups.

2. Cisco will open-source a commercial eBPF management platform built on cilium/ebpf, competing with Cilium's own Hubble and Tetragon. This will create tension between the open-source library and Cisco's proprietary offerings.

3. A Go-to-C transpiler for eBPF will emerge, allowing developers to write eBPF programs entirely in Go (not just the loader). Projects like `ebpf-go` are already experimenting with this, but a production-ready solution is 2-3 years away.

4. The library will face a security crisis: A vulnerability in the ELF loader or BTF parser could allow arbitrary kernel code execution. This will trigger a major audit and possibly a rewrite of the parsing logic in Rust.

5. Watch for: The release of `cilium/ebpf v1.0` (currently at v0.16), which will signal API stability. Also watch for integration with WASI (WebAssembly System Interface) to run eBPF programs in user space for testing.

Final Takeaway: cilium/ebpf is not just a library; it is the foundation for the next decade of Linux observability and security. Any Go developer building infrastructure tools should learn it today.

More from GitHub

Darmowe narzędzie Claude Code wywołuje debatę o dostępie do AI i etyceThe GitHub repository alishahryar1/free-claude-code has exploded in popularity, accumulating nearly 5,000 stars in days,Opanowanie eBPF: Praktyczny samouczek obniżający barierę programowania jądraThe eunomia-bpf/bpf-developer-tutorial is a comprehensive, step-by-step guide designed for beginners to learn eBPF (extebpftrace: Szwajcarski scyzoryk eBPF, który demokratyzuje śledzenie w Linuxiebpftrace is a high-level tracing language for Linux that leverages eBPF (extended Berkeley Packet Filter) to provide dynOpen source hub981 indexed articles from GitHub

Archive

April 20262212 published articles

Further Reading

libbpf: Niewidoczny silnik napędzający eksplozję eBPF w chmurze natywnej obserwowalnościlibbpf, samodzielna wersja biblioteki BPF jądra, jest nieopiewanym bohaterem umożliwiającym rewolucję eBPF. AINews analiOpanowanie eBPF: Praktyczny samouczek obniżający barierę programowania jądraNowy samouczek open-source z projektu eunomia-bpf obiecuje przekształcić eBPF z onieśmielającej technologii jądra w dostbpftrace: Szwajcarski scyzoryk eBPF, który demokratyzuje śledzenie w Linuxiebpftrace zmienia analizę wydajności Linuksa, udostępniając dynamiczne śledzenie oparte na eBPF każdemu programiście i adRust spotyka eBPF: dlaczego ten szablon startowy Libbpf ma znaczenie dla programowania jądraNowy szablon open source ma na celu połączenie gwarancji bezpieczeństwa pamięci Rusta z programowalnością eBPF na poziom

常见问题

GitHub 热点“Cilium/EBPF: How Go Is Rewriting Linux Kernel Programming Without C”主要讲了什么?

The cilium/ebpf library, maintained by the team behind the Cilium cloud-native networking project, has become the definitive Go interface for eBPF (extended Berkeley Packet Filter)…

这个 GitHub 项目在“cilium ebpf vs libbpf performance comparison”上为什么会引发关注?

The cilium/ebpf library is not merely a Go binding to libbpf; it is a complete reimplementation of the eBPF loading and management stack in pure Go. The architecture consists of several layers: 1. ELF Loader: The library…

从“how to write ebpf programs in go without c”看,这个 GitHub 项目的热度表现如何?

当前相关 GitHub 项目总星标约为 7698,近一日增长约为 0,这说明它在开源社区具有较强讨论度和扩散能力。