0011 — The attestation format is Apache-2.0; the engine stays GPL¶
Status: Accepted · Date: 2026-09-22
Context¶
scout's position depends on other software consuming what it produces:
gateways gating on an attestation, registries displaying it, CI systems
verifying it. The engine is GPL-3.0-only, and none of those will embed GPL
code or implement a format whose only definition is GPL source. The plan's
answer was a separate scout-reporting repository under Apache-2.0, and
that repository was blocked on this decision.
Decision¶
The attestation predicate's schema and the scoring rubric are licensed
Apache-2.0. They live in spec/, are generated from the Go that
implements them by scripts/specgen, and CI fails when either drifts from
the source:
spec/attestation/mcp-evaluation-v1.schema.json— the in-toto Statement and themcp-evaluation/v1predicate, as JSON Schema 2020-12, derived from theinternal/attesttypes. A test validates a statement scout actually writes against it, and checks that tampered statements fail.spec/rubric/rubric-v1.json— weights, deductions, grade bands and the scoring rules, read from the same variablesComputeScoreuses.spec/README.md— the format described for an implementer.
The format is Apache-2.0, not CC-BY, because it is consumed as code — a schema compiled into a validator — and Apache-2.0 carries the patent grant that implementers and their legal teams look for.
The engine stays GPL-3.0-only, including the Go that produces and
verifies statements, for now. The copyright in every relicensed file is
held by the one maintainer, so no contributor consent was needed; that
stops being true with the first outside contribution to internal/attest,
which is a reason to extract soon rather than late.
What this unblocks, and what it does not¶
It unblocks implementing the format elsewhere: a gateway can write its own verifier against the schema and the rubric today.
It does not yet unblock embedding scout's verifier. internal/attest
builds statements from internal/probe and internal/report, which are
GPL, so the verifier cannot be lifted out as it stands. The next step is to
split the statement types and Validate into a package that imports only
the standard library, then license that package Apache-2.0 and move it with
the schema into scout-reporting. That is a structure change and is done
on its own, not coupled to this decision.
Signing (W5) and the gateway pull requests (W8) are no longer blocked on a licence question, only on that extraction.
Update — 2026-09-22: the verifier is extracted¶
The next step above is done. The statement types, Parse, Validate,
Covers, VerdictFor and a SubjectFor helper now live in the public
package github.com/sebastienrousseau/scout/attestation, licensed
Apache-2.0 and importing only the standard library, with its own tests and
fixture under the same licence. internal/attest keeps the builder that
reads scout's report types and re-exports the rest, and the published
schema is unchanged. Moving the package to scout-reporting is now a copy.
What would make this wrong¶
A format adopted under a different licence by the specification's own process — for example if the MCP project standardises an evaluation predicate. Then the right move is to align with it, and this record is superseded.