Add dual licensing (AGPL + commercial)#2021
Conversation
Add commercial license option for organizations that cannot comply with AGPL. Contact founders@manaflow.com for details. Updates LICENSE preamble, all README translations, and CONTRIBUTING.md.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (21)
✅ Files skipped from review due to trivial changes (14)
🚧 Files skipped from review as they are similar to previous changes (4)
📝 WalkthroughWalkthroughUpdated licensing and contribution texts: CONTRIBUTING.md and LICENSE introduce a copyright header and dual-licensing terms (AGPL-3.0-or-later plus a commercial license option). 21 README language files and the main README replace prior AGPL phrasing with a linked AGPL-3.0-or-later notice and add a commercial-license contact. Changes
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ 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 |
Greptile SummaryThis PR introduces dual licensing for cmux — AGPL-3.0-or-later for open source users and a private commercial license for organizations that cannot comply with AGPL. The pattern (preamble in Two issues are worth addressing before merge:
Confidence Score: 3/5
Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[User / Organization] --> B{Can comply\nwith AGPL-3.0-or-later?}
B -- Yes --> C[Use cmux under\nAGPL-3.0-or-later\nopen source terms]
B -- No --> D[Contact founders@manaflow.com\nfor commercial license]
D --> E[Private commercial\nagreement with\nManaflow, Inc.]
F[Contributor submits PR] --> G{Did contributor sign\na formal CLA?}
G -- No --> H["⚠️ Contribution licensed\nunder AGPL-only\n(commercial relicense\nmay lack legal basis)"]
G -- Yes --> I[Manaflow can offer\ncontribution under\ncommercial license]
Reviews (1): Last reviewed commit: "Add dual licensing (AGPL + commercial)" | Re-trigger Greptile |
| ## License | ||
|
|
||
| By contributing to this repository, you agree that your contributions are licensed under the project's GNU Affero General Public License v3.0 or later (`AGPL-3.0-or-later`). | ||
| By contributing to this repository, you agree that your contributions are licensed under the project's GNU Affero General Public License v3.0 or later (`AGPL-3.0-or-later`). Manaflow, Inc. retains the right to offer contributed code under a commercial license. |
There was a problem hiding this comment.
CLA grant is unilateral and legally insufficient
The phrase "Manaflow, Inc. retains the right to offer contributed code under a commercial license" implies Manaflow already possesses this right, but contributors under AGPL-only terms never granted it. Under copyright law, the right to sublicense code under a commercial (non-AGPL) license must be affirmatively granted by each copyright holder — it cannot be claimed unilaterally by adding a line to CONTRIBUTING.md.
Projects like MinIO, Cal.com, and Mattermost that successfully dual-license all require contributors to sign a formal Contributor License Agreement (CLA) that explicitly grants the company a royalty-free, sublicensable copyright license beyond AGPL. Without that:
- Past contributors who submitted PRs before this change never agreed to commercial relicensing of their code — their contributions remain AGPL-only.
- Future contributors are told Manaflow "retains" a right that contributors haven't explicitly granted; the wording is ambiguous and may not constitute a valid grant in most jurisdictions.
A stronger and more standard formulation would be:
| By contributing to this repository, you agree that your contributions are licensed under the project's GNU Affero General Public License v3.0 or later (`AGPL-3.0-or-later`). Manaflow, Inc. retains the right to offer contributed code under a commercial license. | |
| By contributing to this repository, you agree that your contributions are licensed under the project's GNU Affero General Public License v3.0 or later (`AGPL-3.0-or-later`), and you additionally grant Manaflow, Inc. a perpetual, worldwide, non-exclusive, royalty-free copyright license to use, reproduce, modify, sublicense, and distribute your contributions under other license terms, including commercial licenses. |
Even with improved wording, a proper CLA process (e.g., via CLA Assistant) is strongly recommended to obtain explicit per-contributor consent and protect the viability of the commercial licensing model.
| ## License | ||
|
|
||
| This project is licensed under the GNU Affero General Public License v3.0 or later (`AGPL-3.0-or-later`). | ||
| cmux is open source under [AGPL-3.0](LICENSE). |
There was a problem hiding this comment.
"or later" qualifier dropped from license identifier
The link text was changed from the precise AGPL-3.0-or-later identifier to just [AGPL-3.0](LICENSE), silently dropping the "or later" qualifier. The LICENSE file preamble itself still reads "AGPL-3.0-or-later," so the README now understates the actual license scope. Readers who don't click through to the LICENSE file could incorrectly assume the project is licensed strictly under AGPL v3.0 only, rather than v3.0-or-later.
The same pattern applies to all 19 translated READMEs (README.ar.md, README.bs.md, README.da.md, README.de.md, README.es.md, README.fr.md, README.it.md, README.ja.md, README.km.md, README.ko.md, README.no.md, README.pl.md, README.pt-BR.md, README.ru.md, README.th.md, README.tr.md, README.vi.md, README.zh-CN.md, README.zh-TW.md).
Consider retaining the full identifier for clarity:
| cmux is open source under [AGPL-3.0](LICENSE). | |
| cmux is open source under [AGPL-3.0-or-later](LICENSE). |
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@README.ja.md`:
- Around line 271-273: Replace the license label string "AGPL-3.0" in the
sentence "cmuxは[AGPL-3.0](LICENSE)の下でオープンソースです。" with the canonical identifier
"AGPL-3.0-or-later" so the README.ja.md matches the repository’s declared
licensing; update the linked text accordingly to read
"cmuxは[AGPL-3.0-or-later](LICENSE)の下でオープンソースです。" ensuring all occurrences in the
file use the same canonical wording.
In `@README.md`:
- Around line 271-273: The README currently states the license as the short
identifier "AGPL-3.0"; update that text to the canonical SPDX form
"AGPL-3.0-or-later" so it matches the LICENSE and PR intent—replace the string
"AGPL-3.0" in the README (the paragraph referencing cmux's license and the
commercial license blurb) with "AGPL-3.0-or-later" to remove ambiguity.
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 8403bc35-8ed8-4d63-8b94-92e3625bd053
📒 Files selected for processing (22)
CONTRIBUTING.mdLICENSEREADME.ar.mdREADME.bs.mdREADME.da.mdREADME.de.mdREADME.es.mdREADME.fr.mdREADME.it.mdREADME.ja.mdREADME.km.mdREADME.ko.mdREADME.mdREADME.no.mdREADME.pl.mdREADME.pt-BR.mdREADME.ru.mdREADME.th.mdREADME.tr.mdREADME.vi.mdREADME.zh-CN.mdREADME.zh-TW.md
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e30748ca68
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| ## License | ||
|
|
||
| This project is licensed under the GNU Affero General Public License v3.0 or later (`AGPL-3.0-or-later`). | ||
| cmux is open source under [AGPL-3.0](LICENSE). |
There was a problem hiding this comment.
Keep license identifier consistent with LICENSE terms
This line now says AGPL-3.0, but LICENSE explicitly grants AGPL-3.0-or-later; that mismatch creates contradictory licensing guidance and can cause downstream users/compliance reviewers to treat the project as v3-only terms. Please align the README wording (and the translated README updates made in this commit) with the canonical AGPL-3.0-or-later grant.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
5 issues found across 22 files
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="README.md">
<violation number="1" location="README.md:271">
P2: Keep the license identifier consistent as `AGPL-3.0-or-later`; using `AGPL-3.0` here narrows the stated terms and conflicts with the LICENSE file.</violation>
</file>
<file name="README.zh-CN.md">
<violation number="1" location="README.zh-CN.md:271">
P2: Use `AGPL-3.0-or-later` wording here to match the project’s stated license expression and avoid legal/compliance ambiguity.</violation>
</file>
<file name="README.it.md">
<violation number="1" location="README.it.md:271">
P2: The new license text is inconsistent with `LICENSE`: it says `AGPL-3.0` instead of `AGPL-3.0-or-later`.</violation>
</file>
<file name="README.bs.md">
<violation number="1" location="README.bs.md:271">
P2: The README now advertises `AGPL-3.0`, which conflicts with the repository’s canonical `AGPL-3.0-or-later` license declaration.</violation>
</file>
<file name="README.de.md">
<violation number="1" location="README.de.md:271">
P2: The new license wording narrows `AGPL-3.0-or-later` to `AGPL-3.0`, which creates licensing inconsistency and potential legal ambiguity for readers.</violation>
</file>
Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.
- Use AGPL-3.0-or-later (not AGPL-3.0) in all READMEs to match LICENSE - Replace weak "retains the right" clause in CONTRIBUTING.md with explicit contributor license grant for commercial sublicensing
* Add dual licensing (AGPL + commercial) Add commercial license option for organizations that cannot comply with AGPL. Contact founders@manaflow.com for details. Updates LICENSE preamble, all README translations, and CONTRIBUTING.md. * Fix AGPL identifier and strengthen contributor license grant - Use AGPL-3.0-or-later (not AGPL-3.0) in all READMEs to match LICENSE - Replace weak "retains the right" clause in CONTRIBUTING.md with explicit contributor license grant for commercial sublicensing --------- Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
Summary
This follows the pattern used by MinIO, Mattermost, Cal.com, and other AGPL projects that offer commercial licensing. The AGPL text itself is unchanged. GitHub SPDX tag stays
AGPL-3.0-or-later. The commercial license is a private agreement, no separate file needed.Testing
Related
Summary by cubic
Adds dual licensing for cmux: AGPL-3.0-or-later for open source with a commercial license for organizations that can’t use AGPL. Clarifies licensing across LICENSE, all READMEs, and CONTRIBUTING, and fixes the AGPL identifier.
LICENSEwith contact at founders@manaflow.com; SPDX remainsAGPL-3.0-or-later.README.mdand 19 translated READMEs to linkAGPL-3.0-or-laterand mention the commercial option; corrected the identifier toAGPL-3.0-or-latereverywhere.Written for commit 2a34edc. Summary will update on new commits.
Summary by CodeRabbit