マイクロソフト、「Windows」にeBPFを移植するオープンソースプロジェクトを立ち上げ

「Windows」上でLinuxのeBPF(extended Berkeley Packet Filter)を実行することはできるだろうか。「Windows Subsystem for Linux(WSL)2.0」を使っているのであれば、答えはもちろんイエスだ。WSLを使えば、「Windows 10」上でLinuxカーネルを稼働させていることになるためだ。しかし、eBPFはWindowsネイティブな形で実行できるのだろうか。それはできない相談だ。だが、この状況は近いうちに変わるだろう。Microsoftは米国時間5月10日、Windows 10と「Windows Server 2016」、そしてそれ以降のバージョン上でeBPFを実行できるようにするためのオープンソースプロジェクトを立ち上げたと発表した。

これはWindows用のeBPFを開発するというプロジェクトだ。このeBPFを用いることでWindows開発者は、Windowsの既存バージョン上でeBPFツールチェーンとAPIを使用できるようになる。これは簡単な話ではない。それでも、他の人々が培った成果に基づくことで実現できるはずだ。同プロジェクトは、eBPF関連の複数の既存オープンソースプロジェクトに対して「グルー」(のり)となるものを追加し、Windows上で実行できるようにすることを目指す。

こうした必要性はあるのだろうか。Linux開発者であればその答えは分かっているだろうが、Windows開発者であればまだ分からないかもしれない。以下はその説明だ。

マイクロソフト、「Windows」にeBPFを移植するオープンソースプロジェクトを立ち上げ

まず、全ての話は30年近く前に生み出されたBPF(Berkeley Packet Filter)というファイアウォール向けのプログラムから始まる。これは、仮想的なレジスターマシン上でネットワークパケットの捕捉とフィルタリングを実行するという設計に基づいている。これは有用なプログラムだった。しかし長い時間がたつうちに、BPFをモダンなプロセッサーに対応したeBPFへとアップデートし、ユーザーが提供したプログラムをカーネル内で実行できるようにすれば、はるかにパワフルなプログラムになるということを、Linuxカーネルの開発者であり、FacebookのソフトウェアエンジニアでもあるAlexei Starovoitov氏は気付いたのだった。そして、このeBPFがLinuxカーネルのバージョン3.15に搭載されたことを受け、プログラマーらはすぐに、あらゆる種類のプログラムでeBPFを使用するようになった。

eBPFは今日でも、ネットワークのフィルタリングや分析、管理に大きな力を発揮しているが、他の多くの作業にも用いられるようになっている。eBPFはシステムコールのフィルタリングや、プロセスのコンテキストトレーシングにも用いられている。つまり、トレーシングや、システムのプロファイリング、低水準のカスタムメトリクスの収集および集積をプログラミングするための万能ナイフのような存在となっている。このためeBPFはより高い水準において、「Cilium」や「Falco」「Tracee」といったセキュリティプログラムのほか、「Hubble」や「Pixie」のような「Kubernetes」監視プログラム、「Clang」といったツールチェーンの土台ともなっている。

今回のプロジェクトはeBPFをフォークするという話では全くない。eBPFのためにWindows固有のホスティング環境を追加するというだけの話だ。

最も重要なのは、Windows開発者がeBPFプログラムを使用できるようになり、WindowsとLinuxをまたがったソースコードレベルでの互換性がもたらされるという点にある。一部はLibbpf APIを利用して行われる。

eBPFのコードの中には、Linux固有の内部データ構造などが用いられているものもあるため、Windowsからは使用できない場合ももちろんある。しかし、その他多くのAPIやフックはプラットフォーム間で共有できるだろう。Linux開発者はeBPFによって大きな力を手にした。今度は、Windows開発者もその力を手にすることになる。

この記事は海外Red Ventures発の記事を朝日インタラクティブが日本向けに編集したものです。

関連記事