Libbpf v1.5.0 has been released ([0]). It's been almost 7 months (!) since the last release, so we can say that v1.5 is a nicely aged release by now. As you can see below from the release notes, there aren't all that many new features and APIs in libbpf, which I take as a good sign of libbpf's maturity. A big part of v1.5 is actually addressing various bugs and usability shortcomings, and generally rounding up the overall user experience. All of this is important and these improvements are driven by various real-world production use cases. See the detailed changelog for yourself, below. Thanks to everyone contributing fixes, features, code reviews, as well as feature requests and bug reports! ## User space-side features and APIs - libbpf can now open (but not load!) BPF objects of non-native endianness, enabling cross-architecture support for BPF skeleton generation and BPF object introspection; - BPF skeleton will now auto-attach `SEC(".struct_ops")` maps as part of `<skeleton>__attach()` call; - BPF kprobe session programs support (`SEC("kprobe.session")`); - allow specifying kernel module name for fentry/fexit BPF programs (`SEC(fentry/module:function`); - libbpf recognizes `LIBBPF_LOG_LEVEL` environment variable, which can be used to set default log verboseness; - BPF ringbuf APIs that limit maximum number of consumed records at a time (`ring_buffer__consume_n()`, `ring__consume_n()`); - distilled BTF support (`btf__distill_base()`, `btf__relocate()`); - BPF link-based attachment of `BPF_PROG_TYPE_SOCKMAP` programs (`bpf_program__attach_sockmap()`); - `bpf_object__token_fd()` API to fetch BPF token FD of a BPF object, if any; ## BPF-side features and APIs - fixes for fetching syscall arguments on arm64, s390x, risc-v architectures; - better GCC-BPF source code compatibility; - `__bpf_fastcall` support for a few BPF helpers; - `__uptr` annotation definition added to `bpf/bpf_helpers.h` API header; ## Bug fixes - fixes and improvements around handling missing and nulled out `struct_ops` programs; - fixed `mmap()`-ing logic for global data, fixing interop between generic `bpf_object__open()` APIs and BPF subskeletons; - BPF skeleton backwards compatibility handling fixes; - handle LTO-produced `*.llvm.<hash>` symbols better; - feature detection fixes in the presence of BPF token inside user namespace; - older kernels have broken PID filtering logic for multi-uprobes, libbpf now detects this and avoids the use of multi-uprobes for USDTs; - fix accidental drop of `FD_CLOEXEC` flag during BPF map reuse; - few BTF dumper formatting fixes; - a few more small fixes all around. [0] https://github.com/libbpf/libbpf/releases/tag/v1.5.0 [1] Full Changelog: https://github.com/libbpf/libbpf/compare/v1.4.0...v1.5.0 -- Andrii