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 11 http://www.tcpdump.org/papers/bpf-usenix93.pdf 12 set and its implementation came from BSD with 13 instruction set is now known as "classic BPF". 14 15 However an instruction set is a specification 16 similar to a programming language. It is not 17 application of a BSD license may be misleading 18 instruction set may enjoy no copyright protect 19 20 * eBPF (extended BPF) instruction set continue 21 22 In 2014, the classic BPF instruction set was s 23 typically refer to this instruction set as eBP 24 The eBPF instruction set is still BSD licensed 25 26 Implementations of eBPF 27 ======================= 28 29 Using the eBPF instruction set requires implem 30 and user space. 31 32 In Linux Kernel 33 --------------- 34 35 The reference implementations of the eBPF inte 36 compilers are part of Linux and are GPLv2 lice 37 eBPF helper functions is also GPLv2 licensed. 38 and verifiers are called eBPF runtime. 39 40 In User Space 41 ------------- 42 43 There are also implementations of eBPF runtime 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/li 48 49 In HW 50 ----- 51 52 The HW can choose to execute eBPF instruction 53 in HW or via the use of implementing firmware 54 55 In other operating systems 56 -------------------------- 57 58 Other kernels or user space implementations of 59 can have proprietary licenses. 60 61 Using BPF programs in the Linux kernel 62 ====================================== 63 64 Linux Kernel (while being GPLv2) allows linkin 65 under these rules: 66 Documentation/process/license-rules.rst 67 68 When a kernel module is loaded, the linux kern 69 intends to use. If any function is marked as " 70 module or program has to have GPL compatible l 71 72 Loading BPF program into the Linux kernel is s 73 module. BPF is loaded at run time and not stat 74 kernel. BPF program loading follows the same l 75 modules. BPF programs can be proprietary if th 76 helper functions. 77 78 Further, some BPF program types - Linux Securi 79 Congestion Control (struct_ops), as of Aug 202 80 compatible even if they don't use "GPL only" h 81 registration step of LSM and TCP congestion co 82 kernel is done through EXPORT_SYMBOL_GPL kerne 83 and struct_ops BPF programs are implicitly cal 84 The same restriction applies to BPF programs t 85 directly via unstable interface also known as 86 87 Packaging BPF programs with user space applica 88 ============================================== 89 90 Generally, proprietary-licensed applications a 91 written for the Linux kernel in the same packa 92 separate executable processes. This applies to
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.