[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