Why is there no mobile version of Pidgin?
Tags: opensource, mobile, licensing, distribution
Published: 2024-02-01 06:00:00

We frequently get asked when a mobile version of Pidgin will be available or why it doesn't exist. There's actually quite a bit to it which makes for a decently sized blog post. So... Here we go!

It is completely feasible to write a libpurple user interface for [Android](https://en.wikipedia.org/wiki/Android_(operating_system)), [iOS](https://en.wikipedia.org/wiki/IOS), or any other mobile operating systems. In fact [Palm Inc.](https://en.wikipedia.org/wiki/Palm,_Inc.) used libpurple as the backend for their messaging application in [WebOS](https://en.wikipedia.org/wiki/WebOS) since version [1.0](https://web.archive.org/web/20131101122228/http://www.openwebosproject.org/opensource/1.0.1/index.html) in 2009. But the problem for the Pidgin team is that we just don't have the resources and expertise to create and properly maintain these additional versions.

There was an attempt at libpurple on Android via a 2012 [Google Summer of Code](https://en.wikipedia.org/wiki/Google_Summer_of_Code) [project](https://pidgin.im/development/gsoc/#gsoc-2012). But that project had to manually write [JNI](https://en.wikipedia.org/wiki/Java_Native_Interface) bindings so that libpurple could be accessed from [Java](https://en.wikipedia.org/wiki/Java_(programming_language)).

Modern innovations like [GObject Introspection](https://gi.readthedocs.io/en/latest/) with [JGIR](https://wiki.gnome.org/Projects/JGIR) have basically solved this issue and made Android development with native libraries nearly as easy as doing so with [Objective-C](https://en.wikipedia.org/wiki/Objective-C) or [Swift](https://en.wikipedia.org/wiki/Swift_(programming_language)) on iOS.

So while this is technically possible, we come back to the issue of resources. Currently there are 2 people, including myself, actively working on Pidgin in their free time. However, neither of us know Android or iOS development at all.

For us to create additional user interfaces is to increase our workload immensely and take a lot of time away from Pidgin. We're currently struggling to keep [Finch](https://finch.im), our [Ncurses](https://en.wikipedia.org/wiki/Ncurses) user interface to libpurple, up to date as well. So much so that I will soon be calling for someone to step up and take over the Finch project in the near future.

The next hurdle to deal with is the terms of services for both the Android Play Store and the iOS App Store. libpurple connects directly to chat networks. What this means is that for multiple networks like Discord, Slack, Google Chat, Microsoft Teams, etc is that we are generally breaking their Terms of Service because they do not allow third party clients.

While this can be debated, this essentially counts as "unauthorized access" to these networks which is forbidden in the Android [Developer Distribution Agreement § 4.9](https://play.google.com/about/developer-distribution-agreement.html#4.-use-of-google-play-by-you). However, the iOS [App Store Review Guidelines § 5.2.2](https://developer.apple.com/app-store/review/guidelines/#5.2.2) states that you need explicit permission to connect to these networks which we won't get.

There's also the FOSS clause in the [Apple Developer Program License § 3.3.4 A v](https://developer.apple.com/support/terms/apple-developer-program-license-agreement/#a334) which normally requires an exception to be granted by the copyright holders of the FOSS application. For Pidgin, that includes everyone in our [COPYRIGHT](https://keep.imfreedom.org/pidgin/pidgin/file/default/COPYRIGHT) file.

As you may have noticed, we don't have contact information for any of those people. Even if we did, it is probably safe to say that at least one of them is no longer with us, which makes this all impossible. But even if that wasn't the case, you might also have noticed that [Sun Microsystems](https://en.wikipedia.org/wiki/Sun_Microsystems) is credited in there as well.

Sun Microsystems was [acquired](https://en.wikipedia.org/wiki/Acquisition_of_Sun_Microsystems_by_Oracle_Corporation) by [Oracle](https://en.wikipedia.org/wiki/Oracle_Corporation) in 2010 and I have no idea whether or not their copyrights on their contributions to Open Source projects were included in that acquisition. This would probably require getting lawyers involved and just isn't important to us right now and I't not sure it ever will be.

So essentially the app stores are not an option. We could do the work and take the chance of being taken down, but that doesn't sound like a good use of our extremely limited time.

After that, people generally ask about side loading. While it certainly is an option on Android, it isn't nearly as easy on iOS. This could possibly change depending on the results of [Epic Games v. Apple](https://en.wikipedia.org/wiki/Epic_Games_v._Apple) but that's just speculation.

Regardless, building an application that can only be side loaded means your potential audience is very small and that you'll have more support requests for installation and updates than you would on any other platform. For those reasons, this is not an avenue we intend to go down.

So let's pretend for a moment none of these issues existed and that the only barrier to Pidgin on mobile was resources. Even then there's a huge problem lurking in the shadows, notifications.

On mobile platforms when the device goes to sleep network connections are typically terminated to save battery and network data. This works because the mobile platforms support [push notifications](https://en.wikipedia.org/wiki/Mobile_marketing#Push_notifications) which are basically a way to tell the mobile device that your application needs attention. For this to work, you need to know when to send a push notification. 

For Pidgin to do this, we would need a server that knows when your messages come in and then send the push notification. To know when your messages come in, we'd need your credentials and have to be logged in on the server side to receive those messages. This is not what we're trying to accomplish. We are not trying to create a cloud service nor deal with all of the complexity, privacy, and security concerns that come that.

So, without push notifications, Pidgin on mobile can't tell you when messages come in without keeping something running which will use more battery and network data than most people would like, which of course means additional support requests for a problem that we can't possibly solve.

All of these reasons are why we won't be releasing Pidgin on mobile any time soon, if ever. If you have any questions or comments, or if I got something wrong, please don't hesitate to comment!