Fr=E9d=E9ric Brunel [Mon, 16 Aug 2004]:
> Hi all,
> It's been a long time since I ever wrote something on this
> mailing-list. I've been quite busy the last couple of years and
> I've been involve in different project. But I kept watching what
> you did on OCamlSDL and I'm pretty amazed to see the work done so
Hi Fr=E9d=E9ric !
> By the way. I've just received an e-mail from Michael Benfield
> about the license terms of OCamlSDL. The OCamlSDL library have been
> put under the license terms of the LGPL but according to Michael
> this is restrictive in regard to static linking.
> Here is a copy of his e-mail:
> "The OCaml libraries themselves are distributed under the LGPL but wit=
> a modification to allow for static linking. OCamlSDL is distributed=20
> under the plain LGPL. Unfortunately, this is a problem. The LGPL=20
> disallows static linking,=20
that is not true, LGPL does not disallow static linking.
> and the native OCaml compiler cannot really dynamically link to
> OCaml code.=20
> This means that if someone wants to distribute his native OCaml
> program using your library, he must distribute his program under
> the LGPL or the GPL - essentially meaning your license has the
> effect of the GPL.
Not at all. What happens is that under the 'plain LGPL' a user of the
distributed program should be able to modify the LGPL'ed library (ie
ocamlsdl) and relink the program with his modified version of the
library. This is fine for dynamically linked C libraries since the
relinking is effectively done by the dynamic linker. For statically
linked libraries however, this means that the distributed program need
to be available as unlinked binaries so that the user can do the
linking step with a modified ocamlsdl library.
Some consider this too constraining and thus claim that 'LGPL disallow
static linking' but that is technically wrong.
> I request that you change the license terms to allow for static linkin=
> In fact, I believe license terms of LGPL'ed libraries should allow=20
> static linking even for non-OCaml programs.=20
well, it does.
> After all, the purpose of the LGPL is to:
> 1. Keep the original work itself and versions of the original work fre=
> 2. Allow other works to use the original work and yet be distributed=20
> under other terms
> Prohibiting static linking does not help the first goal, and it hinder=
> the second goal."
LGPL with static linking exception does hinder the first goal. Users
of the program with the library statically linked are deprived of the
freedom to modify/improve/distribute the library part of the program.
> I told me that OCaml distributions includes the following text in its=20
> "As a special exception to the GNU Library General Public License, you
> may link, statically or dynamically, a "work that uses the Library"
> with a publicly distributed version of the Library to produce an
> executable file containing portions of the Library, and distribute
> that executable file under terms of your choice, without any of the
> additional requirements listed in clause 6 of the GNU Library General
> Public License. By "a publicly distributed version of the Library",
> we mean either the unmodified Library as distributed by INRIA, or a
> modified version of the Library that is distributed under the
> conditions defined in clause 3 of the GNU Library General Public
> License. This exception does not however invalidate any other reasons
> why the executable file might be covered by the GNU Library General
> Public License."
> Do you have any ideas about that?
Ultimately, I think the choice between 'plain LGPL' and
'static-linking-exception LGPL' depends on what you mean when you
consider 'the users of the library'. You have the first generation
users (the authors of the library), second generation users
(developers of a program that use the library) and third generation
users (users of that program). The plain LGPL has a 'big picture'
notion of free software where 3rd-generation users can still modify
the library and use it with the program. With static-linking-exception
LGPL, they cannot.=20
If 2nd-generation developers modify the library, they have to
distribute source code of these modifications. This is of little use
to 3rd-gen users (they can read it but not much more) ; 1st-generation
users can however integrate the modifications in their library (which
is usually why they chose LGPL).
INRIA uses static-linking-exception LGPL because a) they do not really
care about 3rd generation users b) they want to impose as little
restrictions as possible on 2nd generation developers c) they want to
be able to benefit from possible improvements made by 2nd-gen
developers. OCamlSDL doesn't necessarily have to share these
* plain LGPL -> freedom for all users, some restrictions for
developers (distribute unlinked binaries)
* LGPL with exception -> less restrictions for developers, less
freedom for end users.
As for me, I'd like to hear why distributing unlinked binaries is a
problem (and I definitely don't want to hear that LGPL disallows