米Microsoftは、Linuxネイティブのカーネル内仮想マシンであり、プログラム可能性、拡張性、俊敏性を提供するeBPF(extended Berkeley Packet Filter)を、Windows 10とWindows Server 2016以降で動作させるための、新たなオープンソースプロジェクト「eBPF-for-Windows」を5月10日(現地時間)に発表した。
「eBPF-for-Windows」は、Windowsの既存バージョン上でeBPFのツールチェーンやAPIを使えるようにすることを目的としており、現状での開発は比較的初期段階にある。
Windows版eBPFによって、clangなど既存のeBPFツールチェーンを使用して、さまざまな言語のソースコードからeBPFバイトコードを生成でき、結果のバイトコードは任意のアプリケーションでの使用や、Windows netshコマンドラインツールでの手動での使用が可能で、Libbpf APIを公開する共有ライブラリを使用する。
ライブラリは、eBPFバイトコードをユーザーモード保護プロセスでホストされている静的ベリファイア(PREVAILベリファイア)に送信し、バイトコードがすべてのベリファイアの安全性チェックに合格した場合に、そのバイトコードは Windowsカーネルモード実行コンテキストで実行されているuBPFインタープリターにロードされるか、uBPFのJITコンパイラによってコンパイルされてネイティブコードをロードできる。
カーネルモード実行コンテキストにインストールされたeBPFプログラムは、さまざまなフックに接続してイベントを処理し、パブリックWindowsカーネルAPIを内部的にラップするeBPFシムによって公開されるさまざまなヘルパーAPIを呼び出して、既存のバージョンのWindowsでeBPFを使用可能にする。これまでに、XDPとソケットバインドが追加されており、今後はさらに多くのフックとヘルパーが追加される予定となっている。
なお、同プロジェクトは既存のeBPFのフォークではなく、IOVisor uBPFプロジェクトやPREVAILベリファイアといった既存のオープンソースプロジェクトを活用して、そのコードにWindows固有のホスティング環境を追加するものであり、OSのエコシステム全体に適用される共通のフックとヘルパーを使用するコードに、ソースコード互換性を提供することを目指す。
あわせて、同プロジェクトではLibbpf APIを公開し、eBPFプログラムと対話するアプリケーションに対して、ソースコード互換性を提供する。
この記事は参考になりましたか?
- この記事の著者
-
CodeZine編集部(コードジンヘンシュウブ)
CodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です