Relicense server/ under AGPL-3.0-or-later (desktop stays MIT) - #21
Relicense server/ under AGPL-3.0-or-later (desktop stays MIT)#21Prasad-178 wants to merge 2 commits into
Conversation
The desktop app is the part we want people to take, fork and build on, so MIT stays there and asks nothing of them. The backend is the product — it holds the provider keys, the metering and the billing, and running it is the business. AGPL leaves self-hosting completely free while asking one thing of anyone who runs a modified copy as a service for other people: publish the modifications. The halves are separate programs talking over HTTP, so the network clause binds whoever runs the backend and does not reach the MIT client or its users. `packages/shared` stays MIT on purpose: both halves import it, and MIT flows into an AGPL codebase but not the reverse. NOT MERGEABLE YET. `server/` contains work by two copyright holders, and relicensing someone else's code is not the repository owner's to do alone. LICENSING.md carries a consent table that both holders sign on this pull request before it lands. Relicensing applies from this commit forward; earlier commits stay MIT and anyone who took the code under MIT keeps those rights. Signed-off-by: Prasad-178 <prasadjs178@gmail.com> Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: Prasad-178 <prasadjs178@gmail.com>
📝 WalkthroughWalkthroughThe changes document a split licensing model. The ChangesSplit licensing model
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: 1
🤖 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 `@LICENSING.md`:
- Around line 34-39: Update the contribution licensing guidance in
CONTRIBUTING.md to match the directory-specific policy documented in
LICENSING.md: contributions under server/ use AGPL-3.0-or-later, while all other
contributions use MIT. Preserve the existing inbound-equals-outbound and
copyright language.
🪄 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: c7d4d962-462e-448a-8f78-a80c8755bba5
📒 Files selected for processing (4)
LICENSING.mdREADME.mdserver/LICENSEserver/package.json
| Contributions follow the licence of the directory they land in: a change under `server/` is | ||
| contributed under AGPL-3.0-or-later, everything else under MIT. This is *inbound equals outbound* — | ||
| there is no Contributor License Agreement and you keep the copyright in what you write. | ||
|
|
||
| Every commit needs a `Signed-off-by:` trailer (`git commit -s`), which is checked by CI. See | ||
| [CONTRIBUTING.md](./CONTRIBUTING.md). |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Description: Check whether CONTRIBUTING.md reflects the directory-specific AGPL/MIT license split.
rg -n -C5 'MIT License|AGPL|inbound|Signed-off-by' CONTRIBUTING.mdRepository: vaibhav0806/kairo-tutor
Length of output: 652
🏁 Script executed:
#!/bin/bash
python3 - <<'PY'
from pathlib import Path
licensing = Path("LICENSING.md").read_text()
contributing = Path("CONTRIBUTING.md").read_text()
print("LICENSING.md contribution section:")
for i, line in enumerate(licensing.splitlines(), 1):
if 34 <= i <= 39:
print(f"{i}:{line}")
print("\nCONTRIBUTING.md license section:")
lines = contributing.splitlines()
for i, line in enumerate(lines, 1):
if 49 <= i <= 54:
print(f"{i}:{line}")
print("\nChecks:")
print("server AGPL in LICENSING.md:", "server/" in licensing and "AGPL-3.0-or-later" in licensing)
print("repository-wide MIT inbound wording in CONTRIBUTING.md:",
"same MIT License that covers this repository (inbound equals outbound)" in contributing)
print("directory-specific inbound wording in CONTRIBUTING.md:",
"server/" in contributing and "AGPL-3.0-or-later" in contributing)
PYRepository: vaibhav0806/kairo-tutor
Length of output: 1168
Align CONTRIBUTING.md with the directory-specific inbound license. It currently states that all contributions use MIT, which conflicts with the AGPL-3.0-or-later requirement for server/ contributions in LICENSING.md.
🤖 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 `@LICENSING.md` around lines 34 - 39, Update the contribution licensing
guidance in CONTRIBUTING.md to match the directory-specific policy documented in
LICENSING.md: contributions under server/ use AGPL-3.0-or-later, while all other
contributions use MIT. Preserve the existing inbound-equals-outbound and
copyright language.
|
I am a copyright holder in this project. I agree to license my existing and future contributions under Posted by Claude Code at @Prasad-178's explicit instruction, from his account. |
One of two. This stays unmergeable until @vaibhav0806 records his, since the AGPL relicense covers his contributions under server/ as well as mine. Signed-off-by: Prasad-178 <prasadjs178@gmail.com> Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: Prasad-178 <prasadjs178@gmail.com>
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
LICENSING.md (2)
51-57: 🔒 Security & Privacy | 🟠 Major | ⚡ Quick winDo not state that all holders consented while consent remains pending.
Line 51 says that every listed holder agreed, but line 57 marks
@vaibhav0806as pending. This misstates the current relicensing status and conflicts with the requirement for both consents before merge. Change the sentence to describe the table as a consent-status record, and keep the PR blocked until line 57 contains a consent link.Proposed wording
-The copyright holders below have each agreed to license their existing contributions under `server/` as AGPL-3.0-or-later: +The table below records the current consent status for copyright holders whose existing contributions under `server/` are proposed for licensing under AGPL-3.0-or-later:🤖 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 `@LICENSING.md` around lines 51 - 57, Update the introductory sentence above the licensing table to describe it as a record of consent status rather than asserting that every listed copyright holder has agreed. Preserve the pending status for Vaibhav Pandey and require a consent link in that row before treating relicensing as complete.
17-22: 🔒 Security & Privacy | 🟠 Major | ⚡ Quick winAlign the AGPL explanation with Section 13.
State that a modified version that supports remote network interaction must prominently offer all remote users access to its Corresponding Source at no charge. Remove the claim that the licence only targets services for other people.
🤖 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 `@LICENSING.md` around lines 17 - 22, Update the AGPL explanation in the licensing text to reflect Section 13: state that modified versions supporting remote network interaction must prominently offer every remote user access to the Corresponding Source at no charge, and remove the claim that the licence applies only when serving other people.
🤖 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.
Outside diff comments:
In `@LICENSING.md`:
- Around line 51-57: Update the introductory sentence above the licensing table
to describe it as a record of consent status rather than asserting that every
listed copyright holder has agreed. Preserve the pending status for Vaibhav
Pandey and require a consent link in that row before treating relicensing as
complete.
- Around line 17-22: Update the AGPL explanation in the licensing text to
reflect Section 13: state that modified versions supporting remote network
interaction must prominently offer every remote user access to the Corresponding
Source at no charge, and remove the claim that the licence applies only when
serving other people.
Do not merge yet
This needs a comment from each copyright holder first. See Consent required below.
What this does
Splits the licence by directory:
server/server/LICENSE— full AGPL-3.0 textLICENSING.md— the split, the reasoning, what it means for contributors, and the consent tableserver/package.json→"license": "AGPL-3.0-or-later"(root stays MIT)Why
The desktop app is what we want people to take, fork and build on, so MIT stays there. The backend is the product — provider keys, metering, billing — and running it is the business. AGPL leaves self-hosting entirely free while asking one thing of anyone running a modified copy as a service for other people: publish the modifications.
The two halves are separate programs talking over HTTP, so the AGPL's network clause binds whoever runs the backend. It does not reach the MIT desktop client or its users.
packages/sharedstays MIT deliberately — both halves import it, and MIT flows into AGPL but not the reverse.This is the same shape Zed uses (GPL client, AGPL server) and the posture Plausible and Immich take.
Consent required
server/has been MIT since the beginning and contains work by two copyright holders. Relicensing someone else's code is not the repo owner's to do unilaterally, and there is no IP assignment entity here, so it has to be recorded rather than assumed.@Prasad-178 and @vaibhav0806 — please each leave a comment on this PR with exactly:
I will then link both comments in the
LICENSING.mdconsent table and this becomes mergeable.Relicensing applies from the merge commit forward. Earlier commits remain MIT, and anyone who obtained the code under MIT keeps those rights to that snapshot — normal, and not something this PR changes.
🤖 Generated with Claude Code
Summary by CodeRabbit
Documentation
Legal