[Help wanted] How to create a reproducible build (FairEmail)

The problem with reproducible builds is that it will immediately result in trouble for all people having installed the app via F-Droid because the F-Droid app doesn’t support multiple release types of the same app. This is something I cannot solve, and which makes reproducible builds a no-go.

Note that I spent quite some time making a reproducible build possible. So, it isn’t that I don’t want a reproducible build.

As F-Droid works now, reproducible builds are an option only for new apps in the F-Droid, with no prior history.

So, if you want to argue, talk to the maintainers of F-Droid.

1 Like

It is Firefox-specific and using a specific OTP app, so, this is more for a blog than for a FAQ. Moreover, the FAQ already references this help article:

This approach allows publishing both APKs signed by the (upstream) developer and APKs signed by F-Droid. This enables us to ship updates for users who installed apps from other sources than F-Droid (e.g. Play Store), while also shipping updates for apps which were built and signed by F-Droid.

Are these two quotes about the impossibility of the user to switch from F-Droid’s signature to yours without an uninstall/reinstall?

If so, yes that’s one way, users would need to export config (that’s a paid feature in FairEmail iirc?) then reimport on reinstall. There’s also the issue of informing the users, say having F-Droid Client announce such a switch. All known issues.

Now, besides that… F-Droid supports having your repro APK along side F-Droid’s one already, eg NewPipe or Bitcoin Wallet have such a setup (as Lukas posted above while I write this) So new users will get yours, while old ones get updates from F-Droid signed APKs as expected.

The issue is that we can’t enable auto updates (at the moment), so you/me/somebody needs to come and open a MR like so: Update Bitcoin Wallet to 10.06 (!13663) · Merge requests · F-Droid / Data · GitLab

Moreover, the FAQ already references this help article

There’s no way to “avoid giving you phone number to Google” in that FAQ :stuck_out_tongue_winking_eye:

It is Firefox-specific and using a specific OTP app,

No and no, you use Firefox to emulate the token (feel free to use any other app if possible), and you can use any OTP app, as already said.

1 Like

Please see earlier in the discussion: people cannot see in the F-Droid app what they are installing. This needs to be solved, else it will cause a lot of trouble, and the burden of this will be on my shoulders, which are already carrying enough.

Yes, UI is not yet ready to expose what is repro or what is not.

F-Droid Client prioritises your APKs.

F-Droid Website lists F-Droid’s APKs first

etc.

Again, known issues, future work is planned to tackle these.

Not sure I follow, whether the APK is signed by F-Droid or you, makes no difference as the contents are identical. Having a user tell you “I have fairemail from f-droid” would just mean “fdroid flavor” to you, no?

(note that given your speed of releases it’s not feasible for me or others to manually update as fast, so we are just discussing details now :smile:)

New users will only be able to install the reproducible build. They can’t choose and there is no such option to go with an F-Droid signed build. Meanwhile, old users will still receive the updates that are signed by F-Droid.

False :smiley_cat: try to look at Bitcoin Wallet of Newpipe (if you don’t have them installed!) and expand Versions in Client

/LE: on the website eg: NewPipe | F-Droid - Free and Open Source Android App Repository

Version 0.25.2 (994) suggested Added on 2023-08-10
This version requires Android 5.0 or newer.
It is built and signed by F-Droid, and guaranteed to correspond to this source tarbal

scroll down…

Version 0.25.2 (994) - Added on 2023-08-10
This version requires Android 5.0 or newer.
It is built and signed by the original developer, and guaranteed to correspond to this source tarball. 

Then SimpleX has a reproducible build too?

Wait… You can’t tell if the difference is architecture or one is reproducible and one is not. That’s really confusing.

No, look at version Numbers… 5.3.2 (158) and 5.3.2 (157), they are different, each (versionCode) is a different architecture. If you toggle Expert mode ON it will make it clear :wink:

look at my website example above Version 0.25.2 (994) is the same in both from F-Droid and from NewPipe devs.

anyway…we’re diverging away…

2 Likes

Anyway, if the version signed by the developer is the suggested one, then why would anyone go with the one that isn’t suggested? If you press the installation button it automatically installs the suggested version too.

People are going to update to the wrong release type, lose their data in the process and contact me to complain. This is not supportable.

Ping me again if the F-Droid app has decent support for different release types, and also updates with the correct release type.

If they go to your Github and install Play version APK you mean? yes, I guess…

If they use F-Droid (website/Client) they can’t break anything as the signature enforcement protects against that.

1 Like

It won’t protect from updating the GitHub or Play Store version by the F-Droid reproduciable build.

Since the benefit is limited and the confusion will be significant, there are more disadvantages than advantages. The logical choice is, despite the effort put into this, not to provide a reproducible build.

Also, the question “which problem will be solved” remains.
If you want to use OAuth, you can install the GitHub version.
If you want to auto-update the GitHub version, you can use the IzzyOnDroid F-Droid repo.

Depending on who you ask, F-Droid is slow, and bad because it does not provide reproducible builds and because it signs the APKs with its own keys"

:person_shrugging:

You can, but that’s not FOSS etc

Here’s one problem that it solves for F-Droid and its users: upstream developers complaining that they only offer support for their own builds from github/play/etc

With a reproducible build, all the bugs are upstream bugs :stuck_out_tongue_winking_eye:

1 Like

The Play Billing library isn’t open source indeed, but it won’t do anything if there are no Play Services on the device. It is there to recognize Play Store purchases (obviously) and therefore it can’t be removed.

That said, if you are a purist and don’t want to use Google stuff, you (anybody) shouldn’t use Gmail accounts either.

I agree

we’ll come back to this as things improve in the future

I say: if you want to have the developers’ support, use the developer’s builds.