Since websocket support has entered Signal it is time to revisit the old topic of getting Signal released outside of the Google Play Store infrastructure. A published a lengthy comment about this in the Eutopia F-Droid repository issue tracker, and was eventually told this was a good place to bring up this topic with the OWS community. So I have taken some time to reshuffle that comment and update it with new information to have a broader discussion with the OWS community about how we could make Signal accessible to non-Google users on Android.
Originally, OWS wasn’t very comfortable with F-Droid distributing Signal. A rationale that was given boiled down to 4 major things missing, in July 2013:
- crash reporting
- stats gathering
- automatic updates
- ways knobs to turn features on and off for different builds in the build system
In this earlier discussion, more things were mentionned:
- app (virus, presumably?) scanning
- f-droid encourages users to tick the “allow 3rd party APKs” knob which is a security issue
Moxie explicitly requested f-droid to not distribute the APK is in this comment. There’s also a screenshot of a twitter conversation that dates from when Signal actually was on F-Droid where moxie asks for the APK to be removed from F-Droid, if i remember correctly. Moxie also directly intervened in the LibreSignal tracker to explicitly ask not to use the name “Signal” for derivative products that were not exactly the same as Signal.
We could also mention that OWS were working on their own “non-Play distribution framework” (see this comment from December 2013) but it’s unclear whether this lead to anything specific. Presumably, this was stalled in February 2014 when moxie realized the effort was pointless without non-GCM push notifications, so maybe this is something OWS would consider again.
The status of each issue in there is, from what I understand:
- crash reporting: OWS was working on implementing a native solution for this anyways, but this is an F-Droid limitation, although 0.98 client implemented crash reporting with ACRA - it’s unclear to me if that applies to apps deployed with F-Droid or just the F-Droid client
- stats: there were stats in f-droid up to 2013, but they were turned off, because they were useless. a more detailed rationale is in the FAQ, although in September 2016, hans mentioned some stats could be reinstated. so F-Droid limitation here as well.
- automated upgrades: the situation has improved significantly on F-Droid’s side here. while by default it’s not possible, once you enable the privileged extension (which should arguably be done in distributed ROM or when flashing anyways), automated upgrades are possible. failing that, F-Droid can now download all APKs in the background but bulk update is still missing. so another F-Droid or ROM/install process limitation here.
- build knobs: i have no idea where things stand there, I am not sure what it’s for anyways, but presumably, with the new non-GCM support mentioned earlier, this may be fixed.
- app scanning: as far as I know, nothing is being done here on the official F-Droid repo, and nothing is planned there either. so another F-Droid limitation here.
- bad security practices: with the new privileged extension, it’s possible to flash F-Droid directly with the ROM and avoid ticking that bad checkbox, so that’s also fixed, provided F-Droid is installed correctly.
Moxie has recently commented that what is needed is:
- A small well-written library that we can link into Signal which does
crash reporting, checking for updates (and posting notifications for
the user), and reporting basic stats.- A simple web-app that looks like the Play Store console, which
allows us to publish new APKs, display crash reports, and display basic
stats.Then we could link to the signed APK from our website, get crash reports and stats, and make sure users are keeping up to date.
Therefore, I guess we can say that what has been resolved is:
- automated upgrades (for privileged f-droid, of course)
- build knobs (presumably?)
- bad security practices
- app scanner (not necessary?)
So what remains to be done for F-Droid inclusion, according to OWS, would be:
- crash reporting
- stats
- webapp to upload binary APKs and display the aforementioned crash reports and stats
The webapp approach seems different than the approach F-Droid has taken so far, which is more connected to the broader reproducible builds effort. Right now, it is possible for F-Droid repositories to reuse existing binaries and signatures, provided that the output matches what is built in the server’s environment, according to this wiki page. Since OWS has made significant efforts to make Signal more reproducible, this could possibly work, although it would mean an F-Droid repo would pull binaries from some public location instead of OWS pushing binaries to a F-Droid repository. It is also unclear to me whether we need the multiple signing key support feature in F-Droid, which remains to be implemented.
So I believe it is getting more and more possible to distribute Signal on F-Droid or at least outside the Play Store. There’s just a few hurdles along the way. The first of which is to make sure my report is accurate. :) I would say the next step for this work would be:
review this report and spot any inaccuracies- i guess it’s correct until further noticewait for the non-GCM build stuff to be released (which should be real soon now)- it’s now released- make sure F-Droid can build Signal reproducibly
ask nicely the OWS folks to see if they are comfortable with the remaining limitationsseems like crash reporting and stats is still something that OWS strongly requiresif not,implement crash reporting, stats and app scanning (or whatever remains) in F-Droid / Signal- make a pull request on F-Droid with the shiny new build
- victory.
Thanks in large part to moxie himself (but also to the F-Droid folks), we are much, much closer to a liberated signal than we were 4 years ago. The server side is still proprietary now publicly available under the AGPLv3. The client is also fully free software, optionally including the dependencies, so that’s really encouraging. I would recommend people reconsider their strong positions and see how it is, after all, possible to collaborate in a positive way. The Noise folks really showed us the way here, and we should probably be grateful to them as well…
In the meantime, people can install the APK directly from signal.org and signatures can be verified with the apksigner commandline program (e.g. apksigner verify --print-certs Signal-website-release-3.31.4.apk).