DEV Community

Dev Sahoo for HyScaler

Posted on AI-assisted

We relicensed HyCanvas from ELv2 to AGPL. Here's why

I work on HyCanvas at HyScaler, so read this as the maintainers' side of the story.

HyCanvas is a browser design tool in the Canva space: social graphics, slide decks, video editing, whiteboards, docs and sheets, with real-time collaboration. It ships as one Go binary with the web app embedded, and PostgreSQL is its only required service.

On October 15 we released v0.3.17, and with it the license changed. Everything up to v0.3.16 was under the Elastic License 2.0 (ELv2). From v0.3.17 onwards the code is under the GNU Affero General Public License v3, AGPL-3.0-only.

This post covers what ELv2 did and did not allow, why we moved, why we picked the AGPL over a permissive license, and the question everyone asks next: the CLA.

What ELv2 allowed, and what it didn't

ELv2 is a short, readable license, and for most people running HyCanvas it was fine. You could read the code, run it, modify it and self-host it. It has three limitations:

  • You may not provide the software to others as a hosted or managed service that gives them a substantial set of its features.
  • You may not disable or circumvent license key functionality.
  • You may not remove licensing or copyright notices.

The first one is the important one, and it is why ELv2 is not an open source license under the OSI definition. So for four months we described HyCanvas as "source-available", and every time we did, it needed a footnote.

Why we moved

"Open source" has a definition, and we wanted to meet it. The product's whole pitch is that you own your tools: free features on every plan, an open file format, self-hosting with one binary. Pairing that with a license that needs an asterisk undercut the point. The AGPL is OSI-approved, so the phrase now means what readers expect it to mean.

The hosting clause sat awkwardly with how people use it. Agencies run design tools for their clients. Schools and nonprofits run them for their members. Under ELv2, whether that counted as "providing a managed service" was a question someone had to think about. Under the AGPL, hosting it for others is allowed, with one condition that is easy to state (more on that below).

Self-hosting communities run on OSI licenses. Lists like awesome-selfhosted require one, and several communities waive their self-promotion limits for free and open source projects. Under ELv2 we were outside all of that, and those are exactly the people who would run HyCanvas.

Why the AGPL and not MIT or Apache

We considered a permissive license. The deciding factor was the network clause.

HyScaler sells hosting and support for HyCanvas. Every feature is in the open release; there is no paid edition of the software. With MIT or Apache 2.0, anyone could take the code, improve it, and run it as a closed hosted service, and none of those improvements would come back.

The AGPL closes that gap with one rule: if you distribute HyCanvas, or let people use a modified version over a network, you offer them the complete source of your version under the same license. Run it unmodified for anyone, or modify it for internal use, and you owe nothing.

That rule applies to us as well as to everyone else. For organizations that cannot accept it (embedding HyCanvas in a proprietary product, for example, or a policy against AGPL software), HyScaler offers a commercial license. That is the whole business model: hosting, support, and licenses for people who need different terms.

What this means for you

You want to Under the AGPL
Self-host it for yourself, your team or your company Go ahead, nothing to do
Host an unmodified copy for your clients or members Go ahead
Modify it for internal use Go ahead
Modify it and let others use it over a network Offer them your modified source under the AGPL
Fork and redistribute it Allowed, under the AGPL and with your own name and logo
Embed it in a closed product you distribute Needs a commercial license

The "own name and logo" part comes from a separate trademark policy (TRADEMARKS.md). The license covers the code; the policy covers the HyCanvas name, so people can tell an official build from a modified one. You can still say your fork is "based on HyCanvas".

The CLA question

HyCanvas asks contributors to sign a Contributor License Agreement, and AGPL plus a CLA makes experienced open source people wary. Fair enough, so here is exactly what it does.

The CLA is a license, not an assignment: you keep the copyright in your contribution. It lets HyScaler distribute your contribution under other terms as well, including commercial licenses. That is what makes dual licensing possible. Without it, every external contribution would be AGPL-only and we could not offer the commercial license that pays for development.

What it does not do is take anything back. Code released under the AGPL stays available under the AGPL, and anyone can fork any AGPL release. You can read the full text in CLA.md before you decide whether to contribute.

What didn't change

  • Releases up to and including v0.3.16 remain under ELv2. We are not relabelling them.
  • Every feature is in the AGPL release. Nothing moved behind a paywall to balance the change.
  • Install is the same: the multi-arch Docker image (amd64 and arm64) or a prebuilt binary for Linux, macOS and Windows, plus Postgres, then a first-run wizard in the browser.

Notes if you're planning a relicense

A few practical things we did that may help someone else:

  • Ship the license files in every artifact. Each release archive and Docker image now carries LICENSE, NOTICE, COMMERCIAL.md and TRADEMARKS.md, not only the repository.
  • Audit your dependencies' licenses first. Our in-browser background removal uses @imgly/background-removal, which is itself AGPL-3.0. That fits the AGPL release, but commercial licensees need their own license for it or must switch the feature off, and NOTICE says so.
  • Write the trademark policy at the same time. A license that allows forks without a name policy invites confusion over which build is official.
  • Say what happens to old releases, in the release notes and the FAQ, before anyone asks.

Try it

If you have questions about the license, ask in the comments. I'll answer them here rather than paraphrase the legal text; where the files in the repo say it better, I'll link them.

Top comments (0)