Berkeley Packet Filter (BPF) es una máquina virtual de propósito general dentro del kernel de Linux que permite a los usuarios ejecutar programas de forma segura y eficiente en respuesta a eventos del sistema. Originalmente diseñado para filtrar paquetes de red, BPF ha evolucionado a eBPF (extended BPF), una tecnología mucho más potente que puede engancharse a casi cualquier punto de instrumentación en el kernel (system calls, tracepoints, kprobes, uprobes, etc.). Los programas BPF se escriben en un subconjunto de C, compilados a bytecode BPF y luego verificados por un 'verifier' del kernel para garantizar seguridad y terminación antes de ser cargados y ejecutados. Esto permite extender el kernel de forma dinámica y segura, sin necesidad de recompilar o cargar módulos de kernel.
BPF se ha convertido en una tecnología fundamental en el ecosistema de Linux, impulsando herramientas y sistemas críticos. Ejemplos concretos incluyen: Cilium, que lo utiliza para redes y seguridad de contenedores de alto rendimiento; Falco, para detección de amenazas y anomalías en tiempo de ejecución; y herramientas de observabilidad como bpftrace y BCC (BPF Compiler Collection) para profiling, tracing y monitoreo de rendimiento a bajo nivel. Además, se usa en sistemas de balanceo de carga (ej. XDP - eXpress Data Path), firewalls (ej. tc BPF) y para la implementación de políticas de seguridad (ej. seccomp-BPF).
Para el arquitecto, BPF es una herramienta estratégica que ofrece una flexibilidad sin precedentes para la observabilidad, seguridad y optimización de rendimiento en sistemas Linux. Permite diseñar soluciones que requieren una visibilidad profunda del kernel o una manipulación de red de alto rendimiento sin incurrir en la sobrecarga de los módulos de kernel tradicionales o la complejidad de modificar el código fuente del kernel. Los trade-offs incluyen la curva de aprendizaje para desarrollar programas BPF y la necesidad de comprender las garantías de seguridad del 'verifier'. Sin embargo, su capacidad para extender el kernel de forma segura y eficiente lo convierte en un componente clave para construir plataformas de infraestructura robustas, seguras y de alto rendimiento, especialmente en entornos de microservicios y contenedores donde la granularidad y el rendimiento son críticos.