Please recommend me an open source license

I need open source license that:

  • Allows for linking/using in commercial, closed projects without opening them entirely.
  • But: requires any changes to the library/framework itself be pushed back to the project so it stays open and someone can’t just take it, implement some awesome stuff on top of it and sell it within the game. So game itself can be closed, but changes to the framework itself must be turned in.

As far as I can see it, neither GPL (virality of it, requiring to open whole game it is used within) nor MIT (opposite problem: Someone can just take your code, leave it to rot, extend it and just use) fit the bill. Any other license that would be good?

Closest matching license I’m aware of is the GNU Lesser GPL.

You should get a IP Lawyer to review and make appropriate modifications to your license. Another factor you have to consider all the other third party products that are used with this software if any. Each third party product license needs to be reviewed to make sure it is compatible with the new license you are crafting. Some third party products specifically state they cannot be used/exposed to open source license unless you have written permission from a given third party.

On the surface something like LGPL v2.x [which generally allows for dynamic linking only (e.g. Windows DLL) ] would work with commercial/closed software but require software changes to given back to the original project.

What is the main goal for this software? Do you want as many people as possible to use it so it becomes popular and a self sustaining project?

LGPL. Users will not be allowed to statically link with the framework, though, only dynamically. They will be required to release changes to the framework. Also the framework will have to be released as a dll (so you can’t just make it a bunch of *.cs/whatever files people can drop into their project).

I’d advise to consider MIT/BSD - this way maximum number of people would benefit from you work.

Another thing to remember, placing something under the LGPL (or GPL) does not mean that people who make changes to the code lose the copyright to those changes (from what I understand). That can make it difficult to license the code under another license later.

I believe that dual-licensing projects usually avoid this issue by adding extra agreement, which roughly means that “by submitting a patch you surrender your rihgts to the code in that patch to us”. That’s when they submit stuff to your repository.

In THEIR repository, they own their own changes. So, if you grab stuff from their repository and apply to your own repository, you’ll no longer be able to change the license (even if you were the one who originally created the project). When repository does not have “all your changes belong to us” agreement, then changing license technically requires approval of ALL contributors. When there’s only one contributor- that’s easy. However, when other people get involved, project essentially gets locked into opensource license as soon as one change is accepted - IF the project does not have that extra “give up your rights” clause contributors have to accept.

Either way, it is important to decide what the goal of the license is.

  • Earn money? → Proprietary.
  • Push your political views/ideology onto others? → GPL or LGPL, depending on degree of zealousness.
  • Make your work available for everyone so they can benefit from it? → MIT/BSD/CC0/Public Domain.
  • Goad people into buying proprietary version of your dual-licensed product? → GPL/LGPL.

Something like that.

4 Likes

The problem with MIT/BSD is that people can just run away with your code and sell it as their own (one reason CrossOver exists - once upon a time Wine was MIT-based, but then some jerk forked the code, closed it and started selling it as CrossOver). Meanwhile, LGPL or any GPL-based license is also out of the question as I want people to be able to link to it, statically or not, without having to open their entire game/project. But if they modify framework itself (e.g. improve one of the shaders), they have to contribute that specific change back so framework can benefit from improvements made by devs for their own games/products.

That’s the idea, yes. At the same time though I don’t want some company just taking the code and improve it without contributing back to the project. None of the mainstream opensource licenses fit my bill, but there’s so many of those that one might.

What I find highly amusing about your complaints and requirements is that they contradict each other. The GNU LGPL’s requirement, that you cannot statically link the code into your project without opening your project, exists solely to enforce the requirement that modifications to the code be available for everyone else.

If you want people to be able to use your code as a library (dynamic linking) but require that any changes to the code itself (static linking) be available to everyone else, then you absolutely do want the GNU Lesser GPL. That’s the entire point of it.

1 Like

As Ryiah said, that is the entire point of LGPL. The bit about it being un-statically-linkable is only there because it’s the only real way to enforce the idea that one part of the code is “the library” and the other is “the game”. If you just publish a big wall of code, and then say “You can use this big wall of code, but if you add anything to it you have to give it to me, unless you’re adding stuff I don’t care about like a game”… there’s no legal way to separate “stuff you want”, like a cool new shader, vs “stuff you don’t want”, like their inventory management code. Separating it into library vs not-library is what gives you that legal line.

