7

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: [email protected]
 * --------------------------------------------------------------------------
 * 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?

1

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 ....."

8
  • 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. Commented 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. Commented 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
    Commented Nov 11, 2017 at 10:14
  • 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). Commented Nov 12, 2017 at 9:49
  • 2
    I found this question by accident in 2023: it seems the author's website is down, while the GitHub repo is still online. This fact proves your point quite well. Commented Jun 14, 2023 at 9:37
25

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. Commented 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
    Commented 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
    Commented 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. Commented 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. Commented 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
    Commented 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). Commented 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.

2
  • 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. Commented Mar 8, 2019 at 3:45
  • Comments have been moved to chat; please do not continue the discussion here. Before posting a comment below this one, please review the purposes of comments. Comments that do not request clarification or suggest improvements usually belong as an answer, on Open Source Meta, or in Open Source Chat. Comments continuing discussion may be removed.
    – MadHatter
    Commented Jul 1 at 5:02
6

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

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

1
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
    Commented 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. Commented 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
    Commented 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. Commented Jun 20, 2022 at 15:08

Your Answer

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

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