views:

298

answers:

8

For arguments sake, say that we create a web application , that depends on a GPLv3 licensed component, lets say Ext JS.

Based on Section 0 of the license, the common notion is that the entire web application (the client side javascript) falls under the definition of a covered work:

A “covered work” means either the unmodified Program or a work based on the Program.

and that it will therefor have to be distributed under the same license


Ok, so here comes the fun part:

This is a short 'program' that is based on Ext JS

Case 1:

var myPanel = new Ext.Panel();

The question that arises is: Have I now violated the GPL by not including the source of Ext JS and its license?

Ok, so lets take another example:

Case 2:

<!doctype html>
<html>
    <head>
        <title>my title</title>
        <script type="text/javascript" src="http://extjs.cachefly.net/ext-3.2.1/ext-all.js"&gt; </script>
        <link rel="stylesheet" type="text/css" href="http://extjs.cachefly.net/ext-3.2.1/resources/css/ext-all.css" />
        <script type="text/javascript">
            var myPanel = new Ext.Panel();
        </script>
    </head>
    <body>
    </body>
</html>

Have I now violated the terms of the GPL?

Doesn't based on imply that the original, or modified program, in fact is a part of the conveyed product?

The code conveyed by me to you is in a non-functional state - it will have to be combined with the actual source of Ext JS, which you(your browser) will have to retrieve, from a source made public by someone else to be usable.

Now, if the answer to the above is no, how does me conveying this code in visible form differ from the 'invisible' form conveyed by my web server?

As a side note, a very similar thing is done in Linux with many projects that depends on less permissive licenses - the user has to retrieve these on its own and make these available for the primary lib/executable. How is this not the same if the user is informed on beforehand that he (the browser) will have to retrieve the needed resources from a different source?


Just to make it clear, I'm pro FLOSS, and I have also published a number of projects licensed under more permissive licenses.
The reason I'm asking this is to try to get to the bottom of this. Not necessarily to avoid having to pay for a commercial license, but to know why I'm paying for it.

So, if any of you can shed some light on this, please do - but please refrain from pure guesses :)

UPDATE
Okay, lets try a different twist:
If I tell you to create a HTML document with the following content

Case 3:

<!doctype html>
<html>
    <head>
        <title>my title</title>
        <script type="text/javascript" src="ext-3.2.1/ext-all.js"> </script>
        <link rel="stylesheet" type="text/css" href="ext-3.2.1/resources/css/ext-all.css" />
        <script type="text/javascript">
            var myPanel = new Ext.Panel();
        </script>
    </head>
    <body>
    </body>
</html>

.. and that I then tell you to download the Ext JS framework from http://www.extjs.com/products/js/download.php and store it in the same directory, and that you continue by loading the document in a browser.

At what point, if any, is the GPL violated? And by whom? You or me?

+1  A: 

IMHO NO you don't violate GNU

GNU speaks about "propagating" and "conveying" works, not about executing them.

Preamble says

... the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program ...

and definitions in chapter 0 say

To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.

To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.

Important to note here are the exclusions:

  • "propagate" excludes execution on a computer (that is a client AND a server)
  • "convey" excludes mere interaction with user with no transfer of copy

Your both examples IMHO don't touch any of the above. Putting applications on the WEB is not distributing software per se, even if users CAN get the source codes if they want

MikeD
In this case, the code is being literally transmitted to the user. I personally would expect that to count as distribution.
TheJacobTaylor
But by whom? I have merely pointed the browser to where it could find a resource. Exactly at *which point* does the infringement occur?
Sean Kinsey
+2  A: 

I'm not an expert in software licensing (hell, i'm not even a proper programmer) but I think you're not violating the GPLv3 terms, and my reasons are:

  • Your program is not based on ExtJS, it's used as an external library.
  • You're not making modifications or redistributions of that software. In the second example, the users downloads it so he can use your program, like you must download any library that is required for another program to work.
  • Even if you stored a copy of ExtJS in the server side, it's not included in the software. From the similar cases that I've seen, the terms are violated when the GPL'd software is included or embedded in a propietary program or other software with an incompatible license.

After all, if you want a definite solution, I say something similar to Yacoby: ask a lawyer, if you can pay it and the problem worths it :)

UPDATE I've seen this in the ExtJS website, and there is interesting clausule there:

  • If you wish to use the open source license of an Ext product, you must contribute all your source code to the open source community and you must give them the right to share it with everyone too.
Oscar Carballal
in his second ex the user doesn't even download the program in the sense of acquiring the source code, because the intend of the <script> is not to convey or propargate the program, but to execute it.
MikeD
@MikeD: You're right, I didn't think it through. I've seen something interesting in the ExtJS website by the way, I'll edit my answer.
Oscar Carballal
A: 

At the end of the day, if you really want a definitive answer, you'll need to email [email protected] and ask them directly. You could send a link to this question, and maybe they'd be willing to post their answer.

bmoeskau
I'm in the process - I asked for the argumentation for why the above scenario falls under violating the GPL, but the only response I'm getting is ' If you are using our GPL license, and Ext is part of your application, then the entire application must meet GPL or our FLOSS exception'.I wonder whats so special with *their* GPL license..Maybe I'll turn them towards this question after some more feedback
Sean Kinsey
obviously, extjs is not going to say anything that will prevent you from paying for a commercial license - its the opensource bait and switch method.i say dont use it if you are not sure. and dont pay for it unless you wish to support the company.
Chii
[email protected] would be a better choice, since they wrote the license.
StuffMaster
If you are worried about violating any particular company's terms of usage, regardless of the specific license, you should ask that company. The application of GPL to JavaScript frameworks is a bit of a murky area, and Ext's interpretation is all that matters, assuming the real question is "How likely is it that Ext Inc. will sue me if I do X?" Granted, Ext Inc. might be in disagreement with gnu.org and everyone else, but "Is Ext Inc. right about GPL?" is a wholly different question.
bmoeskau
Excellent explanation. It obviously depends on which question you're asking.
StuffMaster
A: 

