Last summer I started writing an AIM/XMPP client for the iPhone with OTR support, in part because Adium isn't there, and neither was pidgin or any other OTR supporting client (this has now changed, see below).
I felt like I could really bring something awesome to people who needed it: actual privacy while chatting from your phone, over existing services like google talk and AIM, and compatibility with existing clients that also use OTR. Awesome right?
Using libOrange and an XMPP framework (both objc, really easy to use), I got the core functionality to work, then turned my attention to OTR. After I nailed down some of the tricky parts of wrangling a non-threadsafe C library, I was ecstatic. It worked!
The first time I watched an OTR session establish while talking to a friend over AIM from my iPhone was so rewarding :)
And then I realized one day, that while I was perfectly aware of the licensing terms on libotr and its dependencies (all LGPL or GPL), at the time I didn't realize they were blatantly in conflict with the app store in more ways that one.
For starters, Apple applies a EULA that, to my knowledge is still incompatible with the GPL. Binaries are also encrypted, and signed, and prevented from running on devices owned by someone who isn't the original buyer. Even if that person chose to exercise their rights under the GPL to redistribute the program, they can't because nobody else can run it.
I planned to BSD-license the whole project from the start, but it wouldn't have changed anything. I'd still be violating the terms (or inducing Apple to violate the terms) on more than one GPL licensed library, each with multiple original authors who could, should they feel inclined, have the entire thing removed from the store (which I believe is what happened with VLC, no?). Or, Apple could simply decide to yank it. Not something I wanted to have happen after spending loads of time on custom interface code, making everything play nice, etc.
Some time later, I noticed someone else started a similar project (ChatSecure) and actually put it up on the App Store, apparently undeterred by the licensing issues. The code is open and on Github, and maybe thats enough to satisfy all the copyright holders on the GPL stuff (if they're even aware) but Apple could still yank it.
I don't like having to make choices like this, I love working on iOS and I also have no problem with the GPL, but I have to actively avoid one when working with the other :(
If nothing else, the DRM system built into iOS devices makes this impossible to satisfy. That freedom isn't being granted wholesale as required, it's being metered by Apple. They can take it away at any time if they want to, because in order to run the program your device MUST contact them and retrieve decryption keys specific to that app and that account holder. That's not freedom, its permission on a fine-grained basis
> The freedom to study how the program works, and change it so it does your computing as you wish (freedom 1).
Releasing the source MAYBE complies with this, changing the program tends to require the code anyway, but its a grey area to me. Have I actually enabled recipients to change it if they can't run that code without Apple's permission? I guess, in a way, but it's a bad deal for them for technical reasons
> The freedom to redistribute copies so you can help your neighbor (freedom 2).
Sure I can hand out binary copies if I want (that can't run anywhere but jailbroken or preauthorized devices during beta testing), but someone receiving a copy through the App Store can't. The program is encrypted and can only be decrypted with a key held by Apple
> The freedom to distribute copies of your modified versions to others (freedom 3)
Same deal as previous point to some degree, they can modify the code, but then what? Grey area? Technicality? Not an ideal vision of freedom even if technically compliant.
Why doesn't distributing the source satisfy all of these? Can't users do anything they want with the program itself? Couldn't jailbreaking (or paying $99/yr for the developer program) to run your own apps be considered the same as any other step you need to run programs on other platforms? On Windows you need to put it in an .exe file, on iOS you need to fork over $99.
In short, because the binary is also covered by the GPL and must be redistributable and usable, and nothing that comes from the App Store meets those requirements for anyone except the original buyer/downloader, because they are all encrypted.
If Apple's platform merely refused to run unsigned binaries (like Tivo), it may be kosher to ship GPLv2 (but not v3 for this exact reason), but they're encrypted too, which takes away those rights OUTSIDE the platform as well.
User asks for an iPhone version of pidgin and the request was turned down for this reason:
"We cannot make a version of Pidgin for use on any device running the iPhone OS. None of our dependencies exist for that OS, we'd have to write a completely new interface (which we really don't want to do), and the terms for the app store are draconian enough that they are completely incompatible with the GPL. Even if we wanted to (which we don't), the GPL incompatibility makes it impossible to develop an app for those devices."
It surprises me that the Apple Store's GPL incompatibility is one of the key influencers in this decision of not to develop an iOS version of Pidgin.
Really? When your entire code base (libpurple) is GPL, and in order to develop to iOS you would have to throw out everything you have spent years doing, and start from scratch?
I've tried it along with virtually all of the other chat apps and none seem to work very well at all with Google Talk. I am constantly disconnected and never get any push notifications which makes it entirely useless.
I wish there was something better out there. I might give some another try soon since it's been a while.
I felt like I could really bring something awesome to people who needed it: actual privacy while chatting from your phone, over existing services like google talk and AIM, and compatibility with existing clients that also use OTR. Awesome right?
Using libOrange and an XMPP framework (both objc, really easy to use), I got the core functionality to work, then turned my attention to OTR. After I nailed down some of the tricky parts of wrangling a non-threadsafe C library, I was ecstatic. It worked!
The first time I watched an OTR session establish while talking to a friend over AIM from my iPhone was so rewarding :)
And then I realized one day, that while I was perfectly aware of the licensing terms on libotr and its dependencies (all LGPL or GPL), at the time I didn't realize they were blatantly in conflict with the app store in more ways that one.
For starters, Apple applies a EULA that, to my knowledge is still incompatible with the GPL. Binaries are also encrypted, and signed, and prevented from running on devices owned by someone who isn't the original buyer. Even if that person chose to exercise their rights under the GPL to redistribute the program, they can't because nobody else can run it.
I planned to BSD-license the whole project from the start, but it wouldn't have changed anything. I'd still be violating the terms (or inducing Apple to violate the terms) on more than one GPL licensed library, each with multiple original authors who could, should they feel inclined, have the entire thing removed from the store (which I believe is what happened with VLC, no?). Or, Apple could simply decide to yank it. Not something I wanted to have happen after spending loads of time on custom interface code, making everything play nice, etc.
Some time later, I noticed someone else started a similar project (ChatSecure) and actually put it up on the App Store, apparently undeterred by the licensing issues. The code is open and on Github, and maybe thats enough to satisfy all the copyright holders on the GPL stuff (if they're even aware) but Apple could still yank it.
I don't like having to make choices like this, I love working on iOS and I also have no problem with the GPL, but I have to actively avoid one when working with the other :(