1 Like

If you want my opinion, which I’m sure you don’t, either release it as MIT or don’t release it at all. If you’re the sort of person who gets into a tizzy about whether or not some random person on the internet is “running away with your code and selling it on their own” then you shouldn’t be sharing your code at all. Share your code only when you want to help out other coders. Sharing it just to try to get other people to help you by pushing free fixes while enforcing a byzantine system designed to stop them from “stealing” it is almost always just going to lead to arguments and heartache.

3 Likes

I don’t see a problem with that. If you want people to benefit from your work, that is.

Speaking of which, I think there’s there’s a law against them claiming that “they totally wrote the whole thing”. Might be wrong about it.

You should read LGPL license. If you link dynamicaly with LGPL code, you don’t have to release your own code. You will have to release changes to LGPLed code. So you put stuff into a dll, and release dll under LGPL. That’s literally the closest thing to what you want. There’s no other alternative I know of.

Your project must first be worth stealing.
Look, how many years did you spend programming?

It goes like this. If you spent less than a month writing something, then it is pretty much a tiny or even toy project. Meaning a “big evil company” can just use ONE engineer/programmer who will look at what kind algorithms you used, and then just develop a replacement tech from scratch in quarter of the time you spent on it. As a result they’ll get alternative to your library, which will not be placed under your license, and they’ll be able to develop competing tech and then SELL it (and destroy your initial opensource project with it too, because they have more manpower).

This kind of tactic won’t fly if original project is BIG or has been around for several years. You can’t replace linux kernel. It is literally impossible. Even if you’re google.

However, you are not writing a linux kernel.

//opinion:
Novices/beginner programmers tend to make that amusing mistake where they think that their code is extremely valuable and everybody will want to steal it. Most of the time it is not the case, the code is nothing special and someone will be able to make a knockoff of their work even without seeing the code - just by looking at the program.

The problem is that when someone with those “they evil corporations will steal my codes!” ideas actually writes something useful and slaps viral license on it because they don’t know the implications. GPL or even LGPL in some circumstances. That can possibly create situation where somebody will have to rewrite equivalent of existing code from scratch, just because original author was to greedy to put it under MIT, BSD, CC0 and the like. And that is one of the worst things a programmer can do to another programmer - because (in my opinion) people shouldn’t waste their time solving stuff that has already been solved by someone else. They should reuse the code and build on top of it instead.

So, my advice is the same: if you want people to benefit from your work and not push political views (or promote proprietary version of your dual-licensed project), release it under BSD, MIT, CC0, ZLib or public domain license. THAT will be definitely appreciated. Some of the very big projects (like Libsdl, Ogre3D) are using those. Ogre3D is mit-licensed and has been in development since 2001. Can your project top that?

2 Likes

Quick question, If I want to share the code/scripts that I have made, what is the open source license that is the most permissive/easily accessible?

Like is there is a public domain license equivalent for scripts or code?

Probably MIT or BSD, and you might find this site to be useful in making a license decision.

2 Likes

Thank you very much! I will use this to determine which license to use to share/release scripts/code that I am working on for a non-commercial project.

I also found this type of license as well http://unlicense.org/
Is this a common open source license that is also used or no?

1 Like
  • If you want to make a political statement, make it incompatible with unity and unreal and prevent maximum number of commercial projects from using it, you use GPL.
  • If you still want to make a political statement, but grudgingly allow evil corporations to use your code, you use LGPL. This will still be pretty incompatible in unity/unreal, because it only allows dynamic linking with proprietary codebase.
  • If you want maximum number of people to use your code, and don’t care about it being used in proprietary projects, you use CC0, Public Domain, Mit, BSD, ZLib, Apache, etc. Licesnes like that.
  • If you want a maximum number of people to benefit from your code, BUT you also want to force them to mention your name every time they use it, you use CC-BY (requires attribution).

That’s the rough idea of it.

The easiest way is to put your code under CC0, PublicDomain, and yeah, WTFPL and Unlicense would also work, although I would pick CC0 instead.

4 Likes

Yeah, I was just joking about WTFPL. If I was doing an open source project I’d probably use MIT.

just use MIT and if not dont even bother to make it public

3 Likes