• Announcements

    • khawk

      Download the Game Design and Indie Game Marketing Freebook   07/19/17

      GameDev.net and CRC Press have teamed up to bring a free ebook of content curated from top titles published by CRC Press. The freebook, Practices of Game Design & Indie Game Marketing, includes chapters from The Art of Game Design: A Book of Lenses, A Practical Guide to Indie Game Marketing, and An Architectural Approach to Level Design. The GameDev.net FreeBook is relevant to game designers, developers, and those interested in learning more about the challenges in game development. We know game development can be a tough discipline and business, so we picked several chapters from CRC Press titles that we thought would be of interest to you, the GameDev.net audience, in your journey to design, develop, and market your next game. The free ebook is available through CRC Press by clicking here. The Curated Books The Art of Game Design: A Book of Lenses, Second Edition, by Jesse Schell Presents 100+ sets of questions, or different lenses, for viewing a game’s design, encompassing diverse fields such as psychology, architecture, music, film, software engineering, theme park design, mathematics, anthropology, and more. Written by one of the world's top game designers, this book describes the deepest and most fundamental principles of game design, demonstrating how tactics used in board, card, and athletic games also work in video games. It provides practical instruction on creating world-class games that will be played again and again. View it here. A Practical Guide to Indie Game Marketing, by Joel Dreskin Marketing is an essential but too frequently overlooked or minimized component of the release plan for indie games. A Practical Guide to Indie Game Marketing provides you with the tools needed to build visibility and sell your indie games. With special focus on those developers with small budgets and limited staff and resources, this book is packed with tangible recommendations and techniques that you can put to use immediately. As a seasoned professional of the indie game arena, author Joel Dreskin gives you insight into practical, real-world experiences of marketing numerous successful games and also provides stories of the failures. View it here. An Architectural Approach to Level Design This is one of the first books to integrate architectural and spatial design theory with the field of level design. The book presents architectural techniques and theories for level designers to use in their own work. It connects architecture and level design in different ways that address the practical elements of how designers construct space and the experiential elements of how and why humans interact with this space. Throughout the text, readers learn skills for spatial layout, evoking emotion through gamespaces, and creating better levels through architectural theory. View it here. Learn more and download the ebook by clicking here. Did you know? GameDev.net and CRC Press also recently teamed up to bring GDNet+ Members up to a 20% discount on all CRC Press books. Learn more about this and other benefits here.
Sign in to follow this  
Followers 0
lonewolff

GPL licence question

14 posts in this topic

Hi Guys,

 

With the GPL v3 licence, does the coder have to make thier own source code available for any application created using an API that is GPL licenced or do they only have to supply (or link to) the original source code of the API that they used?

 

This seems to be an extremely confusing area for me.

 

Thanks in advance. smile.png

2

Share this post


Link to post
Share on other sites

Thanks Sean.

 

Man, it is complicated. Isn't it?

 

I have steered clear of GPL APS's for a long time for this very reason (using native Microsoft SDK's the whole time). I don't think I'll be changing my approach any time soon, by the sounds of it.

 

(Upvoted your answer smile.png )

0

Share this post


Link to post
Share on other sites

Some GPL libraries are dual-licensed with LGPL as well, which means that you don't have to release your code if you link to the library as a dynamic library. Also, there are many libraries using, in my opinion, more sane licenses like MIT/Apache/BSD.

Edited by patrrr
2

Share this post


Link to post
Share on other sites

As far as I know LGPL still requires you to release the source code of the library, it just prevents the entire program from falling under the license (and that's only if the library is linked dynamically, otherwise it's just like the GPL).

0

Share this post


Link to post
Share on other sites

Yeah, LGPL seems fine to me. But, GPL no thanks.

 

I have noticed that some GPL licenced API's have clauses say that you don't need to supply your own project source. So, I guess it comes down to read 'all' of the fine print (all 100 pages of it) to be sure.

0

Share this post


Link to post
Share on other sites
There is actually quite a lot of nuance in LGPL that people gloss over.

The biggest sticky issue is header files.

When you pull in a header file as required for function declarations and interoperability, that is allowed in the license. But sadly many GPL projects will include code in the header files beyond the recommendations. For templates it is a strict necessity, for other items like small inline functions it is for performance or other reasons. It has never gone through the courts, but the inclusion of the code might be sufficient to trigger the viral aspect if someone wanted to sue.

Be very careful if you intend to release non-Free software but want to use Free libraries. The risk of an error resulting in legal consequences is fairly tiny, but wielding the firebrand is inherently risky.
2

Share this post


Link to post
Share on other sites

I also seem to recall something about the LGPL requireing that users can replace the LGPLed library with another version of it, including allowing people to reverse engineer your program to the extent required in order to update that library.

 

I wonder if one could abuse that to for example create a legal workaround for a DRM system.

0

Share this post


Link to post
Share on other sites


