// Copyright (c) Microsoft Corporation
// SPDX-License-Identifier: Apache-2.0

/**
 * @mainpage
 *
 * @section intro Introduction
 * This project aims to create an Apache-licensed library for executing eBPF programs. The primary implementation of
 * eBPF lives in the Linux kernel, but due to its GPL license it can't be used in many projects.
 *
 * For more info see:
 * <ul>
 * <li><a href=https://www.kernel.org/doc/Documentation/networking/filter.txt>Linux documentation for the eBPF instruction set</a>
 * <li><a href=https://github.com/iovisor/bpf-docs/blob/master/eBPF.md>Instruction set reference</a>
 * </ul>
 *
 * This project includes an eBPF assembler, disassembler, interpreter (for all platforms), and JIT compiler (for x86-64 and Arm64 targets).
 *
 * @section build Building
 * Note: This works on Windows, Linux, and MacOS, provided the prerequisites are installed.
 * <ul>
 *   <li><code>cmake -S . -B build -DUBPF_ENABLE_TESTS=true</code>
 *   <li><code>cmake --build build --config Debug</code>
 * </ul>

 * @section api uBPF API Reference
 * API docs: [**ubpf.h**](ubpf_8h.html).
 *
*/


