Skip to content

Add dual licensing (AGPL + commercial)#2021

Merged
lawrencecchen merged 2 commits intomainfrom
feat-dual-license
Mar 24, 2026
Merged

Add dual licensing (AGPL + commercial)#2021
lawrencecchen merged 2 commits intomainfrom
feat-dual-license

Conversation

@lawrencecchen
Copy link
Copy Markdown
Contributor

@lawrencecchen lawrencecchen commented Mar 24, 2026

Summary

  • Add dual license preamble to LICENSE: AGPL-3.0 for open source, commercial license available via founders@manaflow.com
  • Update README license section with commercial license mention and contact link
  • Update all 19 translated READMEs with the same change in each language
  • Update CONTRIBUTING.md to note Manaflow retains the right to offer contributions under commercial license

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

  • No code changes, docs/license only
  • Verified LICENSE preamble renders correctly
  • Verified all README links point to correct targets

Related

  • Task: Dual license cmux so companies that can't use AGPL can contact founders@manaflow.com for a commercial license

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.

  • New Features
    • Added dual-license preamble to LICENSE with contact at founders@manaflow.com; SPDX remains AGPL-3.0-or-later.
    • Updated README.md and 19 translated READMEs to link AGPL-3.0-or-later and mention the commercial option; corrected the identifier to AGPL-3.0-or-later everywhere.
    • Replaced the CONTRIBUTING notice with an explicit contributor license grant allowing Manaflow to sublicense contributions under any license, including a commercial license.

Written for commit 2a34edc. Summary will update on new commits.

Summary by CodeRabbit

  • Documentation
    • Updated licensing text across project documentation and localized README files
    • Clarified dual-licensing: AGPL-3.0-or-later for open-source use, with a commercial license option available
    • Added contact details for commercial licensing inquiries and explicit guidance for organizations unable to comply with AGPL

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.
@vercel
Copy link
Copy Markdown

vercel Bot commented Mar 24, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
cmux Ready Ready Preview, Comment Mar 24, 2026 1:35am

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Mar 24, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: cb80d358-c0ab-4370-a353-21f1f4f44a1b

📥 Commits

Reviewing files that changed from the base of the PR and between e30748c and 2a34edc.

📒 Files selected for processing (21)
  • CONTRIBUTING.md
  • 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.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
✅ Files skipped from review due to trivial changes (14)
  • README.ar.md
  • CONTRIBUTING.md
  • README.da.md
  • README.es.md
  • README.vi.md
  • README.md
  • README.ko.md
  • README.ru.md
  • README.it.md
  • README.zh-CN.md
  • README.ja.md
  • README.km.md
  • README.pl.md
  • README.zh-TW.md
🚧 Files skipped from review as they are similar to previous changes (4)
  • README.th.md
  • README.pt-BR.md
  • README.no.md
  • README.tr.md

📝 Walkthrough

Walkthrough

Updated 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

Cohort / File(s) Summary
License & Contributing
CONTRIBUTING.md, LICENSE
Added copyright/licensing header and explicit dual-licensing language: contributions under AGPL-3.0-or-later and an additional perpetual, worldwide, royalty-free license grant to Manaflow, Inc.; LICENSE prepended with commercial-license contact details.
Multilingual README files
README.md, 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
Replaced generic AGPL wording with a linked [AGPL-3.0-or-later](LICENSE) notice and removed the “see LICENSE for full text” line; added an alternate commercial-license option and contact email (founders@manaflow.com) across language variants.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Possibly related PRs

Poem

🐇 Hop, hop, the clauses sing,

AGPL and commerce in a ring,
Across languages we knit the line,
Dual-license carrots, sweet and fine,
I nibble change and stamp it "fine."

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately summarizes the main change: adding dual licensing (AGPL + commercial) to the project.
Description check ✅ Passed The description covers the Summary section well but lacks comprehensive Testing and Demo sections; however, it includes sufficient context about the changes.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat-dual-license

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented Mar 24, 2026

Greptile Summary

This 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 LICENSE, contact email in READMEs) follows established projects like MinIO and Cal.com. The AGPL text itself is unchanged, and all 19 translated READMEs receive the same update.

Two issues are worth addressing before merge:

  • Missing CLA framework (P1 — CONTRIBUTING.md): The new clause states Manaflow "retains the right" to commercially relicense contributions, but this right does not automatically exist — it must be explicitly granted by each contributor. Without a signed CLA process, past contributors' code remains AGPL-only and cannot legally be offered under a commercial license. A proper CLA (e.g., via CLA Assistant) with explicit copyright sublicense language is needed to make the commercial licensing model legally sound.
  • "or later" dropped from README license identifiers (P2 — all READMEs): All 20 README files now say AGPL-3.0 rather than AGPL-3.0-or-later, inconsistent with the LICENSE preamble and the GitHub SPDX tag. The "or later" qualifier should be retained so readers get an accurate picture of the license scope without having to open the LICENSE file.

Confidence Score: 3/5

  • Safe to merge for documentation/branding purposes, but the commercial licensing model may lack legal enforceability without a proper CLA process in place.
  • The LICENSE and README changes are clean and follow established dual-licensing patterns. However, the CONTRIBUTING.md change introduces a legally weak clause that doesn't actually grant Manaflow the commercial sublicense rights it needs from contributors — a foundational gap that could undermine the entire commercial licensing strategy. This isn't a code correctness issue, but it is a concrete business risk that warrants a targeted fix before the PR is considered done.
  • CONTRIBUTING.md requires the most attention — the CLA language needs to be strengthened or a formal CLA process (e.g., CLA Assistant bot) should be set up alongside this change.

Important Files Changed

Filename Overview
CONTRIBUTING.md Added commercial relicensing clause that is legally insufficient — uses "retains the right" rather than explicitly obtaining a copyright grant from contributors; no CLA process in place.
LICENSE Dual-licensing preamble added above the unchanged AGPL-3.0 text; follows the MinIO/Cal.com pattern and correctly preserves the full AGPL body.
README.md License section updated to mention dual licensing and commercial contact; "or later" qualifier silently dropped from the AGPL version identifier (same issue in all 19 translated READMEs).
README.ja.md Japanese translation updated consistently with README.md; same "or later" omission applies.

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]
Loading

Reviews (1): Last reviewed commit: "Add dual licensing (AGPL + commercial)" | Re-trigger Greptile

Comment thread CONTRIBUTING.md Outdated
## 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.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 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:

  1. Past contributors who submitted PRs before this change never agreed to commercial relicensing of their code — their contributions remain AGPL-only.
  2. 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:

Suggested change
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.

Comment thread README.md Outdated
## 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).
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 "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:

Suggested change
cmux is open source under [AGPL-3.0](LICENSE).
cmux is open source under [AGPL-3.0-or-later](LICENSE).

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

📥 Commits

Reviewing files that changed from the base of the PR and between b5fb304 and e30748c.

📒 Files selected for processing (22)
  • CONTRIBUTING.md
  • LICENSE
  • 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.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

Comment thread README.ja.md Outdated
Comment thread README.md Outdated
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment thread README.md Outdated
## 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).
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Copy link
Copy Markdown

@cubic-dev-ai cubic-dev-ai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Comment thread README.md Outdated
Comment thread README.zh-CN.md Outdated
Comment thread README.it.md Outdated
Comment thread README.bs.md Outdated
Comment thread README.de.md Outdated
- 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
@lawrencecchen lawrencecchen merged commit 142c62c into main Mar 24, 2026
14 checks passed
bn-l pushed a commit to bn-l/cmux that referenced this pull request Apr 3, 2026
* 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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant