[Adium-devl] GPL and Objective C
ofri.wolfus at gmail.com
Sun Mar 5 21:34:45 UTC 2006
On 05/03/2006, at 23:07, Evan Schoenberg wrote:
> Interesting :)
>> "It depends on how the program invokes its plug-ins. If the program
>> uses fork and exec to invoke plug-ins, then the plug-ins are separate
>> programs, so the license of the plug-in makes no requirements about
>> the main program.
>> If the program dynamically links plug-ins, and they make function
>> calls to each other and share data structures, we believe they form a
>> single program, which must be treated as an extension of both the
>> main program and the plug-ins. In order to use the GPL-covered plug-
>> ins, the main program must be released under the GPL or a GPL-
>> compatible free software license, and that the terms of the GPL must
>> be followed when the main program is distributed for use with these
>> If the program dynamically links plug-ins, but the communication
>> between them is limited to invoking the `main' function of the plug-
>> in with some options and waiting for it to return, that is a
>> borderline case."
> The intention here is clearly that a commercial program can invoke
> a predetermined process given a set of inputs (a "fixed action
> pattern" as an ethologist would say) but can not interact in a
> complex fashion during the course of that process. The grey area
> is really whether that intention technically applies to Obj-C (the
> spirit of it obviously does).
> The language uses "function" and "data structure"... I don't think
> that just because the compiler turns "method calls" and "objects"
> into "functions" and "pointers to objc_object structs" for us we
> can claim that this avoids the requirements of the GPL. That's
> somewhat akin to saying that so long as I have a program which
> automatically translates my innocuous sentences into inciting-to-
> violence hate speech, I can distribute the incitement to violence
> so long as the program generated, not me.
The thing is, when you send an objc message, you can never know what
function will really be called. Even if categories, method swizzling
and class posing were not existing, you still would have no way to
know what function will really be called. A message to a GPL class
can even result in a method implementation of one of your classes if
that class inherits from yours. Therefor, sending a message is
exactly like calling the 'main' function of a plugin.
The spirit of that quote is obvious, but in laws there is no such
thing as 'obvious' ;-)
>> Using plugins, commercial apps can take advantage of ANY GPL code
>> that can be wrapped in a cocoa class.
>> It means that Adium and ChatKit can use protocol libraries which
>> are not GPL. :D
> Does (a) would follow from what you said in your email; does (b)?
> It seems that you're discussing ways that more-restrictive-than-GPL
> code could load and use GPL plugins within the same namespace; this
> isn't the same as a GPL program loading more-restrictive-than-GPL
> plugins, unless I'm misunderstanding how you're getting to that
What I'm saying is that if I was writing a commercial app, and I
wanted to use some pretty tabs, I could simply take Adium's tabs, put
them in a plugin (or in a framework, weak link to it, and load it at
runtime) and use them without violating anything, as long as I also
release my plugin as GPL.
While I have no intention to do something like this, I am considering
the possibility of using some GPL libraries in ChatKit. This is
pretty much like what Proteus does - it doesn't call any GPL function
directly, but uses DO instead.
More information about the Adium-devl