Their fork in question is: https://github.com/weiluntong/ProtonVPN-server-load

My original upstream code is: https://github.com/twenty5151/ProtonVPN-server-load

First, I am aware of the two related questions: Can someone fork my GPL licensed project and re-license it under MIT or BSD?, and Relicensing a fork of a GPL project and source code distribution requirements. However, the situation here is that they have significantly modified the code.

I know that in principle, it is a violation of the GPL. However, upon reviewing their changes, there is very little similarity to my upstream version. In their commit message, they noted that it is "sufficiently derivative", but I think they meant "sufficiently original". Indeed, my original code has three files in total, and their fork has completely removed my code. Their core logic here essentially shares no original code.

Are their claims of "sufficiently original" valid and does that justify the license change? Is it a "derivative work" of the GPL code anymore? How much does the code need to change to become "original work"?

Edit: reading https://softwareengineering.stackexchange.com/questions/81705/rewriting-gpl-code-to-change-license, the structure of the code is different, but two names/lines have been reused verbatim (out of the entire repo):

response = requests.get('https://api.protonmail.ch/vpn/logicals')
servers_dict = json.loads(response.text)

I don't think using requests.get on the url or loading its json is copyrightable work, but the names have not been changed, therefore it is still a "derivative work"? Or can it still be considered Fair Use?

  • "The structure of a program, or the organization of code into files and classes might be sufficiently creative to qualify for copyright protection" - I think the new structure and organization of the fork, especially the use of poetry, qualifies it as original. The remaining pieces of the original are the two lines and some of the README, but I think they qualify for either the merger doctrine or fair use, because a clean room implementation would likely feature them anyway: using requests.get and json.loads is pretty generic, and the readme has to document the same things. Thoughts? Jul 26, 2021 at 20:54
  • 3
    It does not really matter whether only two lines remain the same, or whether it was 200. Think about a translation of a book -- in a translation, the translator rewrites every single sentence of the original work from one language to another. Yet that translation is still considered a derivative work of the original.
    – Brandin
    Jul 27, 2021 at 12:24
  • 1
    Other than similar names, the two pieces of code (in vpn_servers.py) look more or less completely different to my eyes. I.e. they are two different programs. They don't even appear to do the same thing. One prints to the console, for example, the other just returns a list.
    – Brandin
    Jul 27, 2021 at 12:31
  • 1
  • 2
    Part of the issue is that GitHub makes it too easy to press "fork", and from there the 'forker' can just burn everything to the ground and start over if she wants (which is what seemed to have happened here). If these two programs were discovered independently of GitHub, it's unlikely one would say one is a "fork" of the other, though you could probably tell one was inspired by the other, based on the similar names.
    – Brandin
    Jul 27, 2021 at 15:55


Browse other questions tagged or ask your own question.