Licensing and Copyright

I was hoping someone could clarify this for me. As I understand it, jME is licensed via BSD, basically making it free for anyone to use/alter/package-into-a-commercial-app/etc… However, I also noticed that every .java file has a big copyright header above it that includes the following:



* * Redistributions in binary form must reproduce the above copyright
*  notice, this list of conditions and the following disclaimer in the
*  documentation and/or other materials provided with the distribution.


However, in the case of a web-based distributable, no materials will be provided except for the binary data and perhaps digital documentation. Now, the below excerpt is also an issue:


* * Neither the name of 'jMonkeyEngine' nor the names of its contributors
*  may be used to endorse or promote products derived from this software
*  without specific prior written permission.


By including the said copyright notice in-game or in-documentation, we're including the jME name, which, purposefully or not, will contribute to marketing for good or for bad (most likely for the good of course  ;) ).

Just to clear all of this up... if we use jME (which, in my case, I'd only be using a small portion of it and implementing it into my own engine)... what would you like us to do?

My interpretation of this was that it should be in docs, readme.txt or something like an about box. And when you state 'uses jME' you are not promoting anything, are you?

Maybe it gets problematic if you would state "best quality assured by jMonkeyEngine". :slight_smile:



But I'm no lawyer, either…

elias4444 said:

I was hoping someone could clarify this for me. As I understand it, jME is licensed via BSD, basically making it free for anyone to use/alter/package-into-a-commercial-app/etc.. However, I also noticed that every .java file has a big copyright header above it that includes the following:


* * Redistributions in binary form must reproduce the above copyright
*

this kind of topic belongs somewhere in the wiki or in a faq.

i suppose i'll have to study this topic again when i make the first release of my project, as i want to give credits to jme and its contributors and eventually use the jme logo, but don't want to violate any license.  :expressionless:

Neither the name of 'jMonkeyEngine' nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.


An e-mail will suffice.

Pretty much it is just to protect us from someone releasing "Dog Fucker 2" and plastering our name all over it.

Dang it, pre-emptively shut-down…that sucks!  :cry:



darkfrog

mojomonk said:

Pretty much it is just to protect us from someone releasing "Dog Fucker 2" and plastering our name all over it.


hahaha a very ambitious project, even releasing a version 2  :D

I've been reading up a little bit about Sun's move to open source Java under GPLV2 with some of it being licensed under GPLV2+classpath exception.



The classpath exception allows developers to link to the compiled GPL'd software without GPL'ing their own software (a good thing if you're developing a proprietary game):



GNU Classpath License - GNU Project - Free Software Foundation (FSF)


    Linking this library statically or dynamically with other modules is making a combined work based on this library. Thus, the terms and conditions of the GNU General Public License cover the whole combination.

    As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version.


The GPLv2 + classpath exception, is almost identical to the LGPL, in that LGPL allows you to link to the compiled library without being blanketed by the GPL (IE: having to contribute your proprietary code). Although the wording in the LGPL is a little vague and has some exceptions that aren't that clear in a Java environment(see section 5 of the LGPL "TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION"). The classpath exception makes the intended use very clear.

I'm trying to decide what type of license to use when releasing source code that I want to be able to use in a proprietary closed source game.

The real conflict is that, I could open source my game libraries using a BSD license which gives you the most freedom to modify and redistribute the code anyway you like. The problem with that is you have to rely on the developer community of that library to want to contribute back to the source code, otherwise they could just grab it make awesome modifications and keep it for themselves (which is sometimes what you want to do anyways!).

I think with a project like jMonkeyEngine BSD will work because, the engine is the core functionality for game development and benefits all game developers, it's not like it's the specific code that implements a first person shooter, or a massive multiplayer RPG. This combined with a strong community, promotes people to contribute back to the jME open source code base.

The problem with using a BSD license for something like say a game scripting framework is that I would want people to be able to use it as they will (open source, proprietary), but I want some way that kind of "forces" users to contribute back any changes they make to the core scripting engine (but still allow them to utilize the library in their proprietary projects). In this sense I think the GPLV2 license with the classpath exception makes the most sense.

I think maybe even jMonkeyEngine could be released under this license, because it still allows proprietary developers to make extensions and add proprietary features to jME (they can still extend, and implement any class/interface in the compiled jME), but it forces them to contribute back any modifications/improvements/bug fixes they make to the core engine.

It's all a trade off...BSD gives you all the freedom you could want proprietary and open source but provides no mechanism to ensure that the community receives all the available improvements/modifications that are made with that core technology. While the GPL license allows the freedom to develop proprietary software based on the compiled engine, but if they modify/improve the core (not simply link to it), then they are forced to contribute that back.

Another cool thing to do with proprietary games, is to release them under GPL after they've reached their commercial "end of life" like John Carmack has done with the Quake engines.


Another conflicting thing that came up with Sun's open sourcing, is the fact that they still somehow maintain the right to make commercial releases from the GPL code, even though it is GPL'd because you sign the SCA you and Sun have dual-ownership of your contributions?? I guess this is something to do with the fact that they are the "original" copyright holders so they can change the license at will?

I might be getting this all wrong, but I think companies like mySQL have similiar dual-licensing schemes, where you have to use the commercial license for proprietary software, or you have to use the open source GPL license which means you must contribute your changes back to them??

Which implies that they can then take your, forced to contribute changes and sell them for a profit?? This seems like a major unethical loop-hole in the dual-licensing GPL system? Can anyone clear up how that makes any sense?

I guess the only thing I can think of is that the creator of the project is a copyright holder and can license the source code any way they want, and then someone who uses the system is a contributor and only has the rights of the license they received the source code with? What does that mean for the contributor who wants to contribute their modifications back, but doesn't want their changes to be exploited by MySQL's commercial license?? Is this where open source project forks come into play? I'd assume they have to have complete control over what code is GPL'd and what code is their proprietary commercial code? Seems like that creates the exact thing GPL wants to protect against.


Here's some good open source/free software licensing sites:

Free Software Foundation - Licenses
Why you should not use LGPL



Another interesting open source + game development item, is Linden Lab's open sourcing of parts of their Second Life Game.

http://secondlife.com/developers/opensource

http://blogs.guardian.co.uk/games/archives/2007/01/15/second_life_goes_open_source_and_other_virtual_world_news.html



I've only played around a little bit on second life but it seems extremely open ended, scriptable, and just extremely customizable, with all the user-mods already made in game I can only imagine what the core mods and other virtual communities created from this open sourcing will be like!



Should be cool to see where it goes, and maybe dive in!


dougnukem said:

I would want people to be able to use it as they will (open source, proprietary), but I want some way that kind of "forces" users to contribute back any changes they make to the core scripting engine.


Whilst there are *some* enlightened companies out there, all the companies I have worked for are not. They refuse to let anyone release source code. That means that even bug fixes are not allowed to be released back to the community from which they got the software. I have a similar clause in the license I made up for my own software and have requests along the lines of 'If we pay ou x, can we just have it please, with no restrictions'.

I believe that if you use FOSS and modify/fix things, you should submit those changes, or at least make the freely available, but I've yet to work for a company that agrees.

I know Three Rings commited some changes and fixes to jME, and Oddlabs have been very generous with JInput, but these seem to be the exception rather than the rule.

Endolf

Well, it all hinges on what is considered a "public" interface. Java's is very well published and open to implememtation for anyone (as long as you don't call it "Java').



A good example would be if you have a program that uses XML-DOM. If the user has a DOM library installed that's GPLed, and your program uses it, does that make it GPL? Of course not…



An actual example are the MySQL drivers, such as the JDBC driver. MySQL AB thinks you should pay for them if you don't use a GPL program. But how can you even know what users pick when you build a program that can deal with MySQL, or even just JDBC in general… the drivers are identical, it's only a difference in the license.



The 'weight' falls of whoever makes the program and distributes it there, but can you hold the user responsible for putting two libraries together?



The same can be applied to a Java VM as you can imagine.

dougnukem said:

Also just as a little thought experiment what stops you from creating a "interface" library that provides a layer between you and the GPL library, then releasing that as GPL, but because you have rights to that "interface" code you can release it under anything you want.


IANAL, but that interface code links against the GPLed software, which then means you have to release that interface code as GPL. Then, anything that links to that, but be GPLed too. Thats why some poeple refer to the GPL as viral.

Endolf

Well tha's not the point. The point is if you create an interface, or a specification if you like… and then "implement" it, using GPL software (so the derative is GPL), you can argue that when you have another program that you are making, that it link against the license-agnostic interface (the "specification"), not specific the GPL implementation of it.



For example: let's say there's a neat GPL lib "gnuweather" that calculates the weather in several places in the world, it has a method:

boolean getWeather(String type, String town) {…}



Then I say, I make a new Java interface, and publish it online so other people can make implementations of it too. My interface :

public inteface RainObject {

boolean isRainingInAmsterdam();

}



Then I make an implemention ("gnuRainy"), using gnuweather, so this implementation is under the GPL:

boolean isRainingInMasterdam() { return getWeather("Rain", "Amsterdam");}



Then I make a program, that uses only the interface, and searches on the classpath to find any implementations of that interface:

System.out.println("Is it raining in Amsterdam? that is "+myRainObject.isRainingInAmsterdam());



Nowhere does this program use GPL code, unless you put gnuRainy on the classpath. So if your program, installer etc. never touch gnuRainy… how can you be the one infringing on the GPL?

Then I make a program, that uses only the interface, and searches on the classpath to find any implementations of that interface:
System.out.println("Is it raining in Amsterdam? that is "+myRainObject.isRainingInAmsterdam());

Nowhere does this program use GPL code, unless you put gnuRainy on the classpath. So if your program, installer etc. never touch gnuRainy.. how can you be the one infringing on the GPL?


So you can utilize GPL'd code as long as your code references a non-GPL interface, and doesn't explicitly call out in it's bundled run time scripts or launcher, the GPL gnuRainy library.

So now I'm starting to understand how you can use GPL libraries, it sounds very difficult(or impossible) to bundle together a proprietary application if you have to have the users manually download and install those GNU libraries, or otherwise find some other libraries that provide the correct functionality.

For a proprietary game it's starting to sound like GPL licensed libraries are pretty much off limits. Or is there some other way to include GPL'd libraries with your proprietary application? Maybe you could allow them to run a script that would download and install the libraries on their system (or is this just another hack around the GPL that would violate it?)

All in all, if I were to pick a license to apply to common game library functionality, the easiest to use and most liberal seems to be the BSD, but if I wanted to guarantee that modifications to the licensed library code itself had to be contributed back while still allowing proprietary usage and bundling, I could use GPLv2 with the classpath exception allowing non-GPL code to link to the library on the classpath (the GPLv2 + classpath exception doesn't restrict you from bundling your application with the GPL library does it?)

Well, it's all a vague area as you can see… (using GPL libraries). It's never been really tested in any court either afaik.



LGPL or Sun's "classpath" exception sounds like a good solution to me. If you use the LGPL you have at least some confidence that the FSF looked at this in a broad way (though before Java really mattered). With Sun's solution you can only be sure it's good enough for Sun, I don't think they hired laywers to see if the wording is good enough for others to use as well. Though it looks pretty simple and clear to me.