DRAFT: Reform copyright headers → single canonical header + NOTICE (for discussion)#1863
Draft
bmander wants to merge 1 commit into
Draft
DRAFT: Reform copyright headers → single canonical header + NOTICE (for discussion)#1863bmander wants to merge 1 commit into
bmander wants to merge 1 commit into
Conversation
…n tooling Reform the project's copyright headers toward a single canonical Apache-2.0 header per file (the ASF / Kubernetes / Linux-Foundation convention: "Copyright The OneBusAway Authors.", no per-file names or years), with historical attribution consolidated verbatim in a top-level NOTICE file. This is deliberately a DRAFT to open project discussion, not a finished cutover. What's here: - NOTICE: consolidated holder list plus a verbatim appendix of all 57 distinct historical copyright notices, so no attribution is lost. Three AOSP-derived files are called out as third-party notices that stay in-file. - tools/copyright-reform/apply-headers.py: idempotent migrator with a CI --check mode. Migration is gated per copyright holder via an EXCLUDED_HOLDERS list; a file is only restamped once every holder it names has authorized relocation (Apache-2.0 s4 / ASF source-header policy permit a holder to move their own notice to NOTICE). Three AOSP files are path-exempt. - tools/copyright-reform/CONSENT-REQUEST.md + consents/: the holder outreach template and the durable sign-off audit trail. This commit runs the migration once with every holder still excluded, which touches only the 21 currently header-less source files (they name no holder, so no consent is implicated) -- purely additive. The ~520 OTSF-only files and all externally-held files remain on their original headers, pending the discussion and the respective authorizations. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Important Review skippedDraft detected. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Contributor
Author
|
💬 Discussion for this proposal is happening in #1864 — please comment there rather than here. |
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 join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Purpose — open for discussion, not ready to merge
This is a draft to start a project conversation about modernizing our copyright headers. It lands the tooling, a
NOTICEfile, and a small safe first slice of the migration, but deliberately does not cut over the whole tree. Please weigh in on the approach before we proceed.The problem
Over ~15 years the per-file headers have fragmented into 40+ inconsistent variants across 624 files — differing years, name spellings, and holder lists (Paul Watts, USF/Sean Barbeau, Microsoft, Brian Ferris, Cambridge Systematics, OTSF, AOSP, …). They're a maintenance burden and frequently inaccurate.
Proposed direction
Adopt the convention used by the Apache Software Foundation, Kubernetes, and recommended by the Linux Foundation: one identical Apache-2.0 header on every file, naming no individual holder and no year —
— with all historical copyright notices preserved verbatim in a top-level
NOTICEfile (carried forward by redistributors under Apache-2.0 §4(d)).Legal basis for relocating notices
Apache-2.0 §4 and the ASF source-header policy both let a copyright owner move their own notice into
NOTICE. So relocation is gated on each holder's authorization — it does not transfer or waive any copyright. Code we did not receive from its owner (the three AOSP-derived files) keeps its notice in-file, untouched, per that same policy.What's in this PR
NOTICE— consolidated holder list + a verbatim appendix of all 57 distinct historical notices (nothing lost), and the AOSP third-party carve-out.tools/copyright-reform/apply-headers.py— idempotent migrator + CI--checkmode. Migration is gated per holder via anEXCLUDED_HOLDERSlist: a file is restamped only once every holder it names has signed off. Three AOSP files are path-exempt.tools/copyright-reform/CONSENT-REQUEST.md+consents/— holder-outreach template and durable sign-off audit trail.Migration actually applied here
Run once with every holder still excluded, so it touches only the 21 currently header-less files (they name no holder — no consent implicated). Purely additive: every diff is a header prepend, zero deletions.
Rollout plan (gradual, after discussion)
Open Transit Software Foundation(self-authorizing steward)consents/, entry removed, re-runCurrent per-holder blocked counts (
apply-headers.py --dry-run): OTSF 520, USF 88, Barbeau 65, Watts 50, Microsoft 25, then small tails.Questions for the project
apply-headers.py --checkinto CI now, or once more of the tree is migrated?🤖 Generated with Claude Code