Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

bpf: Document BPF licensing.

Document and clarify BPF licensing.

Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Reviewed-by: Simon Horman <simon.horman@corigine.com>
Acked-by: Toke Høiland-Jørgensen <toke@redhat.com>
Acked-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Joe Stringer <joe@cilium.io>
Acked-by: Lorenz Bauer <lmb@cloudflare.com>
Acked-by: Dave Thaler <dthaler@microsoft.com>
Acked-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Jesper Dangaard Brouer <brouer@redhat.com>
Acked-by: KP Singh <kpsingh@kernel.org>
Link: https://lore.kernel.org/bpf/20210917230034.51080-1-alexei.starovoitov@gmail.com

authored by

Alexei Starovoitov and committed by
Daniel Borkmann
c86216bc 17b52c22

+101
+92
Documentation/bpf/bpf_licensing.rst
··· 1 + ============= 2 + BPF licensing 3 + ============= 4 + 5 + Background 6 + ========== 7 + 8 + * Classic BPF was BSD licensed 9 + 10 + "BPF" was originally introduced as BSD Packet Filter in 11 + http://www.tcpdump.org/papers/bpf-usenix93.pdf. The corresponding instruction 12 + set and its implementation came from BSD with BSD license. That original 13 + instruction set is now known as "classic BPF". 14 + 15 + However an instruction set is a specification for machine-language interaction, 16 + similar to a programming language. It is not a code. Therefore, the 17 + application of a BSD license may be misleading in a certain context, as the 18 + instruction set may enjoy no copyright protection. 19 + 20 + * eBPF (extended BPF) instruction set continues to be BSD 21 + 22 + In 2014, the classic BPF instruction set was significantly extended. We 23 + typically refer to this instruction set as eBPF to disambiguate it from cBPF. 24 + The eBPF instruction set is still BSD licensed. 25 + 26 + Implementations of eBPF 27 + ======================= 28 + 29 + Using the eBPF instruction set requires implementing code in both kernel space 30 + and user space. 31 + 32 + In Linux Kernel 33 + --------------- 34 + 35 + The reference implementations of the eBPF interpreter and various just-in-time 36 + compilers are part of Linux and are GPLv2 licensed. The implementation of 37 + eBPF helper functions is also GPLv2 licensed. Interpreters, JITs, helpers, 38 + and verifiers are called eBPF runtime. 39 + 40 + In User Space 41 + ------------- 42 + 43 + There are also implementations of eBPF runtime (interpreter, JITs, helper 44 + functions) under 45 + Apache2 (https://github.com/iovisor/ubpf), 46 + MIT (https://github.com/qmonnet/rbpf), and 47 + BSD (https://github.com/DPDK/dpdk/blob/main/lib/librte_bpf). 48 + 49 + In HW 50 + ----- 51 + 52 + The HW can choose to execute eBPF instruction natively and provide eBPF runtime 53 + in HW or via the use of implementing firmware with a proprietary license. 54 + 55 + In other operating systems 56 + -------------------------- 57 + 58 + Other kernels or user space implementations of eBPF instruction set and runtime 59 + can have proprietary licenses. 60 + 61 + Using BPF programs in the Linux kernel 62 + ====================================== 63 + 64 + Linux Kernel (while being GPLv2) allows linking of proprietary kernel modules 65 + under these rules: 66 + Documentation/process/license-rules.rst 67 + 68 + When a kernel module is loaded, the linux kernel checks which functions it 69 + intends to use. If any function is marked as "GPL only," the corresponding 70 + module or program has to have GPL compatible license. 71 + 72 + Loading BPF program into the Linux kernel is similar to loading a kernel 73 + module. BPF is loaded at run time and not statically linked to the Linux 74 + kernel. BPF program loading follows the same license checking rules as kernel 75 + modules. BPF programs can be proprietary if they don't use "GPL only" BPF 76 + helper functions. 77 + 78 + Further, some BPF program types - Linux Security Modules (LSM) and TCP 79 + Congestion Control (struct_ops), as of Aug 2021 - are required to be GPL 80 + compatible even if they don't use "GPL only" helper functions directly. The 81 + registration step of LSM and TCP congestion control modules of the Linux 82 + kernel is done through EXPORT_SYMBOL_GPL kernel functions. In that sense LSM 83 + and struct_ops BPF programs are implicitly calling "GPL only" functions. 84 + The same restriction applies to BPF programs that call kernel functions 85 + directly via unstable interface also known as "kfunc". 86 + 87 + Packaging BPF programs with user space applications 88 + ==================================================== 89 + 90 + Generally, proprietary-licensed applications and GPL licensed BPF programs 91 + written for the Linux kernel in the same package can co-exist because they are 92 + separate executable processes. This applies to both cBPF and eBPF programs.
+9
Documentation/bpf/index.rst
··· 82 82 s390 83 83 84 84 85 + Licensing 86 + ========= 87 + 88 + .. toctree:: 89 + :maxdepth: 1 90 + 91 + bpf_licensing 92 + 93 + 85 94 Other 86 95 ===== 87 96