chore: add Contributor License Agreement and roll the BUSL Change Date per release - #195
Closed
IAmBod wants to merge 3 commits into
Closed
chore: add Contributor License Agreement and roll the BUSL Change Date per release#195IAmBod wants to merge 3 commits into
IAmBod wants to merge 3 commits into
Conversation
rss2msg is source-available under BUSL 1.1, and the maintainer offers separate commercial licenses on top of it. Contributions previously came in under "the same terms as the rest of the project", which licenses the contributor's copyright to the project under BUSL — including its own no-hosted-service carve-out. That leaves contributed code unusable in a commercial or hosted offering, and blocks the Apache-2.0 conversion each version is supposed to get on its Change Date. Add an Apache-ICLA-derived CLA granting the maintainer the right to license contributions under the project's current and future terms. Contributors keep their copyright. Signing is automated with contributor-assistant/github-action, which records signatures in a `cla-signatures` branch. Two manual setup steps are required before the check can pass and are documented in the workflow header: a CLA_SIGNATURES_TOKEN secret, and a branch-protection rule requiring the "CLA Assistant" status check on main. Also correct README and CONTRIBUTING to describe the project as source-available rather than implying it is open source: BUSL's field-of-use restriction is incompatible with the OSI definition. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CtBEGzKLXr9iBXibFVKJHx
LICENSE carried a single fixed Change Date (2030-06-01) and nothing in the release process touched it. BUSL applies "separately for each version" and the Change Date "may vary for each version", so a fixed date means every version converts on the same day: a release cut in 2029 would have gotten one year of protection instead of four, and any release after 2030-06-01 would have shipped already converted to Apache-2.0. Add a step to the release procedure that rewrites the Change Date line to four years out — the BUSL ceiling, since it also converts on "the fourth anniversary of the first publicly available distribution of a specific version" — and stages LICENSE alongside CHANGELOG.md. Because the tag captures the tree, each tag and each artifact built from it carries the Change Date belonging to that version. Wired into both the documented manual steps and the cut-release skill that /release drives. The legal text itself is untouched. Also fix a contradiction the new step exposed: releasing.md still told the maintainer to put [skip ci] in the changelog commit, which is what silently skipped the v0.3.0 release. The skill already forbids it. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CtBEGzKLXr9iBXibFVKJHx
Applies the same replacement as chore/contact-email, plus the three files this branch introduces: the Corporate CLA contact in CLA.md, CONTRIBUTING.md, and docs/development/contributing.md. The five shared files (LICENSE, README, SECURITY, CODE_OF_CONDUCT, .goreleaser.yaml) get byte-identical changes on both branches, so the two merge cleanly in either order. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CtBEGzKLXr9iBXibFVKJHx
Owner
Author
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Licensing groundwork before the repository goes public. No Go code changes.
Why
rss2msg is source-available under BUSL 1.1, with separate commercial licenses offered on top. Two gaps in that setup:
1. Contributions were licensed inbound under BUSL itself.
CONTRIBUTING.mdsaid contributions are licensed "under the same terms as the rest of the project" — which licenses the contributor's copyright to the project under BUSL, including its own no-hosted-service carve-out. The project would receive contributed code as a mere licensee, bound by its own restriction. That makes contributed code unusable in a commercial or hosted offering, and blocks the Apache-2.0 conversion each version is meant to get on its Change Date. It is also effectively unfixable after the fact — it means tracking down every past contributor.2. The Change Date was a fixed constant.
LICENSEcarried2030-06-01and nothing in the release process touched it, but BUSL applies "separately for each version" and the Change Date "may vary for each version". Every version would have converted on the same day — a release cut in 2029 would get one year of protection instead of four, and anything released after 2030-06-01 would ship already converted.What changed
CLA —
CLA.md, adapted from the Apache Software Foundation Individual CLA v2.0. Contributors keep their copyright; the grant lets the project offer contributions under BUSL, under separate commercial licenses, and under Apache-2.0 at conversion. Signing is automated by.github/workflows/cla.yml(contributor-assistant/github-action@v2.6.1), which records signatures in acla-signaturesbranch and never checks out PR code.Change Date — the release procedure now rewrites the
Change Date:line to four years out and stagesLICENSEwithCHANGELOG.md. Since the tag captures the tree, each tag and every artifact built from it carries the date belonging to that version. Four years is the ceiling, not a choice: BUSL converts on the Change Date or the fourth anniversary of first distribution, whichever comes first. Wired into bothdocs/development/releasing.mdand thecut-releaseskill that/releasedrives. The legal text itself is untouched.Wording —
README.mdandCONTRIBUTING.mdnow say "source-available" rather than implying open source; BUSL's field-of-use restriction is incompatible with the OSI definition. README also gains a Contributing section linking CONTRIBUTING / CODE_OF_CONDUCT / SECURITY, which it never had.Also fixes a contradiction the Change Date step exposed:
releasing.mdstill instructed adding[skip ci]to the changelog commit, which is what silently skipped the v0.3.0 release. Thecut-releaseskill already forbids it.Setup required before this can gate merges
Both are maintainer actions in repo settings, documented in the workflow header:
reposcope (or fine-grained, Contents: read/write) and add it as theCLA_SIGNATURES_TOKENsecret. The defaultGITHUB_TOKENcannot write the signature file, since that write happens outside the PR's ref.mainrequiring the "CLA Assistant" status check, so an unsigned PR cannot be merged.Note that this workflow does not run on this PR:
pull_request_targetexecutes the copy of the workflow file on the base branch, andmaindoes not have it yet. It first takes effect on pull requests opened after this merges. Until step 1 is done it will run and fail there — but it is not a required check yet, so it blocks nothing.Verification
bash scripts/check-doc-links.sh→OK: all relative doc links resolveactionlint .github/workflows/cla.yml→ clean; YAML parsessedfor the Change Date was run against a copy ofLICENSE: changes exactly one line, preserves column alignment,2030-06-01→2030-07-21task test/task vetare unaffected by this branch🤖 Generated with Claude Code
https://claude.ai/code/session_01CtBEGzKLXr9iBXibFVKJHx