WindowsがまたLinuxを取り込む。マイクロソフト、Linuxカーネルが備える拡張機能「eBPF」互換機能をWindowsにもオープンソースで実装へ
マイクロソフトは、Linuxカーネルが備えている拡張機能である「eBPF」の互換機能を、Windows 10とWindows Server 2016以降で実現するオープンソース「eBPF for Windows」を発表しました。
カーネルのコードを書き換えずに機能を拡張できるeBPF
eBPFとは、Linuxカーネルを変更することなく、カーネルの持つさまざまな機能をフックすることにより、カーネルに対してある種の機能拡張を実現するものです。下記は、eBPFのWebサイトにある説明を引用したもの。
eBPF is a revolutionary technology that can run sandboxed programs in the Linux kernel without changing kernel source code or loading kernel modules. By making the Linux kernel programmable, infrastructure software can leverage existing layers, making them more intelligent and feature-rich without continuing to add additional layers of complexity to the system.
eBPFは、カーネルのソースコードを変更したり、カーネルモジュールをロードすることなく、Linuxカーネル内でサンドボックス化されたプログラムを実行できる画期的な技術です。Linuxカーネルをプログラマブルにすることで、基本的な機能を担うさまざまなソフトウェア(インフラストラクチャソフトウェア)は、システムに複雑なレイヤーを積み上げることなく、既存のレイヤーを活用して、よりインテリジェントで豊富な機能を持たせることができます。
そしてeBPFを用いることで次のようなことが実現できると説明されています。
eBPF has resulted in the development of a completely new generation of tooling in areas such as networking, security, application profiling/tracing and performance troubleshooting that no longer rely on existing kernel functionality but instead actively reprogram runtime behavior without compromising execution efficiency or safety.
eBPFは、ネットワーク、セキュリティ、アプリケーションなどの分野におけるプロファイリングやトレース、パフォーマンスのトラブルシューティングなどにおいて、既存のカーネルが持つ機能に頼らず、実行効率や安全性を損なうこともなく、ランタイムの動作をアクティブに再プログラムする、全く新しい世代のツールの開発を実現します。
具体的には、システムコールを監視することによりセキュリティを高める機能や、ソケットレベルでのネットワーク監視、ネットワークパケットのフィルタリング機能、カーネル内のさまざまなメトリクスを収集分析することによるパフォーマンスの監視やトラブルシュートなどが挙げられています。
プログラマはこうしたさまざまなeBPFのプログラムを、C言語のコードとしてeBPFのAPIを呼び出すことで記述可能です。記述されたコードはLLVM/Clangでコンパイルしてバイトコードに変換。
このバイトコードを、カーネルがクラッシュすることなどがないようeBPFが提供するサンドボックス内で実行することにより、カーネルを書き換えることなくさまざまな拡張が可能になるのです。
eBPFのAPIとツールチェインをWindowsでも利用可能に
マイクロソフトは今回発表した「eBPF for Windows」で、Windows上で開発者がeBPFのAPIとツールチェイン(すなわちC言語のコードやバイトコード変換ツールなど)を利用できるようにすることを目指す、と説明しています。
対象とするのは、Windows10とWindows Server 2016以降です。すでにGitHubにはeBPF for Windowsのソースコードなどが公開されており、試すことができる状態になっています。ただし、まだプロジェクトとしては初期の段階にあるとのこと。
また、マイクロソフトの説明によるとLinux版eBPFのバイトコードをそのままWindows上のeBPFで実行可能にするような互換性までは目指していないとしています。これはLinuxカーネルの内部構造は当然のことながらWindowsとは異なるためです。WindowsでeBPFを実装するのであれば、Windowsカーネル固有の機能に対しても対応させたいでしょうから、バイトコードの互換性は目指すところではないでしょう。
マイクロソフトとしては、一般的によく使われるフックなどを含むeBPFプログラムのソースコードレベルでの互換性を実現したいとしています。
eBPF for Windowsが実現すれば、例えばLinuxのeBPFで革新的に便利なツールやユーティリティが登場し、それが急速に普及したりLinuxのプラットフォームとしての進化を促進したとしても、すぐにWindowsで同じことを実現し、キャッチアップできるようになります。
これからもWindowsはLinuxを積極的に取り込んでいくだろう
マイクロソフトはWindows 10でWindows Subsystem for Linuxを導入し、Windows 10上でLinuxカーネルを取り込んでLinuxアプリケーションをそのまま実行可能にしました。加えてWindows Terminalの開発によるコマンドライン環境の充実もはかるなど、Linuxの機能や技術、実行環境を積極的にWindowsに取り込もうとしています。
eBPFのWindowsへの取り込みも、そうした流れの中で位置づけられます。
これは、WindowsやMicrosoft AzureやVisual Studioを、デベロッパーにとって最も魅力的なプラットフォームとして位置づけるという、同社にとって重要な戦略を実現し続けるための動きであることは間違いありません。
それゆえ、これからも同社はLinuxの優れた技術や先進的な技術は積極的にWindowsへ取り込んでいく、という動き気を見せ続けるはずです。
あわせて読みたい
PDFやWord、Excelファイルを読み込み、レイアウトなどはそのまま内容だけを翻訳。Google Translation APIに新機能
≪前の記事
トランスパイラ「Babel」の開発チーム、「何百万人にも使われているのに、なぜ私たちの資金は尽きようとしているのか?」。資金難により寄付を訴え