Google is Violating LGPL Source Code

Stephen C. Fedder sfedder at hotmail.com
Tue Apr 7 23:26:39 CEST 2009


Sorry, I was not aware that the jfree chart library was actually included as
binary files, and no-one had mentioned this before in the thread, which was
why I commented that it would be helpful to know that fact positively before
starting a thread.  I still think that the potential non-compliance should
also be conveyed/discussed with the vendor before bringing up a public
complaint, as these things tend to often get blown out of proportion.

In the case that the product is included in the war distribution, which is
essentially an archive/aggregation that is unpacked to the target directory
on the server, I would agree that this inclusion (IANAL) does not require
the package under the GPL, as would directly linking source code in a
binary, since the jfreechart jar file could still easily be replaced by the
user with another version compiled from source.  Inclusion of the binaries
in the war does mean that there is a requirement to provide access to the
source code for the version(s) of the LGPL binaries that are incorporated
into the war being distributed.  Providing a link to the website of the
original distribution is good, however to comply, companies archive and
provide LGPL source file distributions for any past binary distributions
they have used in a binary form on the same site they distribute the
application on.  This could just be a conglomerate L/GPL source site, for
example, covering all applications fielded by the company using L/GPL
software.

Section 6. of LGPL 2.1 does specifically state that the source for the
unmodified or modified LGPL library, even if just aggregated or dynamically
linked with the product, must still be provided.  Section 6 is meant to
specifically allow use of the software as a library without the viral nature
of GPL infecting software that merely uses the standard interfaces (API) of
the library.  It does not remove the responsibility to distribute the source
code for the library in any case where an object-only form is distributed.
(anyone here please correct me if I'm wrong).

I do see in the file gwt-benchmark-viewer.jar in the distribution that the
jfree chart package is included as binary class files.  Since the class
files are actually embedded in a jar, not just the war itself, the library
is not actually being used as a separate package (LGPL would usually be
distributed as a separate jar file rather than the class files being
embedded with an application).  This makes it more problematic for an end
user to recompile and replace the jfree package in the binary distribution
of the application, which is a large part of the "freedom" afforded by the
clauses in the LGPL - someone help me out here...

The start of a listing of the a jar file in the GWT distribution showing the
beginning of the jfree distribution is below...

Steve

Viewing .ZIP: gwt-benchmark-viewer.jar

  Length Method     Size  Ratio    Date     Time  Name
  ------ ------     ----  -----    ----     ----  ----
      0B Stored        0B  0.0% 10/16/2008  8:51p META-INF/
    106B DeflatN      94B 11.4% 10/16/2008  8:51p META-INF/MANIFEST.MF
      0B Stored        0B  0.0% 10/16/2008  7:23p com/
      0B Stored        0B  0.0% 10/16/2008  7:23p com/google/
      0B Stored        0B  0.0% 10/16/2008  7:23p com/google/gwt/
      0B Stored        0B  0.0% 10/16/2008  7:23p com/google/gwt/benchmarks/
      0B Stored        0B  0.0% 10/16/2008  7:23p
com/google/gwt/benchmarks/viewer/
      0B Stored        0B  0.0% 10/16/2008  8:51p
com/google/gwt/benchmarks/viewer/public/
   1155B DeflatN     280B 75.8% 10/16/2008  8:51p
com/google/gwt/benchmarks/viewer/public/05E3350BE732DDDB3B85DD46FFD36640.gwt
.rpc
    96KB DeflatN     31KB 67.7% 10/16/2008  8:51p
com/google/gwt/benchmarks/viewer/public/307379F5BC19B8D66A0E5854F18DD16C.cac
he.html
     92B DeflatN      90B  2.2% 10/16/2008  8:51p
com/google/gwt/benchmarks/viewer/public/548CDF11D6FE9011F3447CA200D7FB7F.cac
he.png
    94KB DeflatN     30KB 67.7% 10/16/2008  8:51p
com/google/gwt/benchmarks/viewer/public/5593544A9B81C47D9C45D7495DD32D39.cac
he.html
    95KB DeflatN     30KB 67.7% 10/16/2008  8:51p
com/google/gwt/benchmarks/viewer/public/7E3474503F94573F692DBA8DD87BFA9C.cac
he.html
    95KB DeflatN     30KB 67.7% 10/16/2008  8:51p
com/google/gwt/benchmarks/viewer/public/8CA2E60EAF91C3F19503B0164F5F4F9E.cac
he.html
     90B DeflatN      88B  2.3% 10/16/2008  8:51p
com/google/gwt/benchmarks/viewer/public/9DA92932034707C17CFF15F95086D53F.cac
he.png
    93KB DeflatN     30KB 67.7% 10/16/2008  8:51p
com/google/gwt/benchmarks/viewer/public/DE13FF3F0794AFB1A58A0664B968C62C.cac
he.html
   1044B DeflatN     361B 65.5% 10/16/2008  8:51p
com/google/gwt/benchmarks/viewer/public/ReportViewer.css
    282B DeflatN     188B 33.4% 10/16/2008  8:51p
com/google/gwt/benchmarks/viewer/public/ReportViewer.html
     43B DeflatN      37B 14.0% 10/16/2008  8:51p
com/google/gwt/benchmarks/viewer/public/clear.cache.gif
   5686B DeflatN    2322B 59.2% 10/16/2008  8:51p
com/google/gwt/benchmarks/viewer/public/com.google.gwt.benchmarks.viewer.Rep
ortViewer.nocache.js
    262B DeflatN     176B 32.9% 10/16/2008  8:51p
com/google/gwt/benchmarks/viewer/public/gradient.gif
    436B DeflatN     246B 43.6% 10/16/2008  8:51p
com/google/gwt/benchmarks/viewer/public/history.html
   1408B DeflatN     580B 58.9% 10/16/2008  8:51p
com/google/gwt/benchmarks/viewer/public/hosted.html
      0B Stored        0B  0.0% 10/16/2008  8:51p
com/google/gwt/benchmarks/viewer/client/
      0B Stored        0B  0.0% 10/16/2008  8:51p
com/google/gwt/benchmarks/viewer/server/
      0B Stored        0B  0.0% 10/16/2008  8:51p com/keypoint/
      0B Stored        0B  0.0% 10/16/2008  8:51p com/lowagie/
      0B Stored        0B  0.0% 10/16/2008  8:51p com/lowagie/bc/
      0B Stored        0B  0.0% 10/16/2008  8:51p com/lowagie/bc/asn1/
      0B Stored        0B  0.0% 10/16/2008  8:51p com/lowagie/text/
      0B Stored        0B  0.0% 10/16/2008  8:51p com/lowagie/text/html/
      0B Stored        0B  0.0% 10/16/2008  8:51p
com/lowagie/text/html/simpleparser/
      0B Stored        0B  0.0% 10/16/2008  8:51p com/lowagie/text/markup/
      0B Stored        0B  0.0% 10/16/2008  8:51p com/lowagie/text/pdf/
      0B Stored        0B  0.0% 10/16/2008  8:51p
com/lowagie/text/pdf/codec/
      0B Stored        0B  0.0% 10/16/2008  8:51p
com/lowagie/text/pdf/codec/postscript/
      0B Stored        0B  0.0% 10/16/2008  8:51p
com/lowagie/text/pdf/codec/wmf/
      0B Stored        0B  0.0% 10/16/2008  8:51p
com/lowagie/text/pdf/events/
      0B Stored        0B  0.0% 10/16/2008  8:51p
com/lowagie/text/pdf/fonts/
      0B Stored        0B  0.0% 10/16/2008  8:51p
com/lowagie/text/pdf/hyphenation/
      0B Stored        0B  0.0% 10/16/2008  8:51p com/lowagie/text/rtf/
      0B Stored        0B  0.0% 10/16/2008  8:51p
com/lowagie/text/rtf/direct/
      0B Stored        0B  0.0% 10/16/2008  8:51p
com/lowagie/text/rtf/document/
      0B Stored        0B  0.0% 10/16/2008  8:51p
com/lowagie/text/rtf/document/output/
      0B Stored        0B  0.0% 10/16/2008  8:51p
com/lowagie/text/rtf/field/
      0B Stored        0B  0.0% 10/16/2008  8:51p
com/lowagie/text/rtf/graphic/
      0B Stored        0B  0.0% 10/16/2008  8:51p
com/lowagie/text/rtf/headerfooter/
      0B Stored        0B  0.0% 10/16/2008  8:51p com/lowagie/text/rtf/list/
      0B Stored        0B  0.0% 10/16/2008  8:51p
com/lowagie/text/rtf/style/
      0B Stored        0B  0.0% 10/16/2008  8:51p
com/lowagie/text/rtf/table/
      0B Stored        0B  0.0% 10/16/2008  8:51p com/lowagie/text/rtf/text/
      0B Stored        0B  0.0% 10/16/2008  8:51p com/lowagie/text/xml/
      0B Stored        0B  0.0% 10/16/2008  8:51p com/lowagie/text/xml/xmp/
      0B Stored        0B  0.0% 10/16/2008  8:51p com/lowagie/tools/
      0B Stored        0B  0.0% 10/16/2008  8:51p
com/lowagie/tools/arguments/
      0B Stored        0B  0.0% 10/16/2008  8:51p com/lowagie/tools/plugins/
      0B Stored        0B  0.0% 10/16/2008  8:51p
com/lowagie/tools/plugins/treeview/
      0B Stored        0B  0.0% 10/16/2008  8:51p org/
      0B Stored        0B  0.0% 10/16/2008  8:51p org/jfree/
      0B Stored        0B  0.0% 10/16/2008  8:51p org/jfree/base/
      0B Stored        0B  0.0% 10/16/2008  8:51p org/jfree/base/config/
      0B Stored        0B  0.0% 10/16/2008  8:51p org/jfree/base/log/
      0B Stored        0B  0.0% 10/16/2008  8:51p org/jfree/base/modules/
      0B Stored        0B  0.0% 10/16/2008  8:51p org/jfree/chart/
      0B Stored        0B  0.0% 10/16/2008  8:51p
org/jfree/chart/annotations/
      0B Stored        0B  0.0% 10/16/2008  8:51p org/jfree/chart/axis/
      0B Stored        0B  0.0% 10/16/2008  8:51p org/jfree/chart/block/
      0B Stored        0B  0.0% 10/16/2008  8:51p org/jfree/chart/demo/
      0B Stored        0B  0.0% 10/16/2008  8:51p org/jfree/chart/editor/
      0B Stored        0B  0.0% 10/16/2008  8:51p org/jfree/chart/encoders/
      0B Stored        0B  0.0% 10/16/2008  8:51p org/jfree/chart/entity/
      0B Stored        0B  0.0% 10/16/2008  8:51p org/jfree/chart/event/
      0B Stored        0B  0.0% 10/16/2008  8:51p org/jfree/chart/imagemap/
      0B Stored        0B  0.0% 10/16/2008  8:51p org/jfree/chart/labels/
      0B Stored        0B  0.0% 10/16/2008  8:51p org/jfree/chart/needle/
      0B Stored        0B  0.0% 10/16/2008  8:51p org/jfree/chart/plot/
      0B Stored        0B  0.0% 10/16/2008  8:51p org/jfree/chart/renderer/
      0B Stored        0B  0.0% 10/16/2008  8:51p
org/jfree/chart/renderer/category/
      0B Stored        0B  0.0% 10/16/2008  8:51p
org/jfree/chart/renderer/xy/
      0B Stored        0B  0.0% 10/16/2008  8:51p org/jfree/chart/resources/
      0B Stored        0B  0.0% 10/16/2008  8:51p org/jfree/chart/servlet/
      0B Stored        0B  0.0% 10/16/2008  8:51p org/jfree/chart/title/
      0B Stored        0B  0.0% 10/16/2008  8:51p org/jfree/chart/urls/
      0B Stored        0B  0.0% 10/16/2008  8:51p org/jfree/chart/util/
      0B Stored        0B  0.0% 10/16/2008  8:51p org/jfree/data/
      0B Stored        0B  0.0% 10/16/2008  8:51p org/jfree/data/category/
      0B Stored        0B  0.0% 10/16/2008  8:51p org/jfree/data/contour/
      0B Stored        0B  0.0% 10/16/2008  8:51p org/jfree/data/function/
      0B Stored        0B  0.0% 10/16/2008  8:51p org/jfree/data/gantt/
      0B Stored        0B  0.0% 10/16/2008  8:51p org/jfree/data/general/

-----Original Message-----
From: Daniel Berlin [mailto:dannyb at google.com] 
Sent: Tuesday, April 07, 2009 12:41 PM
To: Stephen C. Fedder
Cc: legal at lists.gpl-violations.org
Subject: Re: Google is Violating LGPL Source Code

On Tue, Apr 7, 2009 at 12:34 PM, Daniel Berlin <dannyb at google.com> wrote:
> On Tue, Apr 7, 2009 at 11:58 AM, Stephen C. Fedder <sfedder at hotmail.com>
wrote:
>> Pardon me if I am out of line following this thread, but Google is
already releasing GWT completely as open-source under Apache 2.0 license, so
it is not as if they are not releasing source code for the product in
question.  Also it seems as if this whole thread would have not been
necessary if the original writer would have gone to the extent of actually
verifying that the LGPL package was in fact actually being distributed by
examining the downloads before publicly accusing a company like Google which
contributes a huge amount of software and resources as open-source of
violating license.  Even if a company appears to be in violation, it is
always the best course to first pursue compliance with them directly rather
than posting public accusations.  It looks like the biggest thing that
Google has done here is to have an erroneous, parhaps out of date, reference
in some of their online documentation referring to LGPL packages that may be
used with GWT by the end user being provided by Google.  I'm pretty sure
there is no legal action to be taken as a result of a mistake in
documentation.
>>
> One of the GWT developers now tells me the jfreechart stuff is
> actually in there, just buried fairly deep (it's in a .war file
> contained in a .jar file somewhere) these days.
> So I apparently misspoke on that point :)
> That said, ...
>
>> I have seen plenty of threads before regarding use of GPL/LGPL in devices
where the accuser is told that they need a distribution and positive proof,
i.e. dumps > or listings showing the actual presence of GPL/LGPL code in a
distributed product before posting an accusation.  Stating that companies
who actually do
>> distribute LGPL binaries also need to post or otherwise make available
corresponding source is just restating the license which anyone who follows
this list
>> should already know.
>
> So Mr Hardy's argument is essentially (as far as i understand it,
> please correct me if i am wrong):
>
> Distribution of gwt with jfreechart jar files embedded in it is not a
> "work that uses a library", instead gwt is the "work that uses the
> library" and it happens to include jfreechart.  IE he doesn't believe
> the combined work is the work the LGPL is talking about in section 6
> Thus, we must comply with both section 6 (for the GWT work), and a
> bunch of other sections for the jfreechart work.

BTW, just to split this thread,, my reason for disagreement with him
on this point simple. The LGPL (2.1) states "6. As an exception to the
Sections above, you may also combine or link a "work that uses the
Library" with the Library to produce a work containing portions of the
Library, and distribute that work  ...."

It clearly says "distribute *that* work" (emphasis mine) where "that"
is referring to the combination of the LGPL'd library (jfreechart) and
the "work that uses the library" (gwt).
Thus, the work they are referring to as being granted exceptions to
the other sections above is the combined work of GWT with jfreechart
(whose combining "produce[d] a work containing portions of the
Library").
He disagrees with this, and believes the inclusion of jfreechart jars
in the work is not covered here.
As I said however, whether I agree with him or not, we are still
(AFAICT) in compliance in either case.

--Dan




More information about the legal mailing list