From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by sympa.inria.fr (Postfix) with ESMTPS id DC4E57EE51 for ; Wed, 22 May 2013 19:19:07 +0200 (CEST) Received-SPF: None (mail2-smtp-roc.national.inria.fr: no sender authenticity information available from domain of adrien@notk.org) identity=pra; client-ip=91.121.71.147; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="adrien@notk.org"; x-sender="adrien@notk.org"; x-conformance=sidf_compatible Received-SPF: Pass (mail2-smtp-roc.national.inria.fr: domain of adrien@notk.org designates 91.121.71.147 as permitted sender) identity=mailfrom; client-ip=91.121.71.147; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="adrien@notk.org"; x-sender="adrien@notk.org"; x-conformance=sidf_compatible; x-record-type="v=spf1" Received-SPF: None (mail2-smtp-roc.national.inria.fr: no sender authenticity information available from domain of postmaster@nautica.notk.org) identity=helo; client-ip=91.121.71.147; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="adrien@notk.org"; x-sender="postmaster@nautica.notk.org"; x-conformance=sidf_compatible X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AogJAHv9nFFbeUeT/2dsb2JhbABagwiDAg9avi4EAYEHFnSCJAEFDBcPAUYQCQIaAgUTDgICDwUYMYgkjXGbJJF0gSaMNSuBFweCQTJhA5c3AZFAgxE6gTU X-IPAS-Result: AogJAHv9nFFbeUeT/2dsb2JhbABagwiDAg9avi4EAYEHFnSCJAEFDBcPAUYQCQIaAgUTDgICDwUYMYgkjXGbJJF0gSaMNSuBFweCQTJhA5c3AZFAgxE6gTU X-IronPort-AV: E=Sophos;i="4.87,722,1363129200"; d="scan'208";a="18546806" Received: from nautica.notk.org ([91.121.71.147]) by mail2-smtp-roc.national.inria.fr with ESMTP; 22 May 2013 19:19:07 +0200 Received: by nautica.notk.org (Postfix, from userid 1003) id 362FEC009; Wed, 22 May 2013 19:19:07 +0200 (CEST) Date: Wed, 22 May 2013 19:19:07 +0200 From: Adrien Nader To: =?utf-8?B?VMO2csO2aw==?= Edwin Cc: caml-list@inria.fr Message-ID: <20130522171907.GA6073@notk.org> References: <20130522123427.GA1894@siouxsie> <519CC1C8.3060502@etorok.net> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <519CC1C8.3060502@etorok.net> User-Agent: Mutt/1.5.20 (2009-06-14) Subject: Re: [Caml-list] Licenses - Confusion Hi, I'll start with the usual IANAL (and I'm not the FSF either). The thing to keep in mind is what the various license attempt to do, roughly what their main goal is: - GPL*: a program under the GPL* licenses allow people who execute the software to run it, study it, modify it and redistribute it under the same rules - LGPL*: the same but for libraries and only for the libraries and not for the executable using the library - AGPL*: same as GPL* but instead of people who execute it (i.e. on their _own_ machine), it's people who use it (remotely for instance) If you chose the GPL, it's probably that you agreed with its goals so I won't expand on that. Now, the LGPL: it has been made mostly with C in mind. The modern way to distribute software is dynamic libraries: libraries that are not part of the main executable on disk, are loaded as needed into memory and are shared among several programs. Unfortunately, mostly for technical reasons, OCaml uses static and not dynamic linking. The LGPL requires the user to be able to swap one version of the library that a main executable uses for another one (that is fully compatible). That makes plenty of sense. For dynamic linking, you have separate files so that's easy. For static linking however, you only distribute one file and you can't simply swap two files and be done with it. That's the reason that many OCaml libraries uses the static linking exception but at the same time it hasn't been thoroughly studied and its terms might contradict. On the other hand, you can still rely on the spirit of the license which is that it cares about the library itself, not the program using it. Static linking and LGPL are probably fairly doable however. What's the big difference between static and dynamic linking? The LGPL requires that at link-time one library version can be replaced with another: that does require anything at compile time. One way to allow replacing an LGPL-licensed library that has been statically linked into a program would be to provide the set of .o files that are linked together to create the main executable. As Török said, OCaml's checksums can be annoying for such tasks. However, *IIRC* (it's been some time), the checksums are on the interface of the modules and the LGPL says that you need to allow relinking with libraries that are (binary?) compatible and that's what the checksums guarantee. Anyway, the LGPL doesn't say you have to make that as easy as possible: it simply says you have to make is possible. As far as I'm concerned, I don't consider hacking the checksums in the object files as something very difficult that prevents relinking (dangerous maybe, but definitely not more than the ABI incompatibilities C has). PS: *I* consider that BSD-style licenses cater for the needs of the programmers while the GPL-style ones cater to the users (that's my very own opinion) PPS: I'm fairly sure I've forgotten stuff or been imprecise or ... but rather than add more lines to this already-long email, I'd rather wait for questions and answer as well as I can -- Adrien Nader