[Adium-devl] GPL and Objective C

Ofri Wolfus 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
>> plug-ins.
>> 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' ;-)

> (a)
>> Using plugins, commercial apps can take advantage of ANY GPL code  
>> that can be wrapped in a cocoa class.
> (b)
>> 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  
> point.

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.

> -Evan

- Ofri

More information about the Adium-devl mailing list