{"adoption": {"forks": 596, "observed_at": "2026-08-28T04:08:40.494909+00:00", "stars": 4254}, "canonical_url": "https://ross.abutalabs.com/products/bpf-developer-tutorial", "card": {"archived": false, "artifact_type": "learning-resource", "description": "eBPF Developer Tutorial: Learning eBPF Step by Step with Examples", "domain": ["developer-tools", "operating-systems", "tutorials", "monitoring", "security"], "enriched": true, "function": ["developer-tools", "monitoring", "security", "networking"], "health_score": 77, "homepage": "https://eunomia.dev/tutorials/", "language": "C", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["eunomia-bpf/bpf-developer-tutorial"], "name": "eunomia-bpf/bpf-developer-tutorial", "platform": ["c", "go", "rust", "cli"], "pushed_at": "2026-07-26T16:30:13+00:00", "repo": "eunomia-bpf/bpf-developer-tutorial", "stars": 4254, "tags": ["ebpf", "bpf", "libbpf", "xdp", "kernel-programming", "observability", "co-re", "tutorial", "examples", "linux"], "topics": ["bpf", "ebpf", "libbpf", "tutorial", "xdp", "examples"], "urls": [], "use_cases": ["learn eBPF development step by step", "find minimal eBPF example code for kprobes and uprobes", "write an XDP packet processing program", "monitor file opens or process execution with eBPF", "understand BPF ring buffers and perf event arrays", "explore advanced kernel features like BPF arena and struct_ops", "build observability tools with libbpf CO-RE"], "what_it_is": "A step-by-step open-source eBPF developer tutorial based on CO-RE, with dozens of short, self-contained example tools built with libbpf, Cilium, libbpf-rs, and eunomia-bpf in C, Go, and Rust. It covers beginner to advanced topics including kprobes, uprobes, ring buffers, XDP, BPF iterators, arena, dynptrs, struct_ops, and BPF tokens.", "when_to_avoid": ["you need deep theoretical coverage of kernel internals or verifier theory", "you prefer BCC-based Python development workflows", "you need production-ready, supported eBPF tooling rather than educational examples"], "when_to_choose": ["you want hands-on, runnable eBPF examples rather than long conceptual explanations", "you are learning libbpf-based CO-RE development in C, Go, or Rust", "you need short reference implementations of common eBPF tool patterns", "you want to keep up with newer kernel features like dynptrs, workqueues, and BPF tokens"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/bpf-developer-tutorial", "repo": "eunomia-bpf/bpf-developer-tutorial", "role": "main", "score": 74}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:08:40.494909+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:22:09.581784+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "442403fcd13b6a66a0c202f4cfc84b8f610b752e784f77b0e834a687c8d38bdc", "fetched_at": "2026-08-28T04:08:40.494909+00:00", "kind": "readme", "missing": false, "url": "https://github.com/eunomia-bpf/bpf-developer-tutorial"}, {"content_hash": "5e77e22753cd2e40af5a794e8947b4419704377d9e77d5100671779654516027", "fetched_at": "2026-08-29T09:11:58.047154+00:00", "kind": "homepage", "missing": false, "url": "https://eunomia.dev/tutorials/"}, {"content_hash": "79074ec7475c178d3946b39cc2d87f617d3a3b40194cbc527b76377a17822a2d", "fetched_at": "2026-08-29T09:11:58.058695+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/bpf_arena"}, {"content_hash": "4afbcd2b8d9728175555f936055cdd4a1c722d2f9f7414956926965346f24a7f", "fetched_at": "2026-08-29T09:11:58.061083+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/bpf_iters"}, {"content_hash": "6e8904d1a89536a17b1a24e5808b880774dfb60d2ad6b37b8c7f66f1087cee13", "fetched_at": "2026-08-29T09:11:58.063316+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/bpf_token"}, {"content_hash": "c9ccadbdfe6f44fd67b13b30a1d85a5ec480dade5f67b29289c37e8f91e4579e", "fetched_at": "2026-08-29T09:11:58.065636+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/bpf_wq"}, {"content_hash": "1a827145b89d39c95ff4d982e35eee2d9fdb6667ebac0f31cd3355de371290de", "fetched_at": "2026-08-29T09:11:58.067886+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/dynptr"}, {"content_hash": "ee542ae33c2e781fefb6e02709a418c581f9e0aedee0885fec437da5f62ce124", "fetched_at": "2026-08-29T09:11:58.069982+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/struct_ops"}, {"content_hash": "93948ca37022fdabf32601f26c081640f2f0ef22cdf2e8a2dcadbc86678cba2e", "fetched_at": "2026-08-29T09:11:58.056781+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/others"}, {"content_hash": "93bef200f32ca49cd518f0c1a1fe2a1b7e2d12d0fb4d6ccda0fd758eecd9a810", "fetched_at": "2026-08-29T09:11:58.072854+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/18-further-reading"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:08:40.494909+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:22:09.581784+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "442403fcd13b6a66a0c202f4cfc84b8f610b752e784f77b0e834a687c8d38bdc", "fetched_at": "2026-08-28T04:08:40.494909+00:00", "kind": "readme", "missing": false, "url": "https://github.com/eunomia-bpf/bpf-developer-tutorial"}, {"content_hash": "5e77e22753cd2e40af5a794e8947b4419704377d9e77d5100671779654516027", "fetched_at": "2026-08-29T09:11:58.047154+00:00", "kind": "homepage", "missing": false, "url": "https://eunomia.dev/tutorials/"}, {"content_hash": "79074ec7475c178d3946b39cc2d87f617d3a3b40194cbc527b76377a17822a2d", "fetched_at": "2026-08-29T09:11:58.058695+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/bpf_arena"}, {"content_hash": "4afbcd2b8d9728175555f936055cdd4a1c722d2f9f7414956926965346f24a7f", "fetched_at": "2026-08-29T09:11:58.061083+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/bpf_iters"}, {"content_hash": "6e8904d1a89536a17b1a24e5808b880774dfb60d2ad6b37b8c7f66f1087cee13", "fetched_at": "2026-08-29T09:11:58.063316+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/bpf_token"}, {"content_hash": "c9ccadbdfe6f44fd67b13b30a1d85a5ec480dade5f67b29289c37e8f91e4579e", "fetched_at": "2026-08-29T09:11:58.065636+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/bpf_wq"}, {"content_hash": "1a827145b89d39c95ff4d982e35eee2d9fdb6667ebac0f31cd3355de371290de", "fetched_at": "2026-08-29T09:11:58.067886+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/dynptr"}, {"content_hash": "ee542ae33c2e781fefb6e02709a418c581f9e0aedee0885fec437da5f62ce124", "fetched_at": "2026-08-29T09:11:58.069982+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/struct_ops"}, {"content_hash": "93948ca37022fdabf32601f26c081640f2f0ef22cdf2e8a2dcadbc86678cba2e", "fetched_at": "2026-08-29T09:11:58.056781+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/others"}, {"content_hash": "93bef200f32ca49cd518f0c1a1fe2a1b7e2d12d0fb4d6ccda0fd758eecd9a810", "fetched_at": "2026-08-29T09:11:58.072854+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/18-further-reading"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:22:09.581784+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "442403fcd13b6a66a0c202f4cfc84b8f610b752e784f77b0e834a687c8d38bdc", "fetched_at": "2026-08-28T04:08:40.494909+00:00", "kind": "readme", "missing": false, "url": "https://github.com/eunomia-bpf/bpf-developer-tutorial"}, {"content_hash": "5e77e22753cd2e40af5a794e8947b4419704377d9e77d5100671779654516027", "fetched_at": "2026-08-29T09:11:58.047154+00:00", "kind": "homepage", "missing": false, "url": "https://eunomia.dev/tutorials/"}, {"content_hash": "79074ec7475c178d3946b39cc2d87f617d3a3b40194cbc527b76377a17822a2d", "fetched_at": "2026-08-29T09:11:58.058695+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/bpf_arena"}, {"content_hash": "4afbcd2b8d9728175555f936055cdd4a1c722d2f9f7414956926965346f24a7f", "fetched_at": "2026-08-29T09:11:58.061083+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/bpf_iters"}, {"content_hash": "6e8904d1a89536a17b1a24e5808b880774dfb60d2ad6b37b8c7f66f1087cee13", "fetched_at": "2026-08-29T09:11:58.063316+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/bpf_token"}, {"content_hash": "c9ccadbdfe6f44fd67b13b30a1d85a5ec480dade5f67b29289c37e8f91e4579e", "fetched_at": "2026-08-29T09:11:58.065636+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/bpf_wq"}, {"content_hash": "1a827145b89d39c95ff4d982e35eee2d9fdb6667ebac0f31cd3355de371290de", "fetched_at": "2026-08-29T09:11:58.067886+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/dynptr"}, {"content_hash": "ee542ae33c2e781fefb6e02709a418c581f9e0aedee0885fec437da5f62ce124", "fetched_at": "2026-08-29T09:11:58.069982+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/struct_ops"}, {"content_hash": "93948ca37022fdabf32601f26c081640f2f0ef22cdf2e8a2dcadbc86678cba2e", "fetched_at": "2026-08-29T09:11:58.056781+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/others"}, {"content_hash": "93bef200f32ca49cd518f0c1a1fe2a1b7e2d12d0fb4d6ccda0fd758eecd9a810", "fetched_at": "2026-08-29T09:11:58.072854+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/18-further-reading"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:08:40.494909+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:08:40.494909+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:08:40.494909+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:22:09.581784+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "442403fcd13b6a66a0c202f4cfc84b8f610b752e784f77b0e834a687c8d38bdc", "fetched_at": "2026-08-28T04:08:40.494909+00:00", "kind": "readme", "missing": false, "url": "https://github.com/eunomia-bpf/bpf-developer-tutorial"}, {"content_hash": "5e77e22753cd2e40af5a794e8947b4419704377d9e77d5100671779654516027", "fetched_at": "2026-08-29T09:11:58.047154+00:00", "kind": "homepage", "missing": false, "url": "https://eunomia.dev/tutorials/"}, {"content_hash": "79074ec7475c178d3946b39cc2d87f617d3a3b40194cbc527b76377a17822a2d", "fetched_at": "2026-08-29T09:11:58.058695+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/bpf_arena"}, {"content_hash": "4afbcd2b8d9728175555f936055cdd4a1c722d2f9f7414956926965346f24a7f", "fetched_at": "2026-08-29T09:11:58.061083+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/bpf_iters"}, {"content_hash": "6e8904d1a89536a17b1a24e5808b880774dfb60d2ad6b37b8c7f66f1087cee13", "fetched_at": "2026-08-29T09:11:58.063316+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/bpf_token"}, {"content_hash": "c9ccadbdfe6f44fd67b13b30a1d85a5ec480dade5f67b29289c37e8f91e4579e", "fetched_at": "2026-08-29T09:11:58.065636+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/bpf_wq"}, {"content_hash": "1a827145b89d39c95ff4d982e35eee2d9fdb6667ebac0f31cd3355de371290de", "fetched_at": "2026-08-29T09:11:58.067886+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/dynptr"}, {"content_hash": "ee542ae33c2e781fefb6e02709a418c581f9e0aedee0885fec437da5f62ce124", "fetched_at": "2026-08-29T09:11:58.069982+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/struct_ops"}, {"content_hash": "93948ca37022fdabf32601f26c081640f2f0ef22cdf2e8a2dcadbc86678cba2e", "fetched_at": "2026-08-29T09:11:58.056781+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/others"}, {"content_hash": "93bef200f32ca49cd518f0c1a1fe2a1b7e2d12d0fb4d6ccda0fd758eecd9a810", "fetched_at": "2026-08-29T09:11:58.072854+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/18-further-reading"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:08:40.494909+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:08:40.494909+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:22:09.581784+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "442403fcd13b6a66a0c202f4cfc84b8f610b752e784f77b0e834a687c8d38bdc", "fetched_at": "2026-08-28T04:08:40.494909+00:00", "kind": "readme", "missing": false, "url": "https://github.com/eunomia-bpf/bpf-developer-tutorial"}, {"content_hash": "5e77e22753cd2e40af5a794e8947b4419704377d9e77d5100671779654516027", "fetched_at": "2026-08-29T09:11:58.047154+00:00", "kind": "homepage", "missing": false, "url": "https://eunomia.dev/tutorials/"}, {"content_hash": "79074ec7475c178d3946b39cc2d87f617d3a3b40194cbc527b76377a17822a2d", "fetched_at": "2026-08-29T09:11:58.058695+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/bpf_arena"}, {"content_hash": "4afbcd2b8d9728175555f936055cdd4a1c722d2f9f7414956926965346f24a7f", "fetched_at": "2026-08-29T09:11:58.061083+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/bpf_iters"}, {"content_hash": "6e8904d1a89536a17b1a24e5808b880774dfb60d2ad6b37b8c7f66f1087cee13", "fetched_at": "2026-08-29T09:11:58.063316+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/bpf_token"}, {"content_hash": "c9ccadbdfe6f44fd67b13b30a1d85a5ec480dade5f67b29289c37e8f91e4579e", "fetched_at": "2026-08-29T09:11:58.065636+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/bpf_wq"}, {"content_hash": "1a827145b89d39c95ff4d982e35eee2d9fdb6667ebac0f31cd3355de371290de", "fetched_at": "2026-08-29T09:11:58.067886+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/dynptr"}, {"content_hash": "ee542ae33c2e781fefb6e02709a418c581f9e0aedee0885fec437da5f62ce124", "fetched_at": "2026-08-29T09:11:58.069982+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/struct_ops"}, {"content_hash": "93948ca37022fdabf32601f26c081640f2f0ef22cdf2e8a2dcadbc86678cba2e", "fetched_at": "2026-08-29T09:11:58.056781+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/others"}, {"content_hash": "93bef200f32ca49cd518f0c1a1fe2a1b7e2d12d0fb4d6ccda0fd758eecd9a810", "fetched_at": "2026-08-29T09:11:58.072854+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/18-further-reading"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:08:40.494909+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:08:40.494909+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:08:40.494909+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:22:09.581784+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "442403fcd13b6a66a0c202f4cfc84b8f610b752e784f77b0e834a687c8d38bdc", "fetched_at": "2026-08-28T04:08:40.494909+00:00", "kind": "readme", "missing": false, "url": "https://github.com/eunomia-bpf/bpf-developer-tutorial"}, {"content_hash": "5e77e22753cd2e40af5a794e8947b4419704377d9e77d5100671779654516027", "fetched_at": "2026-08-29T09:11:58.047154+00:00", "kind": "homepage", "missing": false, "url": "https://eunomia.dev/tutorials/"}, {"content_hash": "79074ec7475c178d3946b39cc2d87f617d3a3b40194cbc527b76377a17822a2d", "fetched_at": "2026-08-29T09:11:58.058695+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/bpf_arena"}, {"content_hash": "4afbcd2b8d9728175555f936055cdd4a1c722d2f9f7414956926965346f24a7f", "fetched_at": "2026-08-29T09:11:58.061083+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/bpf_iters"}, {"content_hash": "6e8904d1a89536a17b1a24e5808b880774dfb60d2ad6b37b8c7f66f1087cee13", "fetched_at": "2026-08-29T09:11:58.063316+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/bpf_token"}, {"content_hash": "c9ccadbdfe6f44fd67b13b30a1d85a5ec480dade5f67b29289c37e8f91e4579e", "fetched_at": "2026-08-29T09:11:58.065636+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/bpf_wq"}, {"content_hash": "1a827145b89d39c95ff4d982e35eee2d9fdb6667ebac0f31cd3355de371290de", "fetched_at": "2026-08-29T09:11:58.067886+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/dynptr"}, {"content_hash": "ee542ae33c2e781fefb6e02709a418c581f9e0aedee0885fec437da5f62ce124", "fetched_at": "2026-08-29T09:11:58.069982+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/struct_ops"}, {"content_hash": "93948ca37022fdabf32601f26c081640f2f0ef22cdf2e8a2dcadbc86678cba2e", "fetched_at": "2026-08-29T09:11:58.056781+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/others"}, {"content_hash": "93bef200f32ca49cd518f0c1a1fe2a1b7e2d12d0fb4d6ccda0fd758eecd9a810", "fetched_at": "2026-08-29T09:11:58.072854+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/18-further-reading"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:08:40.494909+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:08:40.494909+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:22:09.581784+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "442403fcd13b6a66a0c202f4cfc84b8f610b752e784f77b0e834a687c8d38bdc", "fetched_at": "2026-08-28T04:08:40.494909+00:00", "kind": "readme", "missing": false, "url": "https://github.com/eunomia-bpf/bpf-developer-tutorial"}, {"content_hash": "5e77e22753cd2e40af5a794e8947b4419704377d9e77d5100671779654516027", "fetched_at": "2026-08-29T09:11:58.047154+00:00", "kind": "homepage", "missing": false, "url": "https://eunomia.dev/tutorials/"}, {"content_hash": "79074ec7475c178d3946b39cc2d87f617d3a3b40194cbc527b76377a17822a2d", "fetched_at": "2026-08-29T09:11:58.058695+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/bpf_arena"}, {"content_hash": "4afbcd2b8d9728175555f936055cdd4a1c722d2f9f7414956926965346f24a7f", "fetched_at": "2026-08-29T09:11:58.061083+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/bpf_iters"}, {"content_hash": "6e8904d1a89536a17b1a24e5808b880774dfb60d2ad6b37b8c7f66f1087cee13", "fetched_at": "2026-08-29T09:11:58.063316+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/bpf_token"}, {"content_hash": "c9ccadbdfe6f44fd67b13b30a1d85a5ec480dade5f67b29289c37e8f91e4579e", "fetched_at": "2026-08-29T09:11:58.065636+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/bpf_wq"}, {"content_hash": "1a827145b89d39c95ff4d982e35eee2d9fdb6667ebac0f31cd3355de371290de", "fetched_at": "2026-08-29T09:11:58.067886+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/dynptr"}, {"content_hash": "ee542ae33c2e781fefb6e02709a418c581f9e0aedee0885fec437da5f62ce124", "fetched_at": "2026-08-29T09:11:58.069982+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/struct_ops"}, {"content_hash": "93948ca37022fdabf32601f26c081640f2f0ef22cdf2e8a2dcadbc86678cba2e", "fetched_at": "2026-08-29T09:11:58.056781+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/others"}, {"content_hash": "93bef200f32ca49cd518f0c1a1fe2a1b7e2d12d0fb4d6ccda0fd758eecd9a810", "fetched_at": "2026-08-29T09:11:58.072854+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/18-further-reading"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:22:09.581784+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "442403fcd13b6a66a0c202f4cfc84b8f610b752e784f77b0e834a687c8d38bdc", "fetched_at": "2026-08-28T04:08:40.494909+00:00", "kind": "readme", "missing": false, "url": "https://github.com/eunomia-bpf/bpf-developer-tutorial"}, {"content_hash": "5e77e22753cd2e40af5a794e8947b4419704377d9e77d5100671779654516027", "fetched_at": "2026-08-29T09:11:58.047154+00:00", "kind": "homepage", "missing": false, "url": "https://eunomia.dev/tutorials/"}, {"content_hash": "79074ec7475c178d3946b39cc2d87f617d3a3b40194cbc527b76377a17822a2d", "fetched_at": "2026-08-29T09:11:58.058695+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/bpf_arena"}, {"content_hash": "4afbcd2b8d9728175555f936055cdd4a1c722d2f9f7414956926965346f24a7f", "fetched_at": "2026-08-29T09:11:58.061083+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/bpf_iters"}, {"content_hash": "6e8904d1a89536a17b1a24e5808b880774dfb60d2ad6b37b8c7f66f1087cee13", "fetched_at": "2026-08-29T09:11:58.063316+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/bpf_token"}, {"content_hash": "c9ccadbdfe6f44fd67b13b30a1d85a5ec480dade5f67b29289c37e8f91e4579e", "fetched_at": "2026-08-29T09:11:58.065636+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/bpf_wq"}, {"content_hash": "1a827145b89d39c95ff4d982e35eee2d9fdb6667ebac0f31cd3355de371290de", "fetched_at": "2026-08-29T09:11:58.067886+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/dynptr"}, {"content_hash": "ee542ae33c2e781fefb6e02709a418c581f9e0aedee0885fec437da5f62ce124", "fetched_at": "2026-08-29T09:11:58.069982+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/struct_ops"}, {"content_hash": "93948ca37022fdabf32601f26c081640f2f0ef22cdf2e8a2dcadbc86678cba2e", "fetched_at": "2026-08-29T09:11:58.056781+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/others"}, {"content_hash": "93bef200f32ca49cd518f0c1a1fe2a1b7e2d12d0fb4d6ccda0fd758eecd9a810", "fetched_at": "2026-08-29T09:11:58.072854+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/18-further-reading"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:22:09.581784+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "442403fcd13b6a66a0c202f4cfc84b8f610b752e784f77b0e834a687c8d38bdc", "fetched_at": "2026-08-28T04:08:40.494909+00:00", "kind": "readme", "missing": false, "url": "https://github.com/eunomia-bpf/bpf-developer-tutorial"}, {"content_hash": "5e77e22753cd2e40af5a794e8947b4419704377d9e77d5100671779654516027", "fetched_at": "2026-08-29T09:11:58.047154+00:00", "kind": "homepage", "missing": false, "url": "https://eunomia.dev/tutorials/"}, {"content_hash": "79074ec7475c178d3946b39cc2d87f617d3a3b40194cbc527b76377a17822a2d", "fetched_at": "2026-08-29T09:11:58.058695+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/bpf_arena"}, {"content_hash": "4afbcd2b8d9728175555f936055cdd4a1c722d2f9f7414956926965346f24a7f", "fetched_at": "2026-08-29T09:11:58.061083+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/bpf_iters"}, {"content_hash": "6e8904d1a89536a17b1a24e5808b880774dfb60d2ad6b37b8c7f66f1087cee13", "fetched_at": "2026-08-29T09:11:58.063316+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/bpf_token"}, {"content_hash": "c9ccadbdfe6f44fd67b13b30a1d85a5ec480dade5f67b29289c37e8f91e4579e", "fetched_at": "2026-08-29T09:11:58.065636+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/bpf_wq"}, {"content_hash": "1a827145b89d39c95ff4d982e35eee2d9fdb6667ebac0f31cd3355de371290de", "fetched_at": "2026-08-29T09:11:58.067886+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/dynptr"}, {"content_hash": "ee542ae33c2e781fefb6e02709a418c581f9e0aedee0885fec437da5f62ce124", "fetched_at": "2026-08-29T09:11:58.069982+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/struct_ops"}, {"content_hash": "93948ca37022fdabf32601f26c081640f2f0ef22cdf2e8a2dcadbc86678cba2e", "fetched_at": "2026-08-29T09:11:58.056781+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/others"}, {"content_hash": "93bef200f32ca49cd518f0c1a1fe2a1b7e2d12d0fb4d6ccda0fd758eecd9a810", "fetched_at": "2026-08-29T09:11:58.072854+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/18-further-reading"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:22:09.581784+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "442403fcd13b6a66a0c202f4cfc84b8f610b752e784f77b0e834a687c8d38bdc", "fetched_at": "2026-08-28T04:08:40.494909+00:00", "kind": "readme", "missing": false, "url": "https://github.com/eunomia-bpf/bpf-developer-tutorial"}, {"content_hash": "5e77e22753cd2e40af5a794e8947b4419704377d9e77d5100671779654516027", "fetched_at": "2026-08-29T09:11:58.047154+00:00", "kind": "homepage", "missing": false, "url": "https://eunomia.dev/tutorials/"}, {"content_hash": "79074ec7475c178d3946b39cc2d87f617d3a3b40194cbc527b76377a17822a2d", "fetched_at": "2026-08-29T09:11:58.058695+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/bpf_arena"}, {"content_hash": "4afbcd2b8d9728175555f936055cdd4a1c722d2f9f7414956926965346f24a7f", "fetched_at": "2026-08-29T09:11:58.061083+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/bpf_iters"}, {"content_hash": "6e8904d1a89536a17b1a24e5808b880774dfb60d2ad6b37b8c7f66f1087cee13", "fetched_at": "2026-08-29T09:11:58.063316+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/bpf_token"}, {"content_hash": "c9ccadbdfe6f44fd67b13b30a1d85a5ec480dade5f67b29289c37e8f91e4579e", "fetched_at": "2026-08-29T09:11:58.065636+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/bpf_wq"}, {"content_hash": "1a827145b89d39c95ff4d982e35eee2d9fdb6667ebac0f31cd3355de371290de", "fetched_at": "2026-08-29T09:11:58.067886+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/dynptr"}, {"content_hash": "ee542ae33c2e781fefb6e02709a418c581f9e0aedee0885fec437da5f62ce124", "fetched_at": "2026-08-29T09:11:58.069982+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/features/struct_ops"}, {"content_hash": "93948ca37022fdabf32601f26c081640f2f0ef22cdf2e8a2dcadbc86678cba2e", "fetched_at": "2026-08-29T09:11:58.056781+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/others"}, {"content_hash": "93bef200f32ca49cd518f0c1a1fe2a1b7e2d12d0fb4d6ccda0fd758eecd9a810", "fetched_at": "2026-08-29T09:11:58.072854+00:00", "kind": "site_page", "missing": false, "url": "https://eunomia.dev/tutorials/18-further-reading"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 94, "longevity": 97, "rhythm": 35}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 1370, "days_push": 38, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 74, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}