Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

ADR-0012: License: MIT OR Apache-2.0

  • Status: Accepted
  • Date: 2026-06-10

Context

License choice is permanent in practice (relicensing requires every contributor’s consent). Goals: maximum adoption (individuals, companies, distro packagers), zero friction for contributors, patent safety, and compatibility with the Rust ecosystem we depend on and hope to attract contributors from.

Decision

Dual-license under MIT OR Apache-2.0 (the Rust ecosystem convention). Both license texts ship in the repo (LICENSE-MIT, LICENSE-APACHE); Cargo.toml declares license = "MIT OR Apache-2.0". Contributions are accepted under the same terms (inbound = outbound, stated in CONTRIBUTING); no CLA.

Dependency hygiene is enforced mechanically: cargo-deny (deny.toml) allows only permissive licenses (+ MPL-2.0 weak copyleft, compatible for a binary) and fails CI otherwise.

Consequences

  • Compatible with effectively everything; packagers and corporate users need no review cycle.
  • Apache-2.0 contributes an explicit patent grant; MIT keeps the maximum-simplicity option open. Users pick.
  • No CLA keeps the contribution funnel frictionless; the cost is that relicensing later is practically impossible — we accept that permanence.
  • Cost: permissive licensing allows closed-source forks. Accepted: for a developer tool, distribution and trust are the moat, not the license.

Alternatives considered

  • MIT only — fine, but drops the patent grant for no benefit.
  • GPL-3.0 — would exclude some corporate users and complicate the contributor funnel; the protection it buys is not where this project’s risk is.
  • BSL / fair-source — poison for a tool whose adoption depends on distro packaging and being recommended in dotfiles threads.