I have noticed that some GPL licenced API's have clauses say that you don't need to supply your own project source. So, I guess it comes down to read 'all' of the fine print (all 100 pages of it) to be sure.

GNU's version of the standard library does this. It's released under the GPL to ensure it's not possible to modify the library and release the changes under another license, but it has that exception clause so programs using the standard library are not forcefully turned into GPL (after all, it's the standard library, not a library that's explicitly known to be under the GPL by the programmer).

 

I imagine this is also used by add-on libraries (i.e. libraries that the program loads on the fly that extend it). You can't use the GPL on those libraries if the program is not GPL compatible. Adding an exception clause would work around that.

 


I also seem to recall something about the LGPL requireing that users can replace the LGPLed library with another version of it, including allowing people to reverse engineer your program to the extent required in order to update that library.

I wonder if one could abuse that to for example create a legal workaround for a DRM system.

If I recall correctly, Nvidia abused the LGPL to connect proprietary code with GPL code.

 

Note that the requirement you mentioned is simpler than you think. Merely being able to swap the DLL file with another one would be enough.

0

Share this post


Link to post
Share on other sites


GNU's version of the standard library does this. It's released under the GPL to ensure it's not possible to modify the library and release the changes under another license, but it has that exception clause so programs using the standard library are not forcefully turned into GPL (after all, it's the standard library, not a library that's explicitly known to be under the GPL by the programmer).
Isn't that what its called as "GPL with linking exception" ?
0

Share this post


Link to post
Share on other sites

 


I also seem to recall something about the LGPL requireing that users can replace the LGPLed library with another version of it, including allowing people to reverse engineer your program to the extent required in order to update that library.

I wonder if one could abuse that to for example create a legal workaround for a DRM system.

If I recall correctly, Nvidia abused the LGPL to connect proprietary code with GPL code.

 

Note that the requirement you mentioned is simpler than you think. Merely being able to swap the DLL file with another one would be enough.

 

But does the license say that it only applies to a binary compatible version of the library, or could you for example add functionality that would require an initalization call not present in the shipped version? It would seem reasonable to only apply it to a drop-in replacement/upgrade, but is that really the case? I should probably check that license some time.

0

Share this post


Link to post
Share on other sites


When you pull in a header file as required for function declarations and interoperability, that is allowed in the license. But sadly many GPL projects will include code in the header files beyond the recommendations. [...] the inclusion of the code might be sufficient to trigger the viral aspect if someone wanted to sue.
As far as I read it, it says:

 

may convey such object code under terms of your choice;

if(material not limited to [...], accessors, or small macros, inline functions and templates)

    give prominent notice and accompany with a copy of the GPL.

 

(abbreviated from §3 here)

 

It should in my opinion read "accompany with a copy of the LGPL", but it says "GPL". So basically, as long as it's small inline functions and such, no worries at all, and if it's "big stuff" you need to give prominent notice and include a copy of the GPL [sic], but you can still distribute your own work under whatever license you wish.

 

I also seem to recall something about the LGPL requireing that users can replace the LGPLed library with another version of it, including allowing people to reverse engineer your program to the extent required in order to update that library.
Maybe, but unlikely.

 

While that is indeed so, the clause only allows reverse engineering for the purpose of debugging modifications of the original library only.

 

You could certainly try writing an awesome LGPLed H264 library and hope that someone (say, CyberLink) uses it, then modify your library and reverse engineer their software to steal the BluRay decryption keys based on "Hey, I have the right to reverse engineer that software". But my guess is, you would likely still find yourself in court, since CyberLink would argue that this is not necessary for the purpose of debugging the modifications to your library.

 

Interestingly, version 3 talks of "combined work" (so basically, any program using the library) whereas version 2 merely had this clause for "derived work" (which is much more relaxed). For example, a web browser that can be configured and built to include SSL/TLS support via a library such as e.g. OpenSSL or GnuTLS is clearly not a "derived work", but it would certainly count as "combined work".

0

Share this post


Link to post
Share on other sites

I was thinking more along the lines of updating say an LGPL'd networking library by modifying it to directly work with the network driver "for performance reasons", which ofcourse just happened (tm) to be incompatible with the products DRM system, "forcing" you to bypass it in order to upgrade the library.

 

Perhaps something less extreme, such as modifying a renderer to disable the z-buffer when rendering players, giving the modifier an unfair advantage in a multiplayer game.

 

In many cases, you can greatly affect the behavior of a product by altering a library. I wonder how far one could take it if they were hellbent on messing with [the creator of] the product.

0

Share this post


Link to post
Share on other sites

 

 


I also seem to recall something about the LGPL requireing that users can replace the LGPLed library with another version of it, including allowing people to reverse engineer your program to the extent required in order to update that library.

I wonder if one could abuse that to for example create a legal workaround for a DRM system.

