Align policies with the standard and record their provenance
This commit is contained in:
@@ -1,135 +1,227 @@
|
||||
# Open Source Licensing And Attribution Policy
|
||||
|
||||
**Base Policy Version:** 1.2
|
||||
**Base Policy Version:** 1.8
|
||||
|
||||
**Last Updated:** 2026-09-26
|
||||
**Last Updated**: 2026-09-27
|
||||
|
||||
Adapted from the standard policy; see [provenance and licensing](../oss/attribution.md#standard-repository-policies).
|
||||
**Upstream Source:** [oss.md](https://gitea.maximumdirect.net/eric/policy/src/commit/d84a38ebab26f048cafbe59a2246700c35d29843/docs/policy/oss.md)
|
||||
|
||||
## Purpose And Scope
|
||||
|
||||
This policy defines Promptkit's project licensing conventions and House Format
|
||||
for upstream attribution. It covers relevant incorporated or distributed
|
||||
components, including transitive dependencies and copied code, documentation,
|
||||
or assets. Treatment follows the component's terms and actual use, not merely
|
||||
its direct-dependency status or common ownership. Development tools do not
|
||||
automatically require attribution.
|
||||
This policy defines project licensing conventions and a repeatable House Format
|
||||
for upstream attribution and license notices. It covers the project's own code
|
||||
and upstream components incorporated into or distributed with the application
|
||||
or library, including relevant transitive dependencies and copied code,
|
||||
documentation, or assets.
|
||||
Determine treatment from the component's terms and actual use.
|
||||
|
||||
Promptkit is a Go library with an author-selected LGPL-3.0-or-later grant in
|
||||
[COPYRIGHT](../../COPYRIGHT). Its public source repository is
|
||||
`https://gitea.maximumdirect.net/eric/promptkit`; it publishes source-only Go
|
||||
module releases through annotated tags, not binaries or separate hosted release
|
||||
pages. The [release procedure](../release.md) owns publication mechanics.
|
||||
Consulting development guidance or using tooling alone does not require an
|
||||
attribution entry. Copying or adapting documentation for inclusion in the
|
||||
repository is different: preserve its applicable attribution and license terms.
|
||||
A material's role as development guidance does not exempt copied documents.
|
||||
Apply any express permissions for attribution-free reuse of example formatting.
|
||||
|
||||
The House Format does not establish license compatibility or resolve every
|
||||
obligation arising from use or distribution. Adoption does not relicense
|
||||
existing material or override third-party terms.
|
||||
The baseline is a publicly available source repository with releases published
|
||||
alongside it. The format is independent of language, forge, and build system.
|
||||
It does not require attribution for every development tool, establish license
|
||||
compatibility, or resolve every obligation arising from use or distribution.
|
||||
|
||||
## Canonical Locations
|
||||
|
||||
The [documentation policy](documentation.md) assigns ownership:
|
||||
|
||||
- `COPYRIGHT`: project name, holders and years, SPDX expression, grant,
|
||||
warranty disclaimer, and statement about third-party material.
|
||||
- `LICENSE`: complete, unmodified project license texts, including incorporated
|
||||
companion text. Promptkit includes LGPLv3 followed by GPLv3.
|
||||
- `COPYRIGHT`: project name, copyright statements, SPDX expression, grant,
|
||||
warranty disclaimer, and third-party statement.
|
||||
- `LICENSE` contains the complete, unmodified project license text, including
|
||||
incorporated companion text. Dependency attribution does not relicense the project.
|
||||
- `docs/oss/attribution.md`: canonical component entries.
|
||||
- `docs/oss/licenses/`: complete, verbatim standard dependency texts, including
|
||||
companions where applicable. Shared texts can serve multiple entries.
|
||||
- `docs/oss/licenses/`: complete, verbatim standard and applicable companion texts.
|
||||
|
||||
Keep explanations and project-specific notices outside standard texts. Preserve
|
||||
distinct versions and exceptions, using recognizable filenames.
|
||||
Use recognizable license filenames, such as `Apache-2.0.txt` or `LGPL-3.0.txt`.
|
||||
A shared standard text may serve multiple entries. Keep explanations outside
|
||||
license texts and preserve distinct versions and exceptions.
|
||||
|
||||
## Upstream Reference Examples
|
||||
|
||||
Use the commit-pinned upstream examples to create actual project notices.
|
||||
Retain their links and keep the example collection upstream; keep applicable
|
||||
license texts locally as specified above.
|
||||
|
||||
## Project Licensing
|
||||
|
||||
The house defaults for new projects are GPL-3.0-or-later for applications and
|
||||
LGPL-3.0-or-later for libraries. An author's explicit choice takes precedence
|
||||
without an exception rationale, extra approval, or compensating controls.
|
||||
Promptkit retains its selected library grant; do not infer different licenses
|
||||
for individual packages or relicense existing code by adopting this policy.
|
||||
Unless the author specifies otherwise, use **GPL version 3 or later**
|
||||
(`GPL-3.0-or-later`) for applications and **LGPL version 3 or later**
|
||||
(`LGPL-3.0-or-later`) for libraries. An author's explicit choice takes precedence:
|
||||
for example, a one-off script may use MIT. Such a choice requires no exception
|
||||
rationale, additional approval, or compensating controls under this policy.
|
||||
|
||||
Keep COPYRIGHT, LICENSE, SPDX expressions, and README descriptions consistent.
|
||||
Use accurate holders and years; do not assume the maintainer owns every
|
||||
contribution or advance years automatically. Update grant, disclaimer, and text
|
||||
references together when the author deliberately changes licensing. Preserve
|
||||
third-party terms and required existing notices. No blanket per-file header
|
||||
requirement is introduced.
|
||||
These defaults guide new license selection. Adopting this policy does not
|
||||
relicense existing code or override third-party terms. Preserve an existing
|
||||
license unless the author deliberately changes it. For mixed-purpose projects,
|
||||
follow the author's selected scope rather than inferring different licenses for
|
||||
individual packages.
|
||||
|
||||
Use the upstream [application COPYRIGHT example](https://gitea.maximumdirect.net/eric/policy/src/commit/a469273adda336625f96b9d769ea27b33999f146/examples/licensing/application/COPYRIGHT)
|
||||
or [library COPYRIGHT example](https://gitea.maximumdirect.net/eric/policy/src/commit/a469273adda336625f96b9d769ea27b33999f146/examples/licensing/library/COPYRIGHT)
|
||||
to create the project’s root `COPYRIGHT` file.
|
||||
Use verified project names, contribution years, and copyright holders.
|
||||
For another selected license, adapt the grant, SPDX expression, disclaimer, and
|
||||
text references together to reflect the author's selected grant.
|
||||
|
||||
For GPLv3 projects, copy the complete GPLv3 text into `LICENSE`. For LGPLv3
|
||||
projects, place the complete LGPLv3 text followed by the complete GPLv3 text in
|
||||
`LICENSE`; the LGPL incorporates the GPL terms. Keep the texts unmodified and
|
||||
place project-specific statements in `COPYRIGHT`. For the default grants, the
|
||||
grant and SPDX expression in `COPYRIGHT` must expressly identify `or-later`;
|
||||
follow the author’s choice if a different grant is selected.
|
||||
|
||||
For other licenses, provide their complete text and any required project-specific
|
||||
fields; the standard reference collection remains unchanged. Keep `COPYRIGHT`,
|
||||
`LICENSE`, SPDX expressions, and README descriptions consistent with the actual
|
||||
grant. This convention introduces no blanket requirement for per-file headers;
|
||||
preserve notices or add them where the applicable terms require them.
|
||||
|
||||
Identify separately licensed documentation or assets in the project grant, with
|
||||
links to their attribution and license information. An application's default
|
||||
code license does not override the terms of incorporated documentation.
|
||||
|
||||
## Upstream Attribution House Format
|
||||
|
||||
Each component entry contains five fields:
|
||||
Begin `docs/oss/attribution.md` with `# Open Source Attribution Notices`,
|
||||
followed directly by component entries. These comprise the complete document.
|
||||
|
||||
1. Project name, normally as the heading.
|
||||
2. Upstream copyright statements, preserving their wording.
|
||||
3. Applicable SPDX license identifier or expression.
|
||||
4. License and notice links.
|
||||
5. Source repository link at the exact imported commit.
|
||||
Each entry presents these five fields in order, with blank lines between them:
|
||||
|
||||
These are fields, not a line limit. Include multiple statements or links where
|
||||
needed. Do not invent absent copyright statements or SPDX identifiers. Describe
|
||||
nonstandard terms through their linked text, preserve alternatives and
|
||||
exceptions, and record a selected option when relevant. Do not silently resolve
|
||||
an unsettled licensing choice.
|
||||
1. **Project name** as a level-two heading. An optional identification paragraph
|
||||
may follow, such as `Selected module: MODULE at VERSION.` with the module and
|
||||
version in backticks. For copied documentation, a concise `Material:` sentence
|
||||
may identify the affected files and whether they were adapted or copied
|
||||
without modification. A factual qualifier such as `(transitive dependency)`
|
||||
is permitted. Limit optional identification prose to factual component and
|
||||
material scope.
|
||||
2. **Upstream copyright statement or statements**, preserving their wording.
|
||||
Put multiple statements in separate paragraphs. Include this field when the
|
||||
selected upstream source supplies an applicable statement; otherwise, omit it.
|
||||
3. **SPDX license identifier or expression**, when applicable, using
|
||||
`SPDX-License-Identifier: EXPRESSION`.
|
||||
4. **License and notice links**, beginning `License and notices:`, separated
|
||||
by ` | `, and ending with a period. Label local standard texts by license
|
||||
name, such as `MIT` or `Apache 2.0`. Label upstream files by their actual
|
||||
filenames, such as `COPYRIGHT`, `LICENSE`, `NOTICE`, or `PATENTS`.
|
||||
5. **Source repository link**, rendered exactly as:
|
||||
|
||||
```markdown
|
||||
[Source](COMMIT_URL).
|
||||
```
|
||||
|
||||
Use the upstream [attribution example](https://gitea.maximumdirect.net/eric/policy/src/commit/a469273adda336625f96b9d769ea27b33999f146/examples/licensing/attribution.md)
|
||||
to create the project’s `docs/oss/attribution.md`.
|
||||
The example illustrates omitted fields and multiple copyrights and licenses.
|
||||
Replace the uppercase placeholders and illustrative URLs with actual component
|
||||
information. Local license links are relative to the destination
|
||||
`docs/oss/attribution.md`; copy the applicable texts into its `licenses/`
|
||||
directory. Do not copy example entries for components the project does not use.
|
||||
|
||||
These are five fields, not a line limit. Omit the SPDX field when no applicable
|
||||
identifier exists; identify nonstandard terms through the linked text. Preserve
|
||||
licensing alternatives and exceptions, and record a selected option when
|
||||
relevant through the factual license identification. Do not invent an identifier
|
||||
or silently resolve an unsettled licensing choice.
|
||||
|
||||
Keep entries factual. Do not add agent-authored explanations of license
|
||||
expressions, file-level license scope, research performed, retained source
|
||||
notices, or compliance conclusions. Avoid filler such as "none is invented
|
||||
here" and embellished link labels such as "upstream LICENSE", "additional
|
||||
patent grant", or "at the imported commit". Preserve actual required upstream
|
||||
content; this rule excludes editorial additions, not required notices. Policy
|
||||
interpretation and exception reasoning belong in the adopted OSS policy or an
|
||||
appropriate decision record, not the attribution document.
|
||||
|
||||
## License Texts And Upstream Links
|
||||
|
||||
Link standard texts to local copies. Link project-specific notices to the
|
||||
upstream copies at the exact commit corresponding to the imported version or
|
||||
copied material. Moving branches and version tags are not substitutes for
|
||||
commit-specific component links.
|
||||
Link standard license texts to their local copies. Link project-specific
|
||||
notices to their upstream copies. Every upstream repository or notice link must
|
||||
identify the exact commit corresponding to the
|
||||
imported version, including the selected source revision for copied material.
|
||||
|
||||
Classify material by content, not filename: an upstream LICENSE or COPYING can
|
||||
mix standard text with project-specific notices or exceptions. Link both when
|
||||
needed. Make incorporated companion texts directly reachable from each entry.
|
||||
Classify material according to its contents. An upstream `LICENSE`,
|
||||
`COPYING`, or similar file may contain project-specific notices or exceptions
|
||||
in addition to standard wording. Link both the local standard text and the
|
||||
commit-specific upstream file when needed. Make companion license texts directly
|
||||
reachable from the entry.
|
||||
|
||||
For project-specific license and attribution material, direct upstream links
|
||||
are accepted as satisfying reproduction, inclusion, or copy requirements under
|
||||
the adopted house interpretation. Do not add local-copy requirements or request
|
||||
repeated approval solely because a license uses those terms. This concerns
|
||||
notice reproduction, not other concrete obligations such as marking modified
|
||||
files or supplying corresponding source. Central entries do not authorize
|
||||
stripping required notices from incorporated source.
|
||||
For project-specific license and attribution material, this policy accepts
|
||||
direct links to the applicable upstream texts as satisfying reproduction,
|
||||
inclusion, or copy requirements. This is the adopted house interpretation.
|
||||
Agents must apply it without adding local-copy requirements or seeking repeated
|
||||
approval solely because a license uses those terms.
|
||||
|
||||
This interpretation concerns notice reproduction. Concrete obligations such as
|
||||
marking modified files or supplying corresponding source receive their own
|
||||
applicable treatment. Preserve required notices already present in incorporated
|
||||
source files; the central attribution entry does not authorize stripping them.
|
||||
|
||||
## Discoverability
|
||||
|
||||
End README with friendly statements linking to the actual grant in COPYRIGHT
|
||||
and to the attribution document. Each new checked-in release note ends with
|
||||
links whose visible text is `COPYRIGHT | LICENSE | ATTRIBUTION`, using absolute
|
||||
URLs at the release's immutable tag or corresponding immutable source revision.
|
||||
These release links differ from imported-component links, which use commits.
|
||||
End the project's README with two friendly statements linking to its actual
|
||||
grant in `COPYRIGHT` and the attribution document. For example, for a project
|
||||
with the stated license:
|
||||
|
||||
The release procedure owns concrete URL construction. If a hosted download page
|
||||
is deliberately introduced, reuse the checked-in note and preserve its footer
|
||||
there. This convention does not require a new hosted page, downloadable license
|
||||
assets, source bundles, or another packaging format. Do not maintain duplicate
|
||||
notice lists.
|
||||
```markdown
|
||||
PROJECT_NAME is licensed under the [LGPL v3.0 or later](COPYRIGHT).
|
||||
|
||||
[Open Source attribution notices](docs/oss/attribution.md) are available.
|
||||
```
|
||||
|
||||
Each new checked-in release document and its hosted download page must end
|
||||
with links whose visible text is `COPYRIGHT | LICENSE | ATTRIBUTION`. Use absolute
|
||||
URLs to those files at the release's immutable tag or corresponding immutable source
|
||||
revision so the links work in both locations. This release navigation is distinct
|
||||
from upstream component links, which must use the imported commit.
|
||||
|
||||
Reuse the checked-in release document as the hosted release body where supported.
|
||||
The release procedure owns concrete URLs and publication mechanics for delivering
|
||||
the links through the selected channel. Do not maintain duplicate notice lists.
|
||||
These conventions do not by themselves require separate downloadable license
|
||||
assets, source bundles, or a different binary package format.
|
||||
|
||||
## Maintenance And Exceptions
|
||||
|
||||
Update attribution in the change that adds, removes, upgrades, copies, or changes
|
||||
distribution of a relevant component. Inspect the selected source's actual
|
||||
licenses/notices rather than assuming they are unchanged. Update entries,
|
||||
commit links, and texts together; retain history through Git.
|
||||
Update project licensing statements together when the author changes the grant
|
||||
or its scope. Update upstream notices in the change that adds, removes, upgrades,
|
||||
copies, or changes the distribution of a relevant component. Check the selected source's license
|
||||
and notices rather than assuming they are unchanged. Update affected entries,
|
||||
commit links, and texts; retain historical versions through Git.
|
||||
|
||||
Review affected statements, standard-text fidelity, and link destinations during
|
||||
ordinary change review. Future-release URLs can be checked against candidate
|
||||
paths before the tag exists remotely. Do not add publication-time network checks,
|
||||
CI polling, recurring legal sign-offs, mandatory scanners, or an SBOM just to
|
||||
implement this policy. Attribution maintenance is preparation, not a release gate.
|
||||
Check affected statements, faithful standard-text copies, and link destinations
|
||||
as part of ordinary change review. For a future release tag, check intended file
|
||||
paths against the candidate source; the tag need not resolve remotely before
|
||||
publication. Do not add publication-time network checks, CI polling, recurring
|
||||
legal sign-offs, mandatory scanners, or a full software bill of materials merely
|
||||
to implement this policy.
|
||||
|
||||
Raise exceptions only for concrete obligations or unresolved rights questions
|
||||
the House Format does not address, including distribution-specific issues.
|
||||
Record their selected treatment here or in the affected entry and resolve them
|
||||
before the affected use/distribution, without reopening settled choices.
|
||||
Common ownership is not a blanket exception. Adapted standard policy documents
|
||||
retain their upstream documentation license and identify modifications in their
|
||||
provenance entry; this does not change Promptkit's library grant.
|
||||
Use the House Format routinely. Raise an exception only for a concrete obligation
|
||||
or unresolved rights question it does not address, including any arising from a
|
||||
particular distribution channel. Record the issue and selected treatment in the
|
||||
adopted OSS policy or an appropriate decision record. Attribution entries
|
||||
contain the resulting factual identification and required material, without
|
||||
repeating that reasoning. Resolve the issue before the affected use or
|
||||
distribution without reopening settled choices.
|
||||
Common ownership of projects is neither required nor a blanket exception.
|
||||
|
||||
The maintainer-provided standard policy templates are internal and non-public.
|
||||
Their attribution entry identifies that source in prose and retains the
|
||||
applicable license locally; do not link to or require publication of the
|
||||
internal repository.
|
||||
Apply the formatting convention prospectively. Do not rewrite published tags,
|
||||
notes, binaries, or checksums to retrofit it. Address actual omissions deliberately
|
||||
under the applicable terms and the [release correction policy](release.md#immutability-and-failure-recovery).
|
||||
Ordinary attribution maintenance and release links are preparation work, not new
|
||||
release approval gates.
|
||||
|
||||
Apply conventions prospectively. Do not rewrite published tags, notes, binaries,
|
||||
or checksums to retrofit formatting. Handle actual omissions deliberately under
|
||||
applicable terms and the [release correction policy](release.md#immutability-and-failure-recovery).
|
||||
## Promptkit Adoption
|
||||
|
||||
Promptkit retains its LGPL-3.0-or-later library grant in
|
||||
[COPYRIGHT](../../COPYRIGHT). Adapted policy documentation has the separate
|
||||
scope identified there and in [attribution](../oss/attribution.md).
|
||||
|
||||
Promptkit publishes source-only Go module tags on Gitea, with no binaries or
|
||||
separate hosted download page. The [release procedure](../release.md) owns
|
||||
publication and concrete footer URLs. The hosted-page guidance applies if such
|
||||
a channel is deliberately introduced; it does not require creating one.
|
||||
|
||||
Reference in New Issue
Block a user