[Adium-devl] GPL and Objective C

Evan Schoenberg evan.s at dreskin.net
Sun Mar 5 21:53:57 UTC 2006


On Mar 5, 2006, at 4:34 PM, Ofri Wolfus wrote:

> On 05/03/2006, at 23:07, Evan Schoenberg wrote:
>>
>> 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' ;-)

True, the nature of the ObjC runtime is such that at compile time you  
don't know exactly what is going to be called.  Your claim that  
sending a message is exactly like calling the 'main' function of a  
plugin doesn't work, though, unless you only call the plugin a single  
time, effectively exec()- / fork()-ing to initiate its action.   
Calling the 'main' function is claimed in the FAQ to be a  
"borderline" case; saying that  calling a whole bunch of methods (all  
of which have different descriptive names as to what they do, take  
different arguments, and perform different tasks) is like a bunch of  
'main' functions is simply playing with the terminology of contract- 
based, object-oriented programming.

>> (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.
So you have non-GPL app <--> GPL plugin <-->  GPL tabs.  I don't see  
how this differs in any way from non-GPL app <--> GPL tabs; you've  
still got two way non-GPL/GPL communication of data within the  
program.  Does plugin exist to obfuscate the violation of the  
license, or does it somehow change the nature of the interaction?

> While I have no intention to do something like this, I am  
> considering the possibility of using some GPL libraries in ChatKit.
Why not talk to the authors of the libraries about dual-licensing  
BSD, instead?

> This is pretty much like what Proteus does - it doesn't call any  
> GPL function directly, but uses DO instead.
Yup.  And it's Very Evil.

-Evan

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://adium.im/pipermail/devel_adium.im/attachments/20060305/181b7630/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: PGP.sig
Type: application/pgp-signature
Size: 186 bytes
Desc: This is a digitally signed message part
URL: <http://adium.im/pipermail/devel_adium.im/attachments/20060305/181b7630/attachment.sig>


More information about the devel mailing list