If I recall correctly, Nvidia abused the LGPL to connect proprietary code with GPL code.

 

Note that the requirement you mentioned is simpler than you think. Merely being able to swap the DLL file with another one would be enough.

 

But does the license say that it only applies to a binary compatible version of the library, or could you for example add functionality that would require an initalization call not present in the shipped version? It would seem reasonable to only apply it to a drop-in replacement/upgrade, but is that really the case? I should probably check that license some time.

 

 

its only applicable to drop in replacements (same function signatures), there is no requirement to enable users to modify how your code interacts with the library.

The big problem with this requirement comes with closed platforms as it is impossible to comply with the license requirement on those

 

so no LGPL on iOS, Windows Phone, xbox, playstation, nintendo, etc, for a modern cross platform game LGPL licensed libraries are virtually useless. (Platform wrapper libraries can be useful for Win/Mac/Linux/Android ports but if your game relies on a specific LGPL licensed library to function you are cutting out a large chunk of the possible target platforms)

Edited by SimonForsman
0

Share this post


Link to post
Share on other sites


Interestingly, version 3 talks of "combined work" (so basically, any program using the library) whereas version 2 merely had this clause for "derived work" (which is much more relaxed). For example, a web browser that can be configured and built to include SSL/TLS support via a library such as e.g. OpenSSL or GnuTLS is clearly not a "derived work", but it would certainly count as "combined work".

Reminds me of the mess that's libcurl. Basically it can be built in a myriad of different configurations, and depending on how you built it the library may be permissive, or not compatible with the GPL, or compatible only with the GPL, etc. It's a total mess, it's like the developers basically decided to completely ignore the compatibility between the different licenses. That's seriously dangerous from a legal viewpoint, if one thinks about it.

0

Share this post


Link to post
Share on other sites

In many cases, you can greatly affect the behavior of a product by altering a library. I wonder how far one could take it if they were hellbent on messing with [the creator of] the product.
While you are generally allowed to modify your library any way you want, I think that you might still find yourself in serious trouble in that case.

 

Yes, you didn't force them to use your library, nor did they pay anything for it, and yes they acknowledged "no warranty express or implied, no fitness for any purpose" and agreed not to sue you for compensations. However, note the wording "to the extent permitted by applicable law".

If we are to play baseball, and I pay you $100 for signing "no guarantee that you won't get injured, and no damages whatsoever", and then I start hitting you on your head with the bat, that signed paper won't save me from a conviction or from paying your hospital bill. It just doesn't matter what I made you sign, since I clearly did it on purpose.

 

Worded differently, there is a difference between software that is faulty, and software that is deliberately made to damage someone. Heck, malware writers should just put their malware under GPL otherwise. biggrin.png 

0

Share this post


Link to post
Share on other sites

 

 

 


I also seem to recall something about the LGPL requireing that users can replace the LGPLed library with another version of it, including allowing people to reverse engineer your program to the extent required in order to update that library.

I wonder if one could abuse that to for example create a legal workaround for a DRM system.

If I recall correctly, Nvidia abused the LGPL to connect proprietary code with GPL code.

 

Note that the requirement you mentioned is simpler than you think. Merely being able to swap the DLL file with another one would be enough.

 

But does the license say that it only applies to a binary compatible version of the library, or could you for example add functionality that would require an initalization call not present in the shipped version? It would seem reasonable to only apply it to a drop-in replacement/upgrade, but is that really the case? I should probably check that license some time.

 

 

its only applicable to drop in replacements (same function signatures), there is no requirement to enable users to modify how your code interacts with the library.

The big problem with this requirement comes with closed platforms as it is impossible to comply with the license requirement on those

 

so no LGPL on iOS, Windows Phone, xbox, playstation, nintendo, etc, for a modern cross platform game LGPL licensed libraries are virtually useless. (Platform wrapper libraries can be useful for Win/Mac/Linux/Android ports but if your game relies on a specific LGPL licensed library to function you are cutting out a large chunk of the possible target platforms)

 

 

It's true that the more liberal Open Source licences are best from the developer point of view - you can just include the source code in your project, which may be easier than dynamically linking, even for platforms like Windows and Android where this is possible.

 

But I don't think that makes LGPL virtually useless, you just have to take it for what it is. Sure, a BSD licenced library would be better for a developer all other things being equal, but then we might as well say that a proprietary library is useless if it isn't available for every platform, or you don't get the code to include directly. Also in cases where the platform can only run on a device if approved and can't be redistributed, due to legal or technological restrictions, then it is by design of the LGPL that this isn't allowed, and the wishes of the software developer of that library (no different to respecting the licence of any library, Open Source or proprietary). If it's such a problem, complain to the companies making those platforms closed - or pay up for the library that does what you want. Is one way more "open" - well this is just the old debate about preserving freedoms for users versus maximising freedoms for developers, and there isn't a right answer.

Edited by mdwh
0

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0