diff --git a/Readme.md b/Readme.md index befd296b..9ce95545 100644 --- a/Readme.md +++ b/Readme.md @@ -4,6 +4,14 @@ ---- +* [Installing](#installing) +* [Building](#building) +* [Concepts](#concepts) +* [Example](#example) +* [Releases](#releases) +* [Learn more](#learn-more) + + libbpfgo is a Go library for Linux's [eBPF](https://ebpf.io/) project. It was created for [Tracee](https://github.com/aquasecurity/tracee), our open source Runtime Security, and eBPF tracing tool, written in Go. If you are interested in eBPF and its applications, check out Tracee at Github: [https://github.com/aquasecurity/tracee](https://github.com/aquasecurity/tracee). libbpfgo is built around [libbpf](https://github.com/libbpf/libbpf) - the standard library for interacting with eBPF programs from userspace - which is a C library maintained in Linux upstream. We have created libbpfgo as a thin Go wrapper around the libbpf project. @@ -15,8 +23,6 @@ libbpfgo uses CGO to interop with libbpf and will expect to be linked with libbp 1. Install libbpf as a shared object in the system. Libbpf may already be packaged for your distribution and, if not, you can build and install from source. More info [here](https://github.com/libbpf/libbpf). 1. Embed libbpf into your Go project as a vendored dependency. This means that the libbpf code is statically linked into the resulting binary, and there are no runtime dependencies. [Tracee](https://github.com/aquasecurity/tracee) takes this approach. -In the next sesssion you will find different ways to build libbpfgo. - ## Building Currently you will find the following GNU Makefile rules: @@ -90,10 +96,22 @@ rb.Start() e := <-eventsChannel ``` -Please check our github milestones for an idea of the project roadmap. The general goal is to fully implement/expose libbpf's API in Go as seamlessly as possible. +## Releases + +libbpfgo does not yet have a regular schedule for cutting releases. There has not yet been a major release but API backwards compatibility will be maintained for all releases with the same major release number. Milestones are created when preparing for release. + +- __Major releases__ are cut when backwards compatibility is broken or major milestones are completed, such as reaching parity with libbpf's API. +- __Minor releases__ are cut to incorporate new support for libbpf APIs. +- __Patch releases__ are cut to incorporate important individual or groupings of bug fixes. +- __libbpf support numbering__ indicates the _minimum_ required libbpf version that must be linked in order to ensure libbpfgo compatibility. For example, `v0.2.1-libbpf_0.4.0` means that version 0.2.1 of libbpfgo requires v0.4.0 or newer of libbpf. + +*Note*: some distributions might have local changes to their libbpf package and their version might include backports and/or fixes differently than upstream versions. In those cases we recommend that libbpfgo is used statically compiled. + ## Learn more +Please check our github milestones for an idea of the project roadmap. The general goal is to fully implement/expose libbpf's API in Go as seamlessly as possible. + - [How to Build eBPF Programs with libbpfgo](https://blog.aquasec.com/libbpf-ebpf-programs). - [selftests](./selftest) are small program using libbpfgo and might be good usage examples. - [tracee-ebpf](https://github.com/aquasecurity/tracee/tree/main/tracee-ebpf) is a robust consumer of this project.