Add GPL-3.0 licence - #123
Conversation
Dotify had no licence, so default copyright applied and nobody could legally fork, reuse or contribute to it. GPL-3.0 keeps the work and its derivatives open, which matches the artist-sovereignty and cultural-commons framing in the README. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 6bc92a200c
ℹ️ 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".
| GNU GENERAL PUBLIC LICENSE | ||
| Version 3, 29 June 2007 |
There was a problem hiding this comment.
Align the contracts' explicit MIT licensing with GPL
When downstream users consume the EVM contracts, every file under contracts/evm/contracts/ still declares SPDX-License-Identifier: MIT, and web/scripts/generate-cdm-metadata.mjs publishes their license as MIT. Those explicit declarations permit proprietary reuse and conflict with the new repository-level GPL, so the intended copyleft does not cover a major subproject and automated license tooling will continue to identify it as MIT. Update the SPDX declarations and generated metadata, or explicitly document the contracts as an intentional MIT-licensed exception.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Confirmed, and fixed in 720dfa6. Thanks — this was a real gap.
Two precisions on the diagnosis. MIT and GPL-3.0 are not actually in conflict; MIT code combines into a GPL work fine. The real problem is precedence: a per-file SPDX declaration is more specific than a root LICENSE, and SPDX/REUSE tooling treats it as authoritative. So the contracts stayed MIT and anyone could have reused SmartRuntime.sol or the pallets in a closed product — the copyleft missed the layer that actually encodes the access, royalty and registry rules.
The scope was also wider than reported. Beyond the 27 .sol files and generate-cdm-metadata.mjs:46, the generated CDM metadata blobs carried "license": "MIT" too, and their CIDs are referenced by the registry.
What changed
- 27 SPDX headers →
GPL-3.0-only WITH Classpath-exception-2.0 web/scripts/generate-cdm-metadata.mjspublishes the same expression- CDM metadata regenerated; both CIDs changed
LICENSE-EXCEPTIONdocuments the scope and the reasoning
Why an exception rather than a bare GPL
An artist's SmartRuntime exists to be deployed and composed with. Under a bare GPL, any contract importing a Dotify pallet would arguably become a derivative work, which would make the runtime unusable for the artists it serves. Classpath-exception-2.0 is the same linking exception Parity applies to the Substrate client: the pallets stay copyleft, an importing contract keeps its own licence. The contracts have no external Solidity imports, so nothing upstream constrained the choice.
Verified: 27 contracts compile (solc accepts the expression), 53 contract tests pass, 323 web unit tests pass, lint clean apart from 3 pre-existing hook warnings, web build OK.
Two things deliberately left alone
contracts/evm/.cdm/ still shows MIT. It is a cache of published version 0, and version 0 was MIT — rewriting it would misrepresent what is on the network.
That is the real residual: the registry's metadata_uri still resolves to the old MIT blobs, and those CIDs are content-addressed, so that grant cannot be retracted for anyone already holding them. Republishing to Bulletin and updating the registry is a credentialed step, tracked separately.
The root LICENSE said GPL-3.0 while all 27 Solidity sources declared SPDX-License-Identifier: MIT. A per-file SPDX declaration is more specific than a root LICENSE, so the contracts stayed MIT and the copyleft did not reach the layer that encodes the access, royalty and registry rules. Relicense them as GPL-3.0-only WITH Classpath-exception-2.0, the same linking exception Parity applies to the Substrate client. The pallets stay copyleft; a contract importing them keeps its own licence, which artists deploying a SmartRuntime need. The contracts have no external Solidity imports, so no upstream licence constrained this choice. - 27 SPDX headers - web/scripts/generate-cdm-metadata.mjs publishes the same expression - regenerated CDM metadata blobs, which changes both CIDs Verified: 27 contracts compile, 53 contract tests pass, 323 web unit tests pass, lint clean apart from the 3 pre-existing hook warnings, web build OK. Follow-up needed: the registry still points at the old MIT metadata CIDs. Republishing to Bulletin and updating metadata_uri is a credentialed step. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Why
Dotify had no
LICENSEfile. Under default copyright that means all rights reserved: nobody could legally fork it, reuse any part of it, or contribute. That sits awkwardly against a project framed around artist sovereignty and music as a cultural commons.What this adds
The unmodified GPL-3.0 text at the repository root. GitHub will pick it up and show the licence on the repo page.
Why GPL-3.0 rather than a permissive licence
Copyleft keeps derivatives open, which is the point of a commons. A fork that improves the runtime or the room protocol has to stay open too.
Known limit, for the record
GPL-3.0 copyleft triggers on distribution, not on network use. Someone can fork Dotify, modify it, and run it as a closed hosted service without releasing anything. AGPL-3.0 would close that gap. We discussed it and chose GPL-3.0 for consistency with the rest of the portfolio; switching later is possible since you hold the copyright.
Targets
devrather thanmain, sincedevis 62 commits ahead.🤖 Generated with Claude Code