From 0939c5ff99adf3c034c04e94b783996163bbe8e1 Mon Sep 17 00:00:00 2001 From: Remis Lape Date: Fri, 11 Sep 2026 11:12:48 +0100 Subject: [PATCH] Declare GPL-2.0-or-later, not GPL-2.0-only The metadata over-claimed restriction relative to the code it describes. No file in scalcs/ carries a licence notice of any kind, and LICENSE.MD is the bare GPL version 2 text whose own section 9 says that where a program specifies no version number, a recipient may choose any version the Free Software Foundation has published. The "only" existed in pyproject.toml and nowhere else. It became a real constraint rather than a cosmetic one when the fitting layer was placed in HJCFIT, which is GPL-3.0-or-later and now needs SCALCS for mechanism handling. GPL-2.0-only and GPL-3.0 are mutually incompatible, so the combination could not have been distributed at all. MIT was considered and rejected, for three independent reasons. SCALCS is not one person's copyright -- 70 commits from Christoph Schmidt-Hieber and one from Jens Hedegaard Nielsen -- so a permissive relicence needs their agreement, which is a conversation rather than a commit. Parts of the package are re-implemented from the DCPROGS Fortran, which is GPL, and popen.py says so of HJC_HILL.FOR; MIT would assert that none of that is a derivative work, which is the stronger claim to have to defend. And it buys nothing for this architecture, since GPL-3.0-or-later HJCFIT can consume GPL-2.0-or-later without difficulty. The benefit of MIT would be to third parties outside the GPL world, which is worth revisiting on its own terms rather than as a side effect of a dependency decision. The README now states the version where a reader will look, since no source file does. Verified: the built wheel's metadata reads License-Expression: GPL-2.0-or-later, and twine check passes on both artifacts. Co-Authored-By: Claude Opus 5 --- README.md | 16 ++++++++++++++++ pyproject.toml | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 2040bc9..c5c5e53 100644 --- a/README.md +++ b/README.md @@ -83,3 +83,19 @@ CHS96: Colquhoun D, Hawkes AG, Srodzinski K (1996) Joint distributions of apparent open and shut times of single-ion channels and maximum likelihood fitting of mechanisms. Phil Trans R Soc Lond A 354, 2555-2590. + +## Licence + +GPL-2.0-or-later. `LICENSE.MD` is the GNU General Public License version 2; as +the program specifies no version number in its own source files, section 9 of +that licence already permits choosing any later version, and the package +metadata now says so rather than claiming `GPL-2.0-only`. + +That matters because HJCFIT is GPL-3.0-or-later and now depends on SCALCS for +mechanism handling: `GPL-2.0-only` and GPL-3.0 are mutually incompatible, and +the combination could not have been distributed. + +Some of this code is re-implemented from the DCPROGS Fortran, which is GPL +(`popen.py` says so of `HJC_HILL.FOR`), so a permissive licence is not +available without settling that and without the agreement of the other +copyright holders. diff --git a/pyproject.toml b/pyproject.toml index 29155be..05485a2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,7 +10,7 @@ authors = [ { name = "Remigijus Lape", email = "r.lape@ucl.ac.uk" }, { name = "Christoph Schmidt-Hieber" }, ] -license = "GPL-2.0-only" +license = "GPL-2.0-or-later" license-files = ["LICENSE.MD"] readme = "README.md" requires-python = ">=3.10"