ZDNet сообщает, что Microsoft работает над тем, чтобы портировать инструмент extended Berkeley Packet Filter (eBPF) в Windows 10 и Windows Server 2016 (и более поздние версии).
В настоящее время инструмент можно запускать в Subsystem for Linux, но Microsoft работает над нативной поддержкой, при этом проблема заключается в том, что инструмент запускает код в контексте ядра, что вызывает всевозможные сложности с безопасностью.
Проект ebpf-for-windows нацелен на то, чтобы взять несколько существующих проектов eBPF с открытым исходным кодом и добавить «glue», чтобы заставить их работать в Windows.
Как показано на схеме, существующие инструменты eBPF (clang и т. д.) могут использоваться для генерации байт-кода eBPF из исходного кода на различных языках. Байт-код может использоваться любым приложением или через инструмент Netsh, который использует общую библиотеку, предоставляющую API-интерфейсы Libbpf, хотя эта работа еще не завершена.
Байт-код eBPF отправляется статическому верификатору (верификатору PREVENT), который размещается в защищенном в пользовательском режиме процессе (среда безопасности Windows, которая позволяет компоненту ядра доверять демону пользовательского режима, подписанному ключом, которому он доверяет). Если байт-код проходит все проверки верификатора, его можно либо загрузить в интерпретатор (из uBPF в контексте выполнения режима ядра), либо скомпилировать JIT (через JIT-компилятор uBPF) и загрузить нативный код в контекст выполнения режима ядра.
Программы eBPF, установленные в контексте выполнения режима ядра, могут подключаться к различным перехватчикам (на данный момент два перехватчика: XDP и перехватчик привязки сокета) и вызывать различные вспомогательные API-интерфейсы, предоставляемые eBPF shim, которая внутренне обертывает публичные API-интерфейсы ядра Windows, позволяя использование eBPF в существующих версиях Windows. Со временем будет добавлено больше перехватчиков и помощников.
Конечным результатом будет специфическая для Windows среда хостинга для eBPF, которая позволит разработчикам Windows использовать программы eBPF с открытым исходным кодом без необходимости перекодирования.