I am not a lawyer. I did manage to co-found and run a successful commercial open source company though.

I think you need to be really careful. If you are setting up a mechanism where people are automatically doing something that they do not legally have the right to do then you might be guilty of "constructive infringement". I think that is the term. If the license for your client side code is not compatible with GPLv3 and your code loads and incorporates their modules at runtime, then you are setting up a situation where people cannot legally run your code. Since you know this, and you are encouraging people to do so, you are basically constructing an infringement rather than infringing directly.

GPL covers integrating code at runtime and is a pretty strong license.

Jacob

TheJacobTaylor
That might be a valid point, but how does this fit with the fact that the user is only *executing* the code, and not propagating/conveying it?
Sean Kinsey
It is not important what the user does. It is important what you do. You are distributing the code to the user, who is then combining it with other code and executing it. I don't believe that many Open Source licenses truly handle dynamic languages very well. In a pre-compiled world, you would be performing a binary distribution of your code rather than a source distribution of your code. For GPLv3 I think you would still have the same issue legally but other situations there can be a pretty large difference.
TheJacobTaylor
One of the keys is that you do not have a GPLv3 Compatible license. If you did have that for this section of your code, you would be fine. Just a thought.
TheJacobTaylor
Thats just it - I'm *not* distributing the GPL covered code, only the non-GPL covered code. So, at what *point* does the entire program **become** the *covered work*? I don't believe that it is prior to the user downloading it, and once downloaded, the GPL allows the user to run the code freely.
Sean Kinsey
My understanding is that the moment your code loads up the GPL covered code, it has to be licensed under a GPL compatible license. Your code is written to automatically download the GPL covered code and load it, right? If so, you are creating a situation where your code is expected to be automatically including GPL covered code and legally would be required to be released under a GPL compatible license. This would only apply to the code that is loading the GPL code which is the code on the browser side for affected pages.
TheJacobTaylor
A: 

You're going to sell you web software without giving the source to end customer, right? I think you will violate GPL.

Your case of usage it the same as dynamical linking with a GPL'ed DLL and only LGPL allows to do something similar.

Also Ext's web site clearly indicates that they have licensed their software under GPL to force all Ext JS's users to open theirs sources.

P.S. As far as I know GPLv2 requires ship your software (which uses another GPLv2'ed software) with it's source. Not to make it public but provide it to your customers and don't limit their right to sell it again. Something like that.

abatishchev
That is really not important in this case. The license doesn't care about *why* you are violating it (if you are).
Sean Kinsey
@Sean: I edited my post. You saw only a stub..
abatishchev
A: 

You may want to have a look at the GNU Affero GPL and issue your product under the Affero terms. It is a slightly modified GPLv3 and specifically addresses both your scenarios in chapter 1, 4th para. See also the "Why ..." page and this

However, it (= corresponding source; note) does not include ... general-purpose tools or generally available free programs which are used unmodified ... but which are not part of the work.

MikeD
Sean: upvoted, because I think it's a really good question deserving a definitive answer
MikeD
+3  A: 

@Sean - I think you have two sensible options.

  • Use ExtJS in the spirit of the Ext developers' interpretation of the GPLv3.

  • Don't use ExtJS.

Using ExtJS based on an interpretation of the GPLv3 that is contrary to the Ext developers' wishes / interpretation is a BAD option:

  • it will create tension and bad feeling,
  • it may make you a target for hotheads, and
  • it might end up in an unpleasant court battle to see whose interpretation is right.

And even if you won the argument, the chances are that the Ext team would switch licenses (again!) to a different license that makes it even harder for you going forward.

The best option is to respect their wishes, and don't argue.

Stephen C
I'm fully with you on this one - I'm just trying to shed some light on the actual *arguments* behind this. Just stating it really doesn't cut it.
Sean Kinsey
*"Just stating it doesn't cut it"*. Only if you view this as a debate over whose interpretation of the GPLv3 is legally correct. IMO, it is clear that Ext developers don't want to debate this. They are probably fed up with the topic, and just want people to respect their wishes.
Stephen C
Agreed. This has been debated ad nauseum on the Ext forums. If you aren't sure, you really need to get a definitive answer from Ext Inc. on your usage -- unless you're prepared to argue in court "But StackOverflow told me I could do it!" ;)
bmoeskau
+1  A: 

Since javascript is interpreted and viewable to the user, your web site falls under "distribution" and not private use as soon as it is online. Cases 1 and 2 would be considered dynamic linking - the javascript interpreter just sees data and does not "compile" or "link" anything.

Relevant anyway is perhaps this link: http://www.gnu.org/licenses/gpl-faq.html#WMS

At any rate, this is itself a bit of a grey area - the Free Software foundation would say your website must be GPL, but in reality there are a number of examples where this is not the case: binary modules in the linux kernel; programming languages linking dynamically to GPL libraries like MySQL.

If you are selling a product based on extjs, you will be distributing tarballs, and cases (1) and (2) would be considered a violation of the GPL - however, if you are simply developing a website, i would argue that you are not "distributing" a derivative work, per se.

grumpytoad