Project

GPLv3 to MIT - the Transition

Why L2jMobius moved off copyleft, and the Ship-of-Theseus method it is using to get there cleanly.

Announced October 13th 2024. A gradual, file-by-file transition driven by clean-room re-implementation, not by global find-and-replace.

The shift, in one diagram:

   GPLv3 (copyleft)              MIT (permissive)
   ─────────────────              ─────────────────
   • Strong reciprocity        • Use anywhere
   • Derivatives must be       • Including proprietary
     open under GPLv3                products
   • Anti-patent clause         • Attribution + notice
                                     are the only conditions
   • Long, lawyer-heavy         • Short, plain English

Date announced:   October 13, 2024
Method:           file-by-file clean-room re-implementation
Copyright year:   stays at 2013 (legal continuity of the work)
Footer reality:   while in flight, both licenses coexist
                  - see each file's header

The viral catch - why the project as a whole still ships as GPLv3.

L2jMobius is a fork of L2jServer, which is GPLv3. GPL's reciprocity clause is "viral" by design: the aggregate work inherits the license of any GPL-licensed component it contains. As long as a single GPLv3-derived file remains in the codebase, the public release as a whole must continue to ship under GPLv3, even though a growing fraction of the individual source files internally carry the MIT header.

This is exactly the property that motivated the move in the first place: GPL inheritance is one of the reasons the original L2jServer license was constraining, and the project cannot wave it away just by deciding to. The license stamped on the release will only flip to MIT when the last GPLv3-derived file has been replaced via clean-room.

Practical consequence: if you are using L2jMobius today, you are using a GPLv3 project. Per-file headers tell you which sections of the codebase will become MIT-only when the transition completes, but until then, treat the whole thing as GPLv3 for compliance purposes.

Why move at all

GPLv3 was the right license for L2jMobius in 2013 because it was the license inherited from L2jServer. By 2024 it had become the wrong license for three reasons that compounded over time:

  • Adoption friction. Anyone wanting to use a fragment of L2jMobius code in a commercial product or a closed-source learning project was blocked by GPLv3's reciprocity terms. That friction discouraged the exact kind of cross-pollination an emulator project benefits from.
  • Audience. The project's audience is largely individual developers and small server operators, not large companies that need patent-grant clauses. The MIT terms map cleanly onto how the code is actually used.
  • Legacy of the request. The founder originally proposed relaxing the license in 2018 on the L2jServer forum (under the name Pandragon). That request was refused. L2jMobius now does, six years later, what the upstream project would not.

The Ship of Theseus, applied to source code

You cannot simply rewrite the LICENSE file and call the work done, the contributors who wrote individual classes under GPLv3 still own the copyright on those classes, and a global re-license needs either their explicit consent or a clean re-implementation. L2jMobius uses both, depending on the file:

For each GPLv3 file:

   • Author still active and consents
                       ─► relicense the existing file to MIT,
                          credit preserved in the header.

   • Author departed long ago, no objection
                       ─► assume good-faith consent, relicense.
                          Contact channel left open for objection.

   • File substantially reworked (>70% changed since
     original commit)
                       ─► treat as new work, relicense to MIT.
                          The "Ship of Theseus" plank has been replaced.

   • Author objects, or file is mostly untouched original
                       ─► clean-room re-implement: document the
                          behaviour, write a new file from spec, swap
                          the old plank out under MIT.

When all planks are swapped, the ship is MIT - without ever
having to cross the original copyright holders.

Clean-room and black-box, the two methods

Clean-room engineering

One person reads the GPLv3 file and writes a specification of what it does; its inputs, outputs, side effects, invariants. A second person, who has never seen the original source, implements a new MIT-licensed file from the specification only. Provided the spec contains behaviour and not code, the resulting file is legally distinct from the original.

Black-box analysis

Some components are easier to reproduce by observation than by spec. Feed inputs, capture outputs, write code that produces the same outputs from the same inputs. Used where the function is mechanical and the original is opaque.

Both methods serve the same goal: the new file shares no code with the old file, only behaviour. Copyright protects expression, not behaviour; so the new file is genuinely the project's own work.

The new file header

/*
 * Copyright (c) 2013 L2jMobius
 * 
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 * 
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
 * IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */

Why the year is still 2013. The copyright year reflects when the work was first created, not when the license changed. Bumping it to 2024 would suggest the file is a 2024 work, which would weaken the project's chain of authorship and create ambiguity about prior contributions. The year stays put. Only the license terms move.

What this means for you

If you are using L2jMobius code in your own project

Check the header of each file you touch. A file with the MIT header is yours to use under MIT terms. A file with the old GPLv3 header is still subject to GPLv3 until it is transitioned. Mixing the two without thinking will quietly contaminate your project.

If you contributed code in the past

You are invited to relicense your past contributions to MIT. If you do not respond, the project's policy is to assume good-faith consent (especially for files long inactive) and to flag your contact channel as open should you object. If you actively object, your file will be replaced via clean-room rather than relicensed.

If you are contributing now

New contributions go in under MIT. Use the MIT header above. Do not paste in GPLv3 fragments from elsewhere, that mixes licenses inside a single file and creates the exact ambiguity this transition is supposed to remove.

If you are watching the transition land

You will see a long tail of small commits whose only diff is the file header and (sometimes) a structural rewrite of the body. That is the Ship of Theseus, plank by plank. The functional behaviour of the server should not regress through any of these commits, the whole point is that the user-visible ship stays the same while its parts are being swapped underneath.

L2jMobius is the first L2j project to do this

L2jServer is GPLv3 and stayed GPLv3. Every public L2j fork has lived under the same terms because that was the only legal way to fork. L2jMobius is the first project in this lineage to attempt the transition to a permissive license, not by mass relicensing (which would not be enforceable for files written by departed contributors) but by gradually replacing the planks until the codebase is genuinely the project's own work.

The original announcement and the follow-up explaining the Ship-of-Theseus method live on the project forum: "Transitioning L2jMobius code license from GPLv3 to MIT" (Oct 13, 2024). Contributors who want their past code formally tracked through the transition can record their consent at topic 13051.