Skip to content

Evaluate license adjustment for the Moodle plugins (mod_exeweb, mod_exescorm): GPLv3 or AGPLv3? #1895

@erseco

Description

@erseco

Context

We've been asked to evaluate aligning the license of the Moodle plugins with eXeLearning's, which is distributed under GNU AGPL v3.0 (see the repo's own description: "eXeLearning is an AGPL-licensed free/libre tool…").

Affected plugins:

Opening this issue to document the analysis and record the recommendation before changing anything.

Current licensing state of the plugins

After reviewing both repos, they are already licensed as GPLv3 or later, which is the Moodle standard:

@license headers LICENSE file README
mod_exeweb GNU GPL v3 or later (all) ❌ missing says "version 2 of the License" ⚠️
mod_exescorm GNU GPL v3 or later (all) ✅ full GPLv3 says "version 2 of the License" ⚠️

In other words, the requested migration would be GPLv3 → AGPLv3, not moving from an "unlicensed" state.

Moodle's official recommendations

  1. Moodle core is GPLv3 or later. (License — Moodle Developer Resources)

  2. The plugin files that implement the interface with the core MUST be GPLv3 (or later). Verbatim quote from the contribution checklist:

    "All files that implement the interface between the Moodle core and the plugin must be licensed under GNU GPL v3 (or later)."

    Bundled third-party libraries may use another license as long as it is GPL-compatible. (Plugin contribution checklist — Moodle Developer Resources)

  3. Moodle does NOT use AGPL. The community guidance explains it: a plugin is loaded and executed as part of the core (a combined/derivative work), so under GPLv3 §5 the whole must be licensed as GPLv3; and it explicitly notes that "there is a separate licence called AGPL, which Moodle does NOT use." (Plugins and licensing — Moodle.org)

Analysis: GPLv3 vs AGPLv3 for these plugins

  • A Moodle plugin is not a standalone application: it is integrated into and executed within the Moodle core, forming a combined work with GPLv3 code. The obligation to license the whole as GPLv3-or-later therefore falls on the plugin.
  • AGPLv3 and GPLv3 are mutually compatible by design (each one's §13 clause allows combining them in a single program), so technically they could be combined. But the result is not "pure GPLv3": it would carry AGPL's §13 network source-disclosure obligation to any Moodle site that installs the plugin — something the Moodle ecosystem neither expects nor requires.
  • The Moodle Plugins Directory and the contribution guidelines assume GPLv3. Publishing a plugin as AGPL conflicts directly with the requirement quoted above and could be rejected or flagged.
  • The fact that eXeLearning (the application) is AGPL is consistent: it is a web/standalone service where AGPL's network clause makes sense. A Moodle plugin is a different distribution context, whose standard is GPLv3.

Recommendation

Keep the plugins as GNU GPL v3 or later and do NOT migrate to AGPLv3.

Summary of reasons: it is what Moodle explicitly requires for plugins, it is what they already have today (no real header change needed), it avoids imposing AGPL's network obligations on third-party Moodle sites, and it preserves compatibility with the Plugins Directory. License alignment with eXeLearning applies to the application, not to the Moodle extensions, which must follow the rules of their own ecosystem.

Minor cleanups suggested (independent of the licensing decision)

If keeping GPLv3 is confirmed, it's worth fixing these inconsistencies (no license change involved):

  • mod_exeweb: add the LICENSE file with the full GPLv3 text (currently missing).
  • mod_exeweb and mod_exescorm: fix the "License" section of the README.md, which says "version 2 of the License" while the headers and LICENSE are v3.

Validation

@cristinavaldera @ignaciogros — this is the recommendation (keep it as GPLv3, do not move to AGPL) with Moodle's references. Could you validate it before we touch the repos? If you agree, I'll open the PRs with just the minor cleanups above.

Metadata

Metadata

Labels

documentationImprovements or additions to documentation

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions