Skip to content

docs(adr): propose a licensing standard by provenance (ADR-0017) - #522

Merged
ss-o merged 4 commits into
mainfrom
code/licensing-standard-adr
Aug 18, 2026
Merged

docs(adr): propose a licensing standard by provenance (ADR-0017)#522
ss-o merged 4 commits into
mainfrom
code/licensing-standard-adr

Conversation

@ss-o

@ss-o ss-o commented Aug 17, 2026

Copy link
Copy Markdown
Member

Draft for maintainer review. Status is PROPOSED, Deciders: TBD. Per runbooks/adr.md only a maintainer flips an ADR to ACCEPTED, and this ADR relicenses nothing by itself.

Why

There is no written licensing policy. Nothing in decisions/, runbooks/, AGENTS.md, or PATTERNS.md selects a license, and runbooks/new-repository.md bootstraps a repository without choosing one. The intent that GPL-3 is the standard exists only as unratified preference, which is exactly the failure ADR-0013 opens with: a requirement that is real in intent and enforced by nothing.

A survey of eleven repositories on 2026-08-17 found six on MIT against that intent. Two can never comply: zunit is Copyright (c) 2016 James Dinsdale and zsh is Copyright (c) 2019 zsh-packages. A blanket rule marks them permanently non-compliant, which is how a standard stops being taken seriously.

What it proposes

Three classes by provenance and consumption rather than one value:

  • L1 organization-authored, not loaded into a user's shell: GPL-3 required.
  • L2 organization-authored, sourced into a user's shell: permissive by deliberate choice, because the derivative-work boundary for sourced shell code is unsettled and the ecosystem depends on third parties loading it alongside their own.
  • L3 third-party forks: upstream license retained, never relicensed.

Under this, zi stays MIT on purpose rather than by drift, zunit and zsh stop being violations, and only zd and zsh-lint are proposed for actual change.

Three open questions, recorded not resolved

  1. z-a-meta-plugins and zsh-fancy-completions are L2 by consumption but already GPL-3. Accept as documented exceptions, or reclassify plugins as L1 and move zi and zsh-eza to GPL-3 instead.
  2. src is a compiled module, loaded like L2 but not sourced. It needs an explicit class.
  3. zd and zsh-lint are the only two proposed for relicensing.

Note that relicensing is prospective only: MIT grants already made cannot be revoked, so published releases stay forkable under the previous license regardless.

.github/instruction-surfaces.json gains the matching decision-0017 surface; scripts/validate-agent-policy.py passes.

🤖 Generated with Claude Code

ss-o added 3 commits August 18, 2026 00:08
The organization has no written licensing policy. Nothing in decisions/,
runbooks/, AGENTS.md, or PATTERNS.md selects a license, and
new-repository.md bootstraps a repository without choosing one. The intent
that GPL-3 is the standard exists only as unratified preference, which is
the failure mode ADR-0013 opens with.

A survey of eleven repositories on 2026-08-17 found six on MIT against that
intent. Two of them carry third-party copyright and can never comply: zunit
is Copyright (c) 2016 James Dinsdale and zsh is Copyright (c) 2019
zsh-packages. A blanket rule marks them permanently non-compliant, which
trains maintainers to ignore the finding.

Propose three classes by provenance and consumption rather than one value:
organization-authored code not loaded into a user shell requires GPL-3,
organization-authored code sourced into a user shell is permissive by
deliberate choice, and third-party forks retain the upstream license.

Status is PROPOSED with Deciders TBD. Only a maintainer accepts, per
runbooks/adr.md. Three open assignment questions are recorded rather than
resolved, and the ADR relicenses nothing by itself.
Step 2 said only to use the organization-approved license for the artifact,
pointing at a policy that does not exist. A repository therefore got whatever
license the bootstrapping session happened to create, which is how six of
eleven repositories ended up disagreeing with an intent nobody had written
down.

Replace it with the ADR-0017 selection table, a requirement to record the
choice on the owning issue, and the two facts that make the decision hard to
revisit later: a fork is never relicensed because the organization does not
hold the copyright, and a published license grant cannot be revoked.
src is L1 and stays GPL-3. A compiled module is dlopened as a binary rather
than combined as source with a user's script, so the ambiguity that justifies
permissive L2 does not arise. Sharpen the L2 definition accordingly: the
discriminator is source combination, not merely running in the shell process,
which also removes shell modules from the L2 description.

zd and zsh-lint relicense from MIT to GPL-3. Both are organization-authored,
neither is sourced into a user shell, MIT permits sublicensing so no
contributor consent is needed, and prior releases stay MIT.

One question remains and blocks acceptance: whether z-a-meta-plugins and
zsh-fancy-completions stay GPL-3 as documented L2 exceptions, or plugins are
reclassified L1 and zi and zsh-eza move to GPL-3 instead.
z-a-meta-plugins and zsh-fancy-completions stay GPL-3 as documented L2
exceptions. L2 sets a default, not a prohibition: an existing copyleft license
inside L2 is preserved rather than reversed, because GPL-3 toward permissive is
the direction that genuinely requires every contributor's consent, unlike MIT
toward GPL-3 which MIT's own sublicense grant already permits. New L2
repositories still start permissive.

That was the last item blocking acceptance. Status ACCEPTED, Deciders ss-o.
@ss-o
ss-o marked this pull request as ready for review August 17, 2026 23:34
@ss-o
ss-o requested a review from a team as a code owner August 17, 2026 23:34
@ss-o
ss-o merged commit 2e0d485 into main Aug 18, 2026
7 checks passed
@ss-o
ss-o deleted the code/licensing-standard-adr branch August 19, 2026 00:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant