6

I recently received a "surprise" email asking a question about one of my GPL'ed projects, and referring to code downloaded from https://github.com/icaoberg/mimetex/ That was the first I ever heard about that GitHub project! Moreover, that code's now out-of-date compared with the code that I've been maintaining (ever since I originally wrote every single line of it) at http://www.forkosh.com/mimetex.html

Rereading the GPL, as best I can interpret it, I don't see it prohibiting that GitHub project... But I'd like to prohibit it! That is, you can use my code for your own purposes, under the GPL license restrictions, but I don't want you simply re-releasing it as your GitHub (or any other similar repository) fork or project. Especially not when your fork just lies there and gets stale. But really not at all: I'll be the maintainer of my code.

So How do I say that, license-wise? Right now, my code has a GPL comment block at the very top that looks like this:

/****************************************************************************
 *
 * Copyright(c) 2002-2017, John Forkosh Associates, Inc. All rights reserved.
 *           http://www.forkosh.com   mailto: john@forkosh.com
 * --------------------------------------------------------------------------
 * This file is part of mimeTeX, which is free software. You may redistribute
 * and/or modify it under the terms of the GNU General Public License,
 * version 3 or later, as published by the Free Software Foundation.
 *      MimeTeX is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY, not even the implied warranty of MERCHANTABILITY.
 * See the GNU General Public License for specific details.
 *      By using mimeTeX, you warrant that you have read, understood and
 * agreed to these terms and conditions, and that you possess the legal
 * right and ability to enter into this agreement and to use mimeTeX
 * in accordance with it.
 *      Your mimetex.zip distribution file should contain the file COPYING,
 * an ascii text copy of the GNU General Public License, version 3.
 * If not, point your browser to  http://www.gnu.org/licenses/
 * or write to the Free Software Foundation, Inc.,
 * 59 Temple Place, Suite 330,  Boston, MA 02111-1307 USA.
 * --------------------------------------------------------------------------
 * etc */

How can I modify that to incorporate these desired ideas?

 Edit
-------
As per comment to Steve Barnes, below...

I guess I should have made my objections clearer. The fork didn't bother me, per se. Indeed, it would be flattering if other developers picked up my code and kept working on it. But this guy just copied it to GitHub and never touched it, not then and not later. So it got stale. If you're going to fork a project, you should actually intend to do something, not just leave it for other people to unknowingly download years-old stale code, leaving the original developer to explain the problem. Why should I have to do more work because of his laziness, not even bothering to keep his own fork up-to-date?

13
  • 25
    If you don't want people copying, modifying and releasing your code, in what way is it open source? Just use a private/commercial license if you want to restrict use.
    – Brandin
    Nov 10, 2017 at 10:00
  • 5
    Another option is to release the code freely but protect a trademark. Normally to do this you will have to register your trademark and then actively protect it. Basically, you can permit people to copy and release your code, but not to use your trademark.
    – Brandin
    Nov 10, 2017 at 10:04
  • 11
    I just clicked on the link and the author was pretty clear about attribution on the front page "A fork of mimetex from John Forkosh." so I don't personally see where someone could get confused. The fault lies in whoever didn't read that message. You could restrict people from redistributing code, but then it wouldn't be open source anymore and therefore off-topic here.
    – Brandin
    Nov 10, 2017 at 10:13
  • 12
    This is not a forum for "Explaining your feelings." Yes, I can see how you could possibly be annoyed. But it doesn't matter. If it is open source, then others may copy it. Maybe they copy it and make no changes, or maybe they copy it and add tons of bugs. The best is that they make it clear "this is a fork" so that you everyone knows. And in this case that was done, so I think the real problem is the person who didn't even bother to read the attribution notice.
    – Brandin
    Nov 10, 2017 at 10:25
  • 4
    I'm voting to close this question as off-topic because the requested restrictions put it outside the Free Software Definition. Apr 13, 2018 at 3:27

7 Answers 7

29

Once you have Open Sourced some code other people can, and probably will, place it on other hosting services and there have been many times when everybody has been grateful for this because the original maintainer has moved on, lost interest or otherwise stopped maintaining the code and their original hosting has stopped.

If you find an out of date copy of your code on GitHub simply raise a ticket to point people to the maintained copy or better yet fork their GitHub project to one of your own and double push your changes to your normal location and to your GitHub one. When people see a branch that is years later and 100s of pushes in advance of their one they will mostly use it. The additional benefit is that you might get some PRs from your GitHub repo that reduce your own maintenance effort.

To reduce your efforts

Personally I would also look at setting a mail auto-responder/rule that looks for the URL of the stale branch in the body of any message and automatically replies with something along the lines of "If you are reporting a bug found in the code at httt.... please try the current, up to date code at .... before filing bug reports at ....."

7
  • 2
    At least raising an issue on their fork will let people know where to go - I forgot to mention one more point - adding it now. Nov 11, 2017 at 7:18
  • 1
    Thanks again, Steve. Yeah, I already have a procmail script that auto-replies to emails whose subject contains "mimetex" (and doesn't contain "noautoreply"), to answer the most often-asked questions, which had been getting tiresome to repeatedly answer manually. Modifying it to incorporate your suggestion should be pretty easy. Nov 11, 2017 at 7:44
  • 4
    @JohnForkosh It's obvious from the GitHub repo you are complaining about when it was updated (All files say "updated 3 years ago."). The precompiled binaries on your site, however, are even older. So one could say that the official site is not up-to-date either. Of course, as maintainer that is your prerogative.
    – Brandin
    Nov 11, 2017 at 10:14
  • 1
    @Brandin Re the precompiled binaries, yeah, I'd given up on them and should probably take them down. I no longer have any vaxstations or alphas to compile the VMS versions. And, at the moment, no windows boxes to conveniently compile a new win version (though I could easily get my hands on one if I really cared). And I thus haven't bothered keeping the linux binaries updated either -- anybody running linux has gcc (and if they can't type the one single line necessary to compile mimetex, they probably can't install a cgi either:). Nov 12, 2017 at 8:08
  • 2
    @JohnForkosh For windows builds it might be worth while looking into a free Appveyor account - ci.appveyor.com/signup/free which will automatically build your windows executables if you are using GitHub or BitBucket, (you can add a step to trigger a build if you are using other hosting). Nov 12, 2017 at 9:49
23

Bob wrote a GPL-licensed media player that I really liked, FooPlayer v1.0. Then Bob "updated" FooPlayer to 2.0 and decided to put ads in the software. He stopped offering the original 1.0 altogether. I didn't like that, so I found an old copy of 1.0 I had downloaded last year and uploaded it to GitHub.

What part of this process do you want to prevent? What you want simply isn't an open source license. As a licensee of an open source project I expect (and, indeed, am required to receive, per the Open Source Definition)

  1. the right to post an older version of the code that I like better,
  2. the right to publicly archive the project in case it disappears, and
  3. to be free from the onus of updating my mirror of a project if it happens to fall out of sync with mainline development (and if the project experiences a major fork, which branch am I supposed to sync with anyway?)

You are free to write a license that doesn't grant these rights, but you will not find a FLOSS license that suits your needs.

You are free to ask the maintainer of a clone of your project to please keep it up to date, or link to the "mainline" origin the you personally prefer, or to take down the out-of-date repo if it serves no purpose but to cause minor confusion. The maintainer of the copy is free to refuse. If your request is reasonable to them, they'll probably help you out. If instead the maintainer refuses your demands, seriously consider that they may have good reasons, and the license is operating exactly as intended -- after all, I am very proud to be hosting the ad-free FooPlayer 1.0, despite Bob's request that I take it down

4
  • Thanks for your remarks. In my case, the situation's exactly like you describe with, "the out-of-date repo...serves no purpose but to cause minor confusion". There are no ads, no nothing of that nature. Yeah, I guess I'll just ask the guy to take it down. Nov 12, 2017 at 8:17
  • 2
    @JohnForkosh The example about ads was only an example. If it is an open source, the rights include permission to copy and redistribute older versions. The older version was not posted to cause confusion and clearly indicates the original author. Rather than ask the forker to take it down, it would be more reasonable to ask him to update it to version x.yz or the latest version. Before that you should probably update your site to make it clear which version is the latest.
    – Brandin
    Nov 13, 2017 at 11:41
  • 4
    @JohnForkosh Sure, I only meant to show (though I could have made more explicit) that there is no way to avoid the case you now face without also blocking the very helpful case in my answer. This fork and my hypothetical no-ads fork are mechanically indistinguishable; the only difference is the intent of the person doing the fork, which isn't something you can easily regulate in a legally-sound license.
    – apsillers
    Nov 13, 2017 at 13:12
  • I've had the much more reasonable situation of a community of users of my software who want to carry on using an old version because it runs on a platform that I no longer wish to support. The only problem for me is that people outside that community don't always realise that they are using an ancient version, which causes reputational damage. Aug 6, 2019 at 15:37
10

As long as you use open source your wish is impossible. Actually it is essential part of open source to allow the easy access and publish ability of the source code. Todo so without notifying the original author.

The are some limitations, e.g. changing the license, using in combination with some other licenses, switching the author ...

You have no right to let this version on github removed. But just ask the guy publishing to add a line to README to add you as author and the age of it, were the actual current code is. You can also ask to remove it. But the later is actually non open source.

3
  • Okay, but how would you feel as an end user, downloading a program you wanted to use, installing it, and then finding it had a bug, and then taking the trouble to document the bug and emailing the author, just to find out you'd downloaded stale code, and the bug had been fixed years ago? Moreover, I didn't ask the user who emailed me, but I'd guess he first emailed the guy who forked the code, and got no answer or an inadequate answer. I guess there should be some better form of "source/version control" for forks, not just willy-nilly copying projects all over the place. Nov 11, 2017 at 7:34
  • 6
    @JohnForkosh According to the README in the "stale" GitHub repository, the version there is "Version 1.74", while the .zip file from your Web site also says in its README "Version 1.74." So as an end user I would assume they are the same version. I notice your Web page itself says "(for mimeTeX version 1.75)" so maybe something in your distribution is also out of date. Putting the version number in the file name would also help. E.g. mimetex-1.75.zip.
    – Brandin
    Nov 11, 2017 at 10:06
  • 1
    @Brandin Oops, my bad re the readme, which I apparently haven't kept up-to-date. But the code itself says "version 1.76, last revised 11 July 2017" (and mimetex's \version command dynamically displays that info). Nov 12, 2017 at 7:58
9

What you can do is require the users to

use my code as per the GNU GPL, but don't put it on GitHub under the same name

Such a policy can be implemented using a trademark. GPL doesn't allow you to restrict source code distribution, but it doesn't prevent you from protecting your software's name (and the logo, if your software has one) from unauthorized use.

Note that while most businesses register their trade marks to insure their legal status (and pay registration and renewal fees), there's no strict requirement to do that. At the very least, it is advised to use the trademark legend (™) after the name of your software (that is, mimeTeX™) to show your intention to use the said name as a trade mark.

Then, if someone makes your software available under the same name, you can ask them to rename their project, or clearly state in the description where the original project is hosted, and follow up with GitHub if they refuse. You'll have to provide reasonable proofs of ownership and precedence of your site over the GitHub repo if you want to succeed. If, as you say, the GitHub repo contains an older version from your site, and your site made it to the web archives, that should not be too difficult.

If both the author and GitHub turn down your request, the only recourse you have is to dispute the trademark rights in court. That's how Python project managed to dispute the domain name python.co.uk (they didn't have a registered trade mark at the time, just like you). It will require quite a bit of effort and investment, and sometimes is not possible at all depending on country laws involved. For a personal / hobby project, you will probably choose to avoid that fight.

13
  • 1
    Thanks for the additional suggestion, Dmitry. Yeah, I have my s-corp's logo trademarked (see forkosh.com upper-left corner), which cost $375USD in the 1980's plus $100 in the fifth year after registration. I also copyrighted the logo using the Visual Arts (VA) copyright form (which was just $35 in the 1980's). And I always officially copyright (using Form TX) all my GPL'ed software, but trademarking it is a bit more effort than I'd usually care to do. However, if some program I write ever strikes me as a potentially serious commercial venture, then I may very well do that. Thanks. Mar 8, 2019 at 3:45
  • This is probably not workable unless you internally create a distinction between your trademarked product and its open source components. Ie, the GPL does not let you require that someone do a global rename on the code before sharing it in accordance with the GPL. Or you can have a dual license where you alone are allowed to have a proprietary version; but that limits your ability to incorporate other GPL pieces, and may limit contributions. Aug 5, 2019 at 15:26
  • @ChrisStratton: It should be workable to (1) include a link to the official site in the official branch and (2) require that modified versions use a different name under clause 5 of GPLv3. In fact, you can also require modified versions to include a link to the official distribution, under clause 7b of GPLv3. However none of this can be done retroactively.
    – Ben Voigt
    Aug 5, 2019 at 16:14
  • @BenVoigt Section 5 requires a notice that a modification has been made, it does not prevent keeping the basic project name embedded in the code and it does not even cover the situation at hand where it no modification has been made. A true fork should probably get a new or at least hyphenated name, a simple bugfix less so, a mere archive needs no change. Section 7 requires keeping notices intact, if that originally included a link they they could not remove it, but it doesn't allow forcing someone to keep a link up to date if the location changes, or, as you did say, to add one now. Aug 5, 2019 at 16:38
  • 2
    Consider for example the usual case where someone "mechanically" forks a project on github, makes a bug fix, and submits a pull request. No renaming is appropriate, and in fact a rename that touched any contents (vs external metadata controlling what github calls it) would make a mess of pull requests. It doesn't actually matter if the original is not on github. Remember the original intent of the GPL is for software to have user-maintainable parts inside. The goal is to establish a right of repair and to share the repair, but yes it is necessary to avoid misleading recipients. Aug 5, 2019 at 16:51
5

The way to prevent this is to not make your project open source.

No, really. What do you think open source means?

11
  • 3
    @JohnForkosh Open source does not mean whatever your license says it means. That's like saying that "bread" means whatever the recipe I'm using says it means. Both "open source" and "bread" have particular meanings. If I have a recipe for nachos and I change the word "nachos" to "bread" that doesn't mean it's a recipe for bread, it just means it's incorrect...
    – user253751
    Dec 20, 2017 at 9:35
  • 3
    @JohnForkosh Also GPL exceptions only allow you to give people more rights, not take them away (for that it would have to not be GPL any more).
    – user253751
    Dec 20, 2017 at 9:36
  • 4
    @JohnForkosh Sure. But none of the types of bread is a liquid, because then it wouldn't be bread. Likewise no open source license prevents someone from modifying the source (or not modifying it) and redistributing it, because then it wouldn't be open source. Bread is a kind of solid food. Open source is a movement for letting people modify and redistribute source.
    – user253751
    Dec 21, 2017 at 20:32
  • 4
    @JohnForkosh The versions of the GPL itself are copyrighted, and come with a license to reproduce as desired but not modify. If you take language from any GPL and incorporate it into your own license, you're violating copyright. Sep 28, 2018 at 17:41
  • 3
    @DavidThornley The FSF has granted a blanket permission to reuse the terms and text (but, importantly, not the preamble) of the GPL in totally new (and differently-named) licenses in this GPL FAQ item: gnu.org/licenses/gpl-faq.en.html#ModifyGPL (See also opensource.stackexchange.com/a/254/50)
    – apsillers
    Aug 5, 2019 at 20:02
2

GPL "with exceptions" (usually quite a murky area since the license text and license number and identification lose meaning) is incompatible with other GPLed software and thus you lose a lot of what the GPL is actually about.

Note that Stallman has strong politicial leanings and opinions and goals while the GPL steers clear of anything but his principal goals in writing it. The point is that it takes a lot of discipline to make a license do what it is good at and leave things off that it isn't as good as, particularly if you want others to join your efforts.

If you can't let your license do your job without more damage than utility, you have to do it manually. Stallman has a full speaker schedule. In your case, the work is manually contacting the GitHub project contact and registering a ticket for upgrading the repository to your current version. If you have an announcement mailing list for new releases, it may be worth suggesting to the GitHub project maintainer to subscribe.

And so on. This is not zero-maintenance but a bit like whack-a-mole but getting the license to help here in its indiscriminate way is not going to really help a lot.

2
  • 3
    Normally the "exceptions" mechanism of GPL is used to give an additional permission. An example is the "GPL with linking exception" -- but in that example the "exception" actually gives you more permissions than the GPL normally does. I'm not sure how you could use this mechanism to take away a permission from the GPL (e.g. "you are allowed to redistribute the Source, as long as you make non-trivial changes") while still saying that your license is the GPL. You would basically need to write a new license that is GPL-like (but not GPL).
    – Brandin
    Aug 5, 2019 at 13:51
  • 2
    GPL-with-exceptions will be a barrier against use. I know what "licensed under GPL" means, and much more importantly so does the corporate legal & IT department. So if it's under GPL I have an easy pathway to using the tool, if it isn't then I have to read & think about the license, then try to get Legal to do the same. Which immediately makes adopting this software about the most time-consuming option, possibly even worse than just hacking up something crappier-but-barely-functional. Aug 6, 2019 at 10:12
1

One way to mitigate this issue is to clearly and conspicuously include the URL to the official website and/or repository in multiple places in your project.

Someone who makes a copy and does not change anything (or very little) is not going to bother changing these references.

For GitHub in particular, make sure you have a README.md file that links back to the official project. GitHub displays that file automatically.

Perhaps mention that to get the latest version, go to a particular URL.

If someone forks your project and makes significant changes, they are welcome to change these notices. But they should be using a different name for the project in that case. And that is a different scenario than discussed in the original question.

2
  • How does including URLs in various places prevent me from copying the project and putting it on GitHub, though? Copying and putting something on GitHub (or putting it anywhere) is generally allowed by open source licenses. Granted, having all the URLs in there may make it more obvious where that software came from, in case somehow it was not clear already (e.g. in case I didn't press the "fork" button in GitHub). Also, I think most programmers know about global search and replace, so if they really want, and changing all those URLs would be allowed by most open source licenses.
    – Brandin
    Jun 20, 2022 at 8:59
  • Of course, they can. But if someone went through all of that trouble, they probably changed other parts of your source code too. It truly would be a fork in that case, and it is no longer a copy of your script. Your biggest danger is people posting a copy of your code to GitHub and then never changing it. This helps mitigate that particular situation. Jun 20, 2022 at 15:08

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.