Relicense: PolyForm Noncommercial with convention and education rider - #11
Relicense: PolyForm Noncommercial with convention and education rider#11Thiritin wants to merge 1 commit into
Conversation
📝 WalkthroughWalkthroughThe project replaces GPL licensing references with PolyForm Noncommercial terms and a convention and education rider. It updates Composer metadata and README licensing information. It adds contributor guidance for contribution processes, coding standards, checks, architecture, branding, and local setup. ChangesLicensing and contribution guidance
Estimated code review effort: 2 (Simple) | ~10 minutes 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 6
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@CONTRIBUTING.md`:
- Around line 15-17: Update the contribution licensing guidance in
CONTRIBUTING.md to require preserving the complete applicable license text,
copyright and attribution notices, NOTICE attributions, and any required
modification notices for permissively licensed code, rather than only its
copyright notice.
In `@LICENSE`:
- Around line 5-7: Update the public license summaries in LICENSE lines 5-7 and
README.md lines 140-142: state the surplus and reasonable-pay condition, include
the Section 3 exception for commercial companies acting for permitted
organisations, and require written permission only for other business use,
including offering the software as its own commercial product or hosted service.
- Around line 9-13: Update the rider-precedence language in LICENSE so it no
longer applies a blanket “more permissive reading wins” rule: limit rider
modifications to explicit permissions in Sections 1–6, state that no permission
arises by implication, and preserve the restrictions and trademark provisions in
Sections 4 and 6. Obtain legal approval for the final precedence wording.
- Around line 100-104: Update the final sentence in the “Names and logos”
section to clarify that configuring branding does not transfer ownership or
trademark rights, rather than stating that the branding belongs to whoever
configured it.
- Line 3: Update the LICENSE copyright and relicensing state only after
documenting authorization from all contributors whose existing work is covered,
using a tracked CLA, assignment, or prior-consent record; otherwise retain
affected material under its prior GPL license rather than asserting PolyForm
rights.
- Around line 17-20: Create an immutable release tag or version for commit
1fc6b0ab5aede4e0607a68f882b0b3a9670ad5de, then update the boundary statements in
LICENSE (lines 17-20) and README.md (line 144) to use that same identifier.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: f37a807b-54d2-4531-a09e-3e851957409b
📒 Files selected for processing (4)
CONTRIBUTING.mdLICENSEREADME.mdcomposer.json
| Because the project is source-available rather than open source, code taken from | ||
| GPL, AGPL or similarly licensed projects cannot be merged. MIT, BSD, ISC and | ||
| Apache-2.0 code is fine as long as you keep its copyright notice. |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -eu
printf '%s\n' '--- CONTRIBUTING.md ---'
cat -n CONTRIBUTING.md
printf '%s\n' '--- repository license-related guidance ---'
rg -n -i 'license|licen[cs]|notice|copyright|third[- ]party|source.available|open source' --glob '!node_modules' --glob '!dist' --glob '!build' .Repository: Thiritin/streaming
Length of output: 50375
🌐 Web query:
Apache License 2.0 official redistribution conditions license copy NOTICE modified files section 4
💡 Result:
Section 4 of the Apache License 2.0 outlines the conditions for redistributing the Work or Derivative Works [1][2][3]. When redistributing, you must meet the following four primary requirements: 1. Copy of License: You must provide any recipients of the Work or Derivative Works with a copy of the Apache License 2.0 [1][3]. 2. Modified Files: You must include prominent notices in any modified files stating that you changed those files [1][3]. 3. Attribution Preservation: You must retain all copyright, patent, trademark, and attribution notices from the Source form of the original Work in the Source form of any Derivative Works you distribute (excluding notices that do not pertain to any part of the Derivative Works) [1][3]. 4. NOTICE File: If the original Work includes a NOTICE text file, any Derivative Works you distribute must include a readable copy of the attribution notices contained within that file [1][3]. These notices must be placed in at least one of the following locations: - Within a NOTICE text file distributed as part of the Derivative Works [1][3]. - Within the Source form or documentation, if provided with the Derivative Works [1][3]. - Within a display generated by the Derivative Works (wherever such third-party notices normally appear) [1][3]. The contents of the NOTICE file are for informational purposes only and do not modify the license [1][3]. You may add your own attribution notices within Derivative Works, provided they are placed alongside or as an addendum to the original NOTICE text and are not construed as modifying the license [1][3]. For Apache projects, policy dictates that these files (LICENSE and NOTICE) should generally be located in the top directory of the distribution [4][5]. It is important to note that you should not modify the original LICENSE or NOTICE files for non-bundled dependencies, but if you bundle dependencies, you may need to analyze their NOTICE files and consolidate relevant portions into your top-level NOTICE file [5].
Citations:
- 1: https://www.apache.org/licenses/LICENSE-2.0.html
- 2: https://www.apache.org/licenses/LICENSE-2.0
- 3: https://www.apache.org/licenses/LICENSE-2.0.txt
- 4: https://www.apache.org/legal/apply-license
- 5: https://infra.apache.org/licensing-howto.html
🏁 Script executed:
#!/bin/bash
set -eu
printf '%s\n' '--- CONTRIBUTING.md lines 1-25 ---'
sed -n '1,25p' CONTRIBUTING.md
printf '%s\n' '--- tracked license and notice files ---'
git ls-files | rg -i '(^|/)(license|licence|notice)([^/]*)$|third.party'
printf '%s\n' '--- relevant tracked guidance only ---'
git grep -n -I -i -E 'license|licen[cs]|notice|copyright|third[- ]party|source.available|open source' -- CONTRIBUTING.md README.md 2>/dev/null || trueRepository: Thiritin/streaming
Length of output: 2110
Require complete license and notice handling for permissive contributions.
Line 17 requires more than retaining the copyright notice. Contributors must review the license and preserve the full license text, copyright and attribution notices, applicable NOTICE attributions, and required modification notices.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@CONTRIBUTING.md` around lines 15 - 17, Update the contribution licensing
guidance in CONTRIBUTING.md to require preserving the complete applicable
license text, copyright and attribution notices, NOTICE attributions, and any
required modification notices for permissively licensed code, rather than only
its copyright notice.
| <https://www.gnu.org/licenses/why-not-lgpl.html>. | ||
| # Licence | ||
|
|
||
| Copyright 2023 Thiritin and contributors. |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟠 Major | 🏗️ Heavy lift
🧩 Analysis chain
🏁 Script executed:
#!/bin/sh
set -eu
git shortlog -sne --all
printf '\nPossible rights-record files:\n'
fd -H -i 'cla|dco|copyright|contributor' .Repository: Thiritin/streaming
Length of output: 790
🏁 Script executed:
printf '%s\n' '--- LICENSE ---'
cat -n LICENSE
printf '%s\n' '--- CONTRIBUTING and repository guidance ---'
fd -H -i 'contributing|readme|license|cla|dco|copyright|contributor' . -t f | sort
for f in CONTRIBUTING.md README.md; do
if [ -f "$f" ]; then
printf '\n--- %s ---\n' "$f"
cat -n "$f"
fi
done
printf '%s\n' '--- license-related history ---'
git log --all --format='%h %ad %an <%ae> %s' --date=short -- LICENSE CONTRIBUTING.md | head -80
printf '%s\n' '--- contributor and licensing references ---'
rg -n -i 'license|licen[cs]e|copyright|CLA|DCO|contributor|assign|relicense|GPL|PolyForm' --glob '!LICENSE' --glob '!README.md' --glob '!CONTRIBUTING.md' . || trueRepository: Thiritin/streaming
Length of output: 50375
🏁 Script executed:
printf '%s\n' '--- tracked top-level licensing files ---'
git ls-files | awk 'BEGIN{IGNORECASE=1} $0=="LICENSE" || $0=="CONTRIBUTING.md" || $0=="README.md" || $0 ~ /(^|\/)(CLA|DCO|COPYRIGHT|CONTRIBUTORS)(\.[^\/]*)?$/ {print}'
for f in LICENSE CONTRIBUTING.md README.md; do
if git ls-files --error-unmatch "$f" >/dev/null 2>&1; then
printf '\n--- %s: first 120 lines ---\n' "$f"
sed -n '1,120p' "$f"
else
printf '\n--- %s: not tracked ---\n' "$f"
fi
done
printf '%s\n' '--- license-file history ---'
git log --all --format='%h %ad %an <%ae> %s' --date=short -- LICENSE CONTRIBUTING.md | head -80
printf '%s\n' '--- tracked files with explicit rights terms ---'
git grep -n -i -E 'copyright|CLA|DCO|contributor|assign|relicens|GPL|PolyForm' -- ':!LICENSE' ':!README.md' ':!CONTRIBUTING.md' | head -200 || trueRepository: Thiritin/streaming
Length of output: 33797
Document relicense authority before shipping. Git history includes contributors besides Thiritin/Tin, but no tracked CLA, assignment, or prior-consent record establishes PolyForm rights for their existing contributions. Obtain consent or keep affected material under its prior GPL license.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@LICENSE` at line 3, Update the LICENSE copyright and relicensing state only
after documenting authorization from all contributors whose existing work is
covered, using a tracked CLA, assignment, or prior-consent record; otherwise
retain affected material under its prior GPL license rather than asserting
PolyForm rights.
| This software is source-available, not open source. It is free to use for | ||
| conventions, non-profit event organisers and schools. Businesses need written | ||
| permission, which costs nothing and is usually given. |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
printf '%s\n' '--- LICENSE ---'
cat -n LICENSE | sed -n '1,80p'
printf '%s\n' '--- README excerpt ---'
cat -n README.md | sed -n '125,155p'
printf '%s\n' '--- related license references ---'
rg -n -i 'noncommercial|non-commercial|commercial|surplus|reasonable|permission|hosted|service|section 3|gpl|polyform|source-available' LICENSE README.mdRepository: Thiritin/streaming
Length of output: 8937
🏁 Script executed:
cat -n LICENSE | sed -n '74,100p'
cat -n LICENSE | sed -n '130,175p'
printf '%s\n' '--- all public license-summary sections ---'
rg -n -i -C 3 'source-available|free to use|written permission|commercial service|ticket sales|surplus|reasonable pay|host|operate|service provider' --glob '!*lock*' .Repository: Thiritin/streaming
Length of output: 50375
🏁 Script executed:
set -o pipefail
printf '%s\n' '--- LICENSE rider service-provider and permission clauses ---'
sed -n '74,100p' LICENSE
printf '%s\n' '--- README license summary ---'
sed -n '130,145p' README.md
printf '%s\n' '--- targeted summary matches outside generated/vendor data ---'
rg -n -i --glob '!**/node_modules/**' --glob '!**/vendor/**' --glob '!**/public/**' \
'source-available|free to use|written permission|commercial service|ticket sales|surplus|reasonable pay|service provider' \
LICENSE README.md
printf '%s\n' '--- deterministic summary checks ---'
python3 - <<'PY'
from pathlib import Path
license_text = Path("LICENSE").read_text()
readme_text = Path("README.md").read_text()
rider = license_text[license_text.index("## 2. Income does not make use commercial"):license_text.index("## 4.")]
checks = {
"LICENSE states the surplus condition": "surplus goes back into its own purposes" in rider,
"LICENSE states reasonable pay": "reasonable pay for work done" in rider,
"LICENSE grants paid commercial service-provider work": "may be paid for that work" in rider,
"LICENSE limits service-provider permission": "does not let the company" in rider,
"README states the surplus condition": "surplus goes back into its own purposes" in readme_text,
"README states reasonable pay": "reasonable pay for work done" in readme_text,
"README limits permission to product or hosted service": (
"offer the software to the public as a product or service of its own" in readme_text
),
}
for name, result in checks.items():
print(f"{name}: {'yes' if result else 'no'}")
PYRepository: Thiritin/streaming
Length of output: 3681
Align the public license summaries with the rider.
LICENSE#L5-L7: Include the Section 3 exception for commercial companies acting for permitted organisations. Require written permission only for other business use, including offering the software as its own product or hosted service.README.md#L140-L142: State the surplus and reasonable-pay condition. Include the same Section 3 exception and limit written permission to offering the software as its own commercial product or hosted service.
📍 Affects 2 files
LICENSE#L5-L7(this comment)README.md#L140-L142
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@LICENSE` around lines 5 - 7, Update the public license summaries in LICENSE
lines 5-7 and README.md lines 140-142: state the surplus and reasonable-pay
condition, include the Section 3 exception for commercial companies acting for
permitted organisations, and require written permission only for other business
use, including offering the software as its own commercial product or hosted
service.
| It is licensed under the **PolyForm Noncommercial License 1.0.0**, reproduced in | ||
| full below, together with the **Convention and Education Rider** that follows. | ||
| The rider only adds permissions. It never takes away anything the PolyForm | ||
| licence grants, so if the rider and the PolyForm text disagree about whether | ||
| something is allowed, the more permissive reading wins. |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟠 Major | 🏗️ Heavy lift
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -eu
printf '%s\n' '--- LICENSE files ---'
git ls-files | rg '(^|/)(LICENSE|COPYING)(\..*)?$|LICENSE'
printf '%s\n' '--- LICENSE outline ---'
wc -l LICENSE
printf '%s\n' '--- relevant license text ---'
cat -n LICENSE | sed -n '1,220p'
printf '%s\n' '--- references to rider and permission sections ---'
rg -n -i 'rider|permission|commercial|trademark|section [1-6]|PolyForm' --glob '!LICENSE' .Repository: Thiritin/streaming
Length of output: 41307
🏁 Script executed:
#!/bin/bash
set -eu
python3 - <<'PY'
from pathlib import Path
import re
text = Path("LICENSE").read_text()
rider = text.split("# Convention and Education Rider", 1)[1].split("# PolyForm Noncommercial License 1.0.0", 1)[0]
sections = {}
for match in re.finditer(r"^## ([1-6])\. (.+)$", rider, re.MULTILINE):
start = match.end()
next_match = re.search(r"^## [1-6]\. .+$", rider[start:], re.MULTILINE)
end = start + next_match.start() if next_match else len(rider)
sections[match.group(1)] = (match.group(2), " ".join(rider[start:end].split()))
for number, (title, body) in sections.items():
print(f"Section {number}: {title}")
for phrase in (
"permitted purpose",
"permission",
"not granted",
"Ask for written permission first",
"no rights",
"Nothing here requires",
):
if phrase.lower() in body.lower():
print(f" contains: {phrase}")
PYRepository: Thiritin/streaming
Length of output: 650
Replace the blanket “more permissive reading wins” rule in LICENSE lines 11–13. Sections 4 and 6 withhold other uses and trademark rights. Limit rider changes to explicit permissions in Sections 1–6, state that no permission arises by implication, and obtain legal approval for the final precedence wording.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@LICENSE` around lines 9 - 13, Update the rider-precedence language in LICENSE
so it no longer applies a blanket “more permissive reading wins” rule: limit
rider modifications to explicit permissions in Sections 1–6, state that no
permission arises by implication, and preserve the restrictions and trademark
provisions in Sections 4 and 6. Obtain legal approval for the final precedence
wording.
| Releases up to and including the last release before this file changed were | ||
| published under the GNU General Public License v3.0. That grant cannot be | ||
| withdrawn: anyone who received those versions keeps their rights under the GPL | ||
| for them. This licence governs later versions. |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟠 Major | 🏗️ Heavy lift
🧩 Analysis chain
🏁 Script executed:
#!/bin/sh
set -eu
git log --follow --format='%H %ad %s' --date=iso-strict -- LICENSE
git tag --sort=creatordate --format='%(creatordate:iso8601) %(refname:short)'Repository: Thiritin/streaming
Length of output: 340
🏁 Script executed:
#!/bin/sh
set -eu
printf '%s\n' '--- LICENSE ---'
cat -n LICENSE
printf '%s\n' '--- README context ---'
sed -n '132,150p' README.md
printf '%s\n' '--- Relicensing commit metadata and affected-file patch ---'
git show --no-ext-diff --format=fuller --stat 0845ef931d9dbd38875e31ce4aa33002cfcc4bd5
git show --no-ext-diff --format= --find-renames 0845ef931d9dbd38875e31ce4aa33002cfcc4bd5 -- LICENSE README.md
printf '%s\n' '--- Repository release identifiers ---'
git tag --list
git for-each-ref --format='%(refname:short) %(objectname) %(objecttype)' refs/tags/
rg -n --hidden -g '!node_modules' -g '!dist' -g '!build' \
'version|release|v[0-9]+\.[0-9]+|GPL|PolyForm|licen[cs]e' \
package.json package-lock.json pyproject.toml Cargo.toml CHANGELOG* HISTORY* README.md LICENSE 2>/dev/null || trueRepository: Thiritin/streaming
Length of output: 50374
🏁 Script executed:
#!/bin/sh
set -eu
printf '%s\n' '--- Commit ancestry around the licence change ---'
git log --first-parent --format='%H %ad %s' --date=iso-strict --all --max-count=20
printf '%s\n' '--- All refs and release-like names ---'
git show-ref
git for-each-ref --format='%(refname) %(objectname)' refs/heads refs/remotes refs/tags
printf '%s\n' '--- Repository files likely to define releases ---'
git ls-files | rg -i '(^|/)(package\.json|.*(change|release|history|version|tag).*)$|(^|/)README(\..*)?$|(^|/)LICENSE(\..*)?$'
printf '%s\n' '--- Historical LICENSE and README content before the change ---'
git show 0845ef931d9dbd38875e31ce4aa33002cfcc4bd5^:LICENSE 2>/dev/null || true
git show 0845ef931d9dbd38875e31ce4aa33002cfcc4bd5^:README.md 2>/dev/null | sed -n '132,150p' || trueRepository: Thiritin/streaming
Length of output: 38196
🏁 Script executed:
#!/bin/sh
set -eu
printf '%s\n' '--- Version metadata ---'
for f in package.json composer.json; do
if [ -f "$f" ]; then
printf '%s\n' "--- $f ---"
cat -n "$f" | sed -n '1,80p'
fi
done
printf '%s\n' '--- Release-like commit subjects before relicensing ---'
git log 0845ef931d9dbd38875e31ce4aa33002cfcc4bd5^ \
--format='%H %ad %s' --date=short |
rg -i 'release|version|publish|tag|deploy' || true
printf '%s\n' '--- Boundary commit identity ---'
git show -s --format='commit=%H%nparent=%P%nauthor=%an%n date=%ad%nsubject=%s' \
0845ef931d9dbd38875e31ce4aa33002cfcc4bd5
git show -s --format='commit=%H%n date=%ad%nsubject=%s' \
0845ef931d9dbd38875e31ce4aa33002cfcc4bd5^
printf '%s\n' '--- Licence references in tracked files ---'
rg -n -i 'GNU General Public License|GPL-3\.0|PolyForm|licen[cs]e changed|release' \
--glob '!LICENSE' --glob '!vendor/**' --glob '!node_modules/**' \
$(git ls-files) 2>/dev/null || trueRepository: Thiritin/streaming
Length of output: 50375
🏁 Script executed:
#!/bin/sh
set -eu
python3 - <<'PY'
import json
for name in ("package.json", "composer.json"):
try:
with open(name) as f:
data = json.load(f)
except FileNotFoundError:
continue
print(f"{name}: version={data.get('version', '<absent>')}")
PY
printf '%s\n' '--- Release-like subjects before relicensing ---'
git log 0845ef931d9dbd38875e31ce4aa33002cfcc4bd5^ \
--format='%H %ad %s' --date=short |
grep -Ei 'release|version|publish|tag|deploy' || true
printf '%s\n' '--- Boundary commit identity ---'
git show -s --format='commit=%H%nparent=%P%nauthor=%an%n date=%ad%nsubject=%s' \
0845ef931d9dbd38875e31ce4aa33002cfcc4bd5
git show -s --format='commit=%H%n date=%ad%nsubject=%s' \
0845ef931d9dbd38875e31ce4aa33002cfcc4bd5^
printf '%s\n' '--- Relevant licence references outside generated or dependency files ---'
git grep -n -i -E 'GNU General Public License|GPL-3\.0|PolyForm|licen(c|s)e changed|release' -- \
':(exclude)LICENSE' \
':(exclude)*lock*' \
':(exclude)vendor/**' \
':(exclude)node_modules/**' \
':(exclude)resources/**' || trueRepository: Thiritin/streaming
Length of output: 50375
Define the GPL-to-PolyForm boundary with an immutable release identifier.
The last GPL snapshot is commit 1fc6b0ab5aede4e0607a68f882b0b3a9670ad5de, but it has no release tag. Create a release tag or version for that snapshot, and use the same identifier in LICENSE and README.md.
📍 Affects 2 files
LICENSE#L17-L20(this comment)README.md#L144-L144
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@LICENSE` around lines 17 - 20, Create an immutable release tag or version for
commit 1fc6b0ab5aede4e0607a68f882b0b3a9670ad5de, then update the boundary
statements in LICENSE (lines 17-20) and README.md (line 144) to use that same
identifier.
| ## 6. Names and logos | ||
|
|
||
| This licence covers the software. It grants no rights in the names, logos or | ||
| trade marks of the licensor or of any convention using the software. The logo | ||
| and branding an installation configures belong to whoever configured them. |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
printf '%s\n' '--- LICENSE context ---'
sed -n '85,115p' LICENSE
printf '%s\n' '--- repository references to branding and licensing ---'
rg -n -i --glob '!node_modules' --glob '!dist' 'logo|branding|trademark|licen[cs]e|configured' . | head -200Repository: Thiritin/streaming
Length of output: 23329
🌐 Web query:
Open-source license wording “The logo and branding an installation configures belong to whoever configured them” trademark ownership rights
💡 Result:
The specific wording “The logo and branding an installation configures belong to whoever configured them” is not a standard clause in open-source licenses and does not inherently grant or transfer trademark ownership rights. Trademark law and open-source software licensing operate under two different legal frameworks: 1. Trademark Rights vs. Software Licenses: Open-source software licenses (such as MIT, Apache 2.0, or GPL) govern the copyright of the code, allowing you to use, modify, and redistribute the software [1][2][3]. These licenses generally do not grant permission to use the original project’s trademarks, logos, or branding [1][2][3]. Trademark rights exist independently of copyright and are generally established through commercial use to identify the source of goods or services, not by the creation of the work or its inclusion in a software repository [4][5][6]. 2. Ownership of Custom Branding: The claim that branding “belongs to whoever configured them” reflects a practical understanding of white-labeling or customization features often found in enterprise or self-hosted software [7][8][9]. When a user configures an installation with their own custom logos or names, they are using their own assets (or assets they have the right to use) to identify their specific instance [7][8][9]. Because trademarks are acquired through use in commerce, an organization that applies its own branding to its installation generally holds the trademark rights to that custom brand, provided it is being used to identify the organization's own goods or services [4][6]. 3. Legal Risks of Informal Wording: The phrase you identified is ambiguous from a legal standpoint. If a software provider includes this language, it may be an attempt to clarify that they do not claim rights over the custom branding added by the end-user [7][8]. However, it does not override fundamental trademark law [4]. Trademark ownership is determined by who uses the mark in commerce to signify the source of the services [4][6]. If a user re-brands software, they must ensure they are not infringing on any existing trademarks of the original software creator or any other third parties [1][10][2]. In summary, you cannot rely on a software license clause to definitively transfer or establish trademark rights [5][11]. Trademark ownership depends on active, commercial use in the marketplace and clear documentation of that use, regardless of what a software configuration file might state [4][6]. If you are concerned about ownership of branding for a deployed instance, consult with intellectual property counsel to ensure your rights are properly established and protected [5][11].
Citations:
- 1: https://static.fsf.org/nosvn/licensing/2020/ModelTrademarkGuidelinesv1.0.pdf
- 2: https://golang-org.appspot.com/go.dev/brand
- 3: https://github.com/ariada-org/ariada/blob/main/TRADEMARK.md
- 4: https://hebertthomaslaw.com/who-really-owns-the-brand-understanding-trademark-rights-in-the-workplace/
- 5: https://www.cll.com/OnMyMindBlog/does-the-creator-of-a-logo-automatically
- 6: https://www.jdsupra.com/legalnews/trademark-fundamentals-who-owns-a-4144751/
- 7: https://docs.kindo.ai/deploy/customize-branding/
- 8: https://github.com/markramm/pyrite/blob/dev/docs/deployment/white-labeling.md
- 9: https://awslabs.github.io/LISA/config/custom-branding.html
- 10: https://apache.org/foundation/marks/
- 11: https://jonathonspire-law.com/the-logo-ownership-trap-that-starts-with-one-missing-clause/
🏁 Script executed:
#!/bin/bash
printf '%s\n' '--- LICENSE opening and custom terms ---'
sed -n '1,55p' LICENSE
printf '%s\n' '--- CONTRIBUTING branding policy ---'
sed -n '35,48p' CONTRIBUTING.mdRepository: Thiritin/streaming
Length of output: 3508
Do not assign third-party branding to the configurator.
The final sentence states that configured branding belongs to the configurator. This conflicts with the preceding trademark disclaimer. State that configuration does not transfer ownership or trademark rights.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@LICENSE` around lines 100 - 104, Update the final sentence in the “Names and
logos” section to clarify that configuring branding does not transfer ownership
or trademark rights, rather than stating that the branding belongs to whoever
configured it.
Summary by CodeRabbit
Documentation
Licensing