ADR 0003: License — Apache 2.0

Field Value
Status Accepted
Date 2026-05-12
Deciders Project maintainers
Supersedes
Superseded by
Related ADRs 0001 (Runtime + language), 0004 (Distribution)

Summary

aidokit and every package published under the @aidokit/* scope are licensed under Apache License, Version 2.0. The choice is deliberate: it is the most-permissive licence that carries an explicit patent grant, is broadly compatible with the surrounding ecosystem, and is recognised by enterprise legal review without negotiation. The LICENSE file at the repository root is drafted but explicitly not legally reviewed pre-v1.0; reviewer sign-off is a v1.0 GA exit criterion.


Context

aidokit is an open-source CLI intended to grow an ecosystem of third-party adapters and stack packs. The licence choice affects:

The surrounding ecosystem context:

This ADR records the decision and the reasoning so a future contributor can answer "why not MIT?" without re-litigating it.


Decision

1. The licence is Apache License, Version 2.0

The full text of the licence is placed at the repository root as LICENSE. The SPDX identifier is Apache-2.0. Every published package.json MUST set:

{
  "license": "Apache-2.0"
}

2. The licence applies to every @aidokit/* package and to the unscoped aidokit CLI

All packages under this monorepo inherit the root licence. There is no per-package licence override. Third-party adapters and stack packs (post-v1.0 SDK era) MAY choose their own licence; the @aidokit/core Apache-2.0 grant lets them.

3. A NOTICE file is maintained at the repository root

Apache 2.0 §4(d) requires preservation of NOTICE content from included third-party works. A minimal NOTICE file lists:

The NOTICE file is not for general acknowledgements — those live in README.md. It is a legal artefact tied to the licence.

4. No per-file licence header is required

Apache 2.0 §4(a) requires distributors to retain notices, not that authors prefix every file. We do not require a top-of-file licence comment in source files. The repo-level LICENSE and NOTICE files plus the package.json license field satisfy the requirements.

This decision can be revisited if a downstream legal review demands per-file headers; until then, we optimise for diff readability and onboarding speed.

5. Contributor licence agreement (CLA) is not required at v0.1

Contributors implicitly licence their contributions under the project licence by submitting a PR (the GitHub Terms of Service "inbound = outbound" rule). A formal CLA or DCO requirement is deferred to v1.0; the trade-off (legal clarity vs. contribution friction) will be revisited then.

6. The LICENSE file is drafted but not legally reviewed at v0.1

The text is the canonical Apache 2.0 text from the Apache Software Foundation. The copyright line names the project. Legal review by counsel is a v1.0 GA exit criterion (per .docs/ROADMAP.md). Until reviewed, the README and the LICENSE file MUST both state this status.

7. SECURITY.md and trademark policy are out of scope here

SECURITY.md (vulnerability reporting) and trademark policy (use of the aidokit name) are separate documents on the v1.0 critical path. They reference but do not modify this licence decision.


Consequences

Positive

Negative

Neutral


Alternatives considered

Alternative 1: MIT

The simplest permissive licence: short, well-understood, ubiquitous in the Node ecosystem.

Pros

Cons

Reason rejected: the missing patent grant is the deciding factor. We expect contributions from corporate engineers whose employers hold patents; a project that grows into an ecosystem layer should make the patent posture explicit and reciprocal.

Alternative 2: BSD 3-Clause

Similar permissive shape to MIT with an added "no endorsement" clause.

Pros

Cons

Reason rejected: same patent-grant gap as MIT, without the simplicity advantage.

Alternative 3: Dual MIT / Apache 2.0 (Rust-style)

Common in the Rust ecosystem: users pick one of the two licences.

Pros

Cons

Reason rejected: complexity without commensurate benefit. If the Apache 2.0 patent grant is valuable, we want everyone to receive it.

Alternative 4: MPL 2.0 (Mozilla Public License)

File-level copyleft: modifications to MPL-licensed files must remain MPL, but the rest of the work can be any licence.

Pros

Cons

Reason rejected: the file-level question creates ambiguity about what users own when aidokit init emits files into their project. Apache 2.0 has no such ambiguity.

Alternative 5: GPL v3 / AGPL v3

Strong copyleft: derivatives must also be GPL/AGPL.

Pros

Cons

Reason rejected: aidokit's strategy depends on third parties building adapters and stack packs, including commercial ones. Copyleft kills that motion.

Alternative 6: Unlicense / 0BSD / public domain

Maximally permissive: no restrictions, no requirements.

Pros

Cons

Reason rejected: we want some protection (patent grant, notice retention, trademark clause); public-domain-style licences provide none.


Implementation notes

Files at the repository root

package.json fields

Every published package MUST include:

{
  "license": "Apache-2.0"
}

Optional but recommended:

{
  "author": "AIDO maintainers",
  "repository": { "type": "git", "url": "https://github.com/<org>/<repo>" }
}

The copyright line in LICENSE reads:

Copyright {year-of-first-release} {project owner or maintainer entity}

The exact owner string is a v1.0 decision (individual maintainer vs. a created entity vs. a foundation). For the alpha, the maintainer's name is acceptable.

Third-party licence tracking


Validation

This decision is validated when:


References

Internal

External