Learning eBPF: Programming the Linux Kernel for Enhanced Observability, Networking, and Security