Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
112 changes: 112 additions & 0 deletions research/ARCHIVAL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
# Pilot v1 archival and DOI policy

This document defines the release boundary for the first citable BPFCompat
research archive. It is an engineering reproducibility policy, not legal advice.

## Current canonical evidence

- canonical pilot workflow run: `35393833464`
- canonical source commit: `5de550e5cc8c659872a90fc262eb0250c229bf23`
- canonical Actions artifact: `10566859006`
- canonical artifact SHA-256:
`7aae7b5c099739ef0bcad74fbb3731aaafb1177f1ba128020729b08803610910`
- planned/observed executions: **70/70**
- repository dataset: `research/data/v1/`
- deterministic analysis: `research/analysis/v1/`
- repeat-run protocol: merged in PR #152; the manual 21-attempt execution is
still required before the research archive is frozen.

## Archive layers

The scholarly archive should be separable into three layers.

### 1. Repository snapshot

Include the exact tagged source tree used for the study, including:

- research protocol and corpus metadata;
- `research/data/v1/`;
- `research/analysis/v1/`;
- repeat-run results once collected and committed;
- all research scripts required to regenerate normalized analysis;
- `CITATION.cff`, license files, provenance, checksums, and this archival policy.

### 2. Canonical execution evidence

Preserve the raw evidence from the canonical successful workflow, including
raw BPFCompat reports and execution provenance. The archive must bind every
archived file to checksums already recorded in the repository dataset or to an
additional archival manifest generated before release.

The finite-retention GitHub Actions artifact is staging evidence, not the
durable scholarly archive.

### 3. Materialized study inputs

Do **not** blindly publish the complete materialization bundle.

The DOI package may include BPFCompat-owned binaries/objects and redistributable
third-party-derived material only when the required notices are packaged with
it. Third-party compiled loader binaries with unresolved transitive notice
requirements must be represented by:

- exact SHA-256;
- exact source revision;
- deterministic build recipe;
- validation-contract identity;
- upstream license/notice material and retained archive paths.

This keeps the study reproducible without making an unsupported redistribution
claim.

For the final machine-readable archival manifest, plain `include` is reserved
for BPFCompat-owned provenance. Third-party-derived rows must use
`include-with-notice` or `exclude-rebuildable`; the validator must reject a
third-party-derived row marked plain `include`. Every
`include-with-notice` row must name retained license/notice paths that exist in
the archive.

## v1 inclusion policy

| Item | DOI archive policy | Reason |
| --- | --- | --- |
| BPFCompat source, manifests, scripts, dataset, analysis | Include | Apache-2.0 repository material |
| BPFCompat v0.3.7 CLI and static validator | Include with BPFCompat license | Published BPFCompat release assets |
| BPFCompat controlled-probe `.bpf.o` files | Include with BPFCompat license | Built from BPFCompat-owned Apache-2.0 sources |
| Cilium-derived tracepoint source/object | Include only with pinned Cilium MIT notice and modification provenance | Upstream repository is MIT; the BPF program's `Dual MIT/GPL` runtime license marker is not a substitute for source-license attribution |
| custom cilium/ebpf Go loader binary | Exclude from v1 DOI bundle unless all binary-distribution notices are packaged | Binary includes external Go/cilium dependencies; reproducibility is preserved by source revision, dependency version, hash, and rebuild recipe |
| Falco `scap-open` binary | Exclude from v1 DOI bundle unless a complete transitive dependency/notice audit is finished | Built with `USE_BUNDLED_DEPS=ON`; Falco Apache-2.0 license and NOTICES are necessary but do not by themselves establish every bundled dependency obligation |
| VM/base images | Do not redistribute in the DOI bundle | Preserve exact image identities, source locations, and observed environment evidence instead |

## Release gates

A research-tagged release and DOI should not be created until all of the
following are true:

1. the manual repeat-run stability sample has executed successfully and its
normalized results/provenance are committed;
2. final paper tables/figures are generated deterministically from committed
normalized data;
3. the archival file manifest and SHA-256 list are generated and verified;
4. every included third-party-derived file has the required license/notice
material, otherwise it is excluded and represented by provenance/hash;
5. the release tag resolves to the exact source/data state used by the
manuscript;
6. the DOI is minted only after the archive is immutable enough to cite.

After the DOI exists, add it to `CITATION.cff`, the research README, and the
repository README. Do not add a placeholder DOI.

## External-reference claims

Academic visibility claims must remain evidence-backed:

- **referenced by**: an independently maintained university/lab/course resource
links to BPFCompat;
- **cited by**: a scholarly work includes a formal citation;
- **used by**: there is public evidence of actual use;
- **endorsed by**: use only when the institution or named person explicitly
provides an endorsement.

A university resource-page link must never be described as approval,
certification, or endorsement.
123 changes: 123 additions & 0 deletions research/LICENSE-REVIEW-V1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
# Pilot v1 license and redistribution review

Status: **partially cleared for archival; third-party compiled loaders remain
excluded by default.**

This file records the engineering redistribution review for the frozen pilot v1
study inputs. It is not legal advice.

## Frozen external inputs

### Cilium-derived tracepoint

Frozen upstream:

- repository: `cilium/ebpf`
- revision: `f035193453c32429bc2f6b6d623c4dfa200ad48f`
- upstream path: `examples/tracepoint_in_c/tracepoint.c`
- local derivative source is recorded in `research/corpus/v1/artifacts.yaml`
- materialized object SHA-256:
`16e1ce980c2c5bf6e839dac79e1710b4d185cbbca649e1e5421e1ab1fe7e5cc8`

The pinned upstream repository LICENSE is the MIT License. The source embeds
`Dual MIT/GPL` in the eBPF program's kernel license section; that runtime marker
must not be treated as the repository's copyright-license notice.

**Archival decision:** source/object redistribution is acceptable only when the
pinned Cilium MIT license/copyright notice and local modification provenance are
retained with the archived derivative. The existing materializer already copies
the pinned Cilium LICENSE into the generated bundle.

### cilium/ebpf project-loader binary

Frozen loader identity:

- loader source repository: `Kernel-Guard/bpfcompat`
- loader source revision: `b8ef57f4e02ebecee4649f7657ea8eea6af46ca9`
- loader source path: `examples/ebpf-go-loader`
- dependency: `github.com/cilium/ebpf@v0.22.0`
- binary SHA-256:
`2e0517a0a068cf169ebf6a562cd2354ff9f18da708de7e54af52027a893598a4`
- deterministic build flags include `-trimpath` and `-buildvcs=false`
- retained upstream license path in the materialized bundle:
`licenses/Cilium-ebpf-LICENSE`
- retained upstream notice paths: none (`[]`); no separate Cilium notice file is
relied upon for this excluded binary

The loader source revision/path, `go.mod`/`go.sum` blob identities, dependency
version, and build command are frozen in
`research/corpus/v1/validation-contracts.yaml`.

The binary is generated by the BPFCompat study materializer but incorporates
external software dependencies. The bundle currently preserves the Cilium MIT
license, but the v1 archive has not yet demonstrated a complete
binary-distribution notice set for every incorporated dependency/toolchain.

**Archival decision:** exclude the compiled loader from the DOI archive by
default. Preserve its exact hash, dependency version, frozen source/build
metadata, retained license path, and validation-contract identity so it can be
reproduced.

### Falco `scap-open`

Frozen upstream:

- repository: `falcosecurity/libs`
- revision: `1800b330ce92b532456178abfcbfba3dd157f974`
- materialized binary SHA-256:
`736c307379603a8320434217440e346ce03260d31a5e7d58326f5526e2c2f2cd`
- retained license path: `licenses/Falco-libs-LICENSE`
- retained notice path: `licenses/Falco-libs-NOTICES`

The pinned Falco repository is Apache-2.0 and provides a `NOTICES` file. The
materializer already copies both `LICENSE` and `NOTICES`. The loader is built
with `USE_BUNDLED_DEPS=ON`, so the resulting binary can incorporate additional
third-party components whose redistribution obligations are not established
merely by preserving the top-level Falco files.

**Archival decision:** exclude the compiled `scap-open` binary from the DOI
archive unless a complete transitive dependency and notice audit is performed.
Preserve its exact hash, pinned source revision, deterministic build recipe,
Falco LICENSE/NOTICES paths, and validation-contract identity.

## BPFCompat-owned inputs

The controlled probes, manifests, BPFCompat v0.3.7 CLI, static validator,
research scripts, and repository dataset are covered by the repository's
Apache-2.0 license. Preserve the repository LICENSE in any standalone research
archive containing them.

## VM and vendor images

The study records exact image identities and observed environments. VM/base
images are not part of the default DOI redistribution set. The archive should
retain identities, provenance, requested kernel family, observed kernel release,
and acquisition/rebuild instructions instead.

## Required archival manifest

Before a DOI deposit, generate a machine-readable archive manifest with one row
per file containing at least:

- relative path;
- SHA-256;
- provenance class;
- owner/upstream project;
- source revision;
- redistribution status: `include`, `exclude-rebuildable`, or
`include-with-notice`;
- associated license/notice paths.

Status semantics are fail-closed:

- plain `include` is valid only for `bpfcompat-owned` provenance;
- every third-party-derived file must be either `include-with-notice` or
`exclude-rebuildable`;
- a third-party-derived row marked plain `include` is invalid;
- every `include-with-notice` row must name the applicable retained
license/notice path(s), and every named path must exist in the archive;
- `exclude-rebuildable` rows retain identity/provenance/build metadata but the
excluded binary/object itself must not be present in the DOI payload.

The archive generator/validator must enforce these rules and fail closed on any
violation.
18 changes: 18 additions & 0 deletions research/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,30 @@ Repository snapshot and integrity metadata:
raw-report checksums, and dataset manifest;
- [`analysis/v1/`](analysis/v1/) — deterministic descriptive RQ1–RQ4 tables
and machine-readable analysis summary;
- [`repeat/v1/`](repeat/v1/) — merged post-collection stability protocol; the
manual 21-attempt execution is still pending;
- `scripts/research/analyze-study-v1.py` — analysis generator;
- `scripts/research/test-analysis-v1.sh` — checksum and reproduction gate.

The full workflow artifact remains staging evidence for later DOI archival; its
artifact identity is recorded in the dataset manifest.

## Publication readiness

Publication-facing material is kept explicit and evidence-bounded:

- [ARCHIVAL.md](ARCHIVAL.md) — DOI/research-release boundary and archive gates;
- [LICENSE-REVIEW-V1.md](LICENSE-REVIEW-V1.md) — v1 redistribution review and
third-party compiled-loader policy;
- [paper/PREPRINT.md](paper/PREPRINT.md) — working manuscript scaffold whose
numerical claims are constrained to generated v1 analysis;
- [ROADMAP.md](ROADMAP.md) — remaining repeat-run, figure, archival, DOI, and
external academic-use gates.

No university, lab, course, or paper should be listed as an academic reference
until a public independent source can be verified. A resource-page link is a
reference, not approval, certification, or endorsement.

## Study objective

Measure how compiled eBPF artifacts and their real loader paths behave across
Expand Down
18 changes: 14 additions & 4 deletions research/ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,11 @@
identities are captured before execution.
- [x] Freeze a versioned logical kernel-profile selection; exact environment
identities are captured after boot as required by the corpus schema.
- [ ] Complete license/redistribution review for every materialized binary and
archived external artifact.
- [x] Record a v1 archival/redistribution policy and default exclusion rule for
third-party compiled loader binaries whose transitive notice set is not
fully established.
- [ ] Complete any transitive dependency/notice audit required for a
third-party compiled binary that is ultimately included in the DOI bundle.
- [x] Capture immutable generated-artifact and loader-binary identities for the
frozen v1 selection. The identity lock is committed and enforced by CI.
OCI identities remain deferred with Inspektor Gadget rather than being
Expand All @@ -28,14 +31,21 @@
- [x] Implement a versioned study runner and normalizer for captured BPFCompat reports.
- [x] Generate pilot v1 descriptive RQ1–RQ4 tables from normalized data.
- [ ] Generate every final paper table and figure from normalized data.
- [ ] Add repeat-run checks for a representative sample.
- [x] Define a bounded representative repeat-run protocol (PR #152).
- [ ] Execute the 21-attempt repeat-run workflow from `main`, archive its
provenance/results, and evaluate environment drift separately from
same-environment verdict instability.
- [x] Document the v1 execution boundary, KVM/VM prerequisites, exact-environment identity, and collection completeness rules.
- [x] Publish raw/processed dataset checksums and bind the repository snapshot to
the canonical successful workflow artifact.
- [x] Add a preprint working draft with claims constrained to generated v1 data.

## Phase 4 — Archival

- [ ] Create a research-tagged release after the corpus and protocol are frozen.
- [x] Define the pilot v1 archival/DOI policy and third-party binary boundary.
- [ ] Generate and verify the final machine-readable archival manifest.
- [ ] Create a research-tagged release after repeat stability and final figures
are frozen.
- [ ] Archive the release/dataset in a DOI-granting repository such as Zenodo.
- [ ] Add the DOI to `CITATION.cff` and the README only after it exists.
- [ ] Preserve exact code/data versions used for any manuscript.
Expand Down
Loading
Loading