Microsoft реализует eBPF для Linux на Windows
Microsoft запустил проект с открытым исходным кодом, чтобы адаптировать инструмент ядра Linux eBPF (Extended Berkeley Packet Filter) для работы на Windows.
Архитектура проекта и связанных компонентовФункция eBPF предлагает поддержку расширенных пакетных фильтров Беркли и используется в большей части Unix-подобных систем для программ, которые должны, помимо прочего, анализировать сетевой трафик. По сути, это виртуальная машина на основе регистров, разработанная для запуска пользовательской 64-битной RISC-подобной архитектуры посредством своевременной компиляции внутри ядра Linux.
Отношения eBPF с ядром Linux можно сравнить с отношениями JavaScript с веб-страницами — они позволяют изменять поведение ядра Linux путем загрузки выполняемой программы без изменения фактического исходного кода ядра или загрузки модуля ядра.
Windows в последние годы перешла на использование инструментов Linux. Программы eBPF доказали свою эффективность в Linux для защиты от отказа в обслуживании и наблюдения за системой, и возник интерес к адаптации технологии для других операционных систем.
Проект ebpf-for-windows нацелен на то, чтобы позволить разработчикам использовать наборы инструментов eBPF и интерфейсы прикладного программирования поверх существующих версий Windows.
По словам партнера-разработчика ПО Microsoft Дэйва Талера и главного инженера-программиста Пурны Гаддехосур, они используют несколько существующих проектов с открытым исходным кодом eBPF и адаптируют их к работе в Windows. Пока проект находится на ранней стадии разработки. eBPF для Windows будет полагаться на IOVisor uBPF и верификатор PREVAIL с использованием специфической среды хостинга.
Разработчики Windows смогут использовать такие инструменты, как clang, для генерации байт-кода eBPF из исходного кода, который можно использовать с командной строкой Windows netsh через общую библиотеку на API Libbpf. Библиотека передает байт-код eBPF через статический верификатор PREVAIL в среде безопасности Windows.
Инженеры Microsoft говорят, что проект направлен на обеспечение совместимости кода eBPF с использованием хуков и помощников, которые существуют как в Linux, так и в Windows.
Пока добавлены два перехватчика — XDP и привязка сокета — для обработки событий и взаимодействия с вспомогательными API-интерфейсами, доступными через оболочку eBPF.