makeplane / makeplane/plane

apps/api/plane/utils/email.py carries a commercial license header in an AGPL-3.0 repository

Open
#9,595 0 comments 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
TypeScript
Stars
59.6k
Forks
5.8k
Avg merge
1d 22h
Merged PRs (30d)
49

Description

apps/api/plane/utils/email.py is the only file in apps/api/plane/utils/ whose header does not say AGPL-3.0-only. It says:

# SPDX-FileCopyrightText: 2023-present Plane Software, Inc.
# SPDX-License-Identifier: LicenseRef-Plane-Commercial
#
# Licensed under the Plane Commercial License (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# https://plane.so/legals/eula
#
# DO NOT remove or modify this notice.
# NOTICE: Proprietary and confidential. Unauthorized use or distribution is prohibited.

This looks unintentional, and I think it is worth a quick check.

Why it looks like a template slip

The repository is AGPL. LICENSE.txt is the GNU AGPL v3, and COPYRIGHT.txt reads:

Copyright (c) 2023-present Plane Software, Inc. and contributors
SPDX-License-Identifier: AGPL-3.0-only

The file lives in core, not in an enterprise directory. apps/api/plane/utils/ is ordinary shared code, and the module itself is a helper that turns an HTML email template into plain text.

It is the only exception in its directory. Every other .py file under apps/api/plane/utils/ carries the AGPL header.

It arrived with the header already in place, in f0dcf66167 ("[WEB-5917] fix: generate clean plain text from HTML email template", #8535). That same commit updated eight files under apps/api/plane/bgtasks/, and all of them carry the AGPL header.

addlicense would not correct this. COPYRIGHT_CHECK.md documents the check you run:

addlicense --check -f COPYRIGHT.txt -ignore "**/migrations/**" $(git ls-files '*.py')

addlicense adds a header where none exists, but it leaves an existing one alone. A file that arrives with a different header therefore passes unnoticed.

Why it matters to people outside the team

Self-hosters, packagers and anyone forking the repository read these headers to decide what they may redistribute. As it stands, one file in the default installation says redistribution is prohibited, while the repository it ships in is AGPL and requires the complete corresponding source to be available. Removing the file is not an option either, since the application does not run without it.

That leaves no clean reading, which is why I am asking rather than guessing.

Suggested fix

If the file is meant to be AGPL like the rest of core, replacing the header with the standard one would resolve it.

If it is genuinely meant to be under the commercial license, a short note in the docs would help, so that self-hosters know which parts of a default installation they may pass on.

Happy to open a PR for the header change if that is the direction you want.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Compare the header in apps/api/plane/utils/email.py with the AGPL guidance in LICENSE.txt, COPYRIGHT.txt, and COPYRIGHT_CHECK.md. Confirm with maintainers whether this core helper should use the repository’s standard license header; if so, update only that notice and run the documented addlicense check.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
documentation
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
58/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.