[[eBPF||BPF]]の位置付けを整理したところで、次にObservabilityの文脈におけるBPFの歴史、およびLinuxトレーシングを支える要素技術を簡単に紹介する。BPFはここ数年普及した技術であると認知されているが、その起源は1992年にまで遡る。 ### 1992 cBPF (classic BPF) BPFの最初のアイデアは、バークレー研究所のSteven McCannによる1993年の論文<sup id="a5">[5](#f5)</sup>にて提案された。パケットフィルタを効率よく実行するためには、カーネルからユーザ空間への全てのパケットを転送するのではなく、カーネル内でフィルタリングしたのちに、ユーザ空間へ転送する必要がある。スタックベースのオリジナルのUNIXのフィルタ評価器に代えて、レジスタベースのフィルタ評価器であるBPFが提案された。eBPF登場以後は、この評価器はclassic BPF(cBPF)と呼ばれている。 論文<sup id="a5">[5](#f5)</sup>の4節に、"BPF is now about two years old and has been put to work in several applications."と記載されていることから、BPFが実装されたのは1990年ごろだと推察される。 ### 1997 Linux Socket Filter (LSF) [メーリングリストの履歴](https://lists.archive.carbon60.com/linux/kernel/4376?page=last)によると、Jay SchulistがLinuxにBPFをLinux Socket Filterという名称で追加したのは、バージョン 2.1.8xであると記載されている。[Linuxカーネルバージョンの歴史](https://en.wikipedia.org/wiki/Linux_kernel_version_history)によると、2.1.8xの開発は1997年ごろである。 ### 2013 eBPFの提案 2013年にAlexei StarovoitovはcBPFを拡張するためにcBPFの大幅な書き換えを提案した。[LKML: Alexei Starovoitov: [PATCH net-next] extended BPF](https://lkml.org/lkml/2013/9/30/627) そして、翌年の2014年にLinuxカーネルに搭載された。 書籍<sup id="a2">[2](#f2)</sup>の序文にて、2014年にStarovoitovはBPFを高度なネットワーキングやその他のプログラムを実行できる汎用の仮想マシンにしようと取り組んでいたと記述されている。同書の2.3節に、SDN(Software Defined Networking)の新しい方法を調査していたPLUMgrid社に勤務していたStarovoitovにより、eBPFが作られたとある。また、同書の序文で、その取り組みを聞いた著者であるGreggはBPFの上に性能分析ツールを開発することに興味を持ったと述懐している。eBPFのパッチの提案には、具体的なユースケースは述べられていなかったが、開発当時からパケットフィルタに留まらない汎用実行エンジンを目指していたことが伺える。 ### 2015 BCCの開発 2015年にBrenden Blancoにより、BPFアプリケーションを構築するためのコンパイラフレームワークとライブラリを含むツールキット[BPF Compiler Collection(BCC)](https://iovisor.github.io/bcc/)が開発された。 ### 2016 BPF Superpowers 2016年に開催された、Facebook主催のPerformance @ScaleにてBrendan Greggによる[Linux BPF Superpowers](https://www.brendangregg.com/blog/2016-03-05/linux-bpf-superpowers.html)と題したプレゼンテーションが披露された。タイトルが示すように、Obserbabilityの文脈でBPFの秘めた可能性が日本国内でも知られるようになったきっかけとなった。 ### 2017 bpftrace 2017年にAlastair Robertsonによりbpftraceが開発された。 ### 2019 CO-RE [Linux Kernel Developers' bpfconf 2019](http://vger.kernel.org/bpfconf2019.html)にて、FacebookのAndrii Nakryikoが、BPFプログラムの移植性を向上させるための[BPF CO-REのプロジェクトを発表した](http://vger.kernel.org/bpfconf2019_talks/bpf-core.pdf)。 ### 2020 BCC Pythonの性能ツールが廃止予定に [BPF binaries: BTF, CO-RE, and the future of BPF perf tools](https://brendangregg.com/blog/2020-11-04/bpf-co-re-btf-libbpf.html) BCCリポジトリにおけるPythonでの性能分析ツールのコーディングはlibbpf Cに移行するため廃止予定(deprecated)となった。BCC自体が廃止されるわけではない。移植されたBCCに含まれる性能分析ツールは、[iovisor/bccリポジトリのlibbpf-toolsディレクトリ](https://github.com/iovisor/bcc/tree/master/libbpf-tools)にある。 ### 2020 クラウドネイティブにおける注目技術 [BPF binaries: BTF, CO-RE, and the future of BPF perf tools](https://brendangregg.com/blog/2020-11-04/bpf-co-re-btf-libbpf.html) クラウドネイティブ技術を推進する財団である[[CNCF]]が主催するKubeCon NA 2020にて、CNCF TOC chairのLiz Riceにより、2021年に注目すべき5つのテクノロジーの一つとして、[[WASM|Web Assembly]]とeBPFが挙げられていた。 > #CNCF TOC chair @lizrice is sharing the 5 technologies to watch in 2021 according to the TOC: > 1. Chaos engineering > 2. @kubernetesio for the edge > 3. Service mesh > 4. Web assembly and eBPF > 5. Developer + operator experience > from <https://twitter.com/CloudNativeFdn/status/1329863326428499971> ### 2021 BPF on Windows [Making eBPF work on Windows - Microsoft Open Source Blog](https://cloudblogs.microsoft.com/opensource/2021/05/10/making-ebpf-work-on-windows/) Microsoftの公式ブログで、WindowsでBPFを動作させるプロジェクトが発表された。 Windows 10 and Windows Server 2016以降でBPFがサポートされることになった。