APIs für alle Dinge!

For F-Droid to be trusted, we need to be transparent. Making it easy for people to pay attention to all the processes and systems we use helps us stay secure. One thing that Debian and other GNU/Linux distros have proven over the past decades is that transparency is an effective ingredient for delivering software securely. This ensures that the apps and packages published on f-droid.org are only the sources from upstream developers. And reviewing the sources of upstream developers helps those developers deliver their code securely. These reviews are also fundamental to how F-Droid represents users first when publishing software. Towards those ends, we have been making a big push to publish JSON APIs with key information about all parts of the process of publishing trusted free software that respects users.

Der Repository-Index

F-Droid is built around a signed index of all the apps and packages that are available. This is a JSON file, though more of an index than an API since all the information is in a single file. It is available for any use, and there are some project that take advantage of that. fossdroid.com is an alternate web view on all the apps available in f-droid.org. Aurora, F-Droid Classic, G-Droid, and M-Droid are alternate Android client apps.

The repo index is in the form of a signed JAR file that contains index-v1.json. The best method is to verify the JAR signature, then extract index-v1.json if it validates. The fdroidserver Python library provides fdroidserver.download_repo_index() to make this easy to do. It is also possible to just read index-v1.json using any ZIP library.

Build-Metadaten der App

Every app in f-droid.org has a corresponding build metadata file in fdroiddata. In order to encourage more creative reuse, we keep our data in standard formats in easy to find places. The whole app collection is in YAML format. The file can either be directly accessed by Application ID using the GitLab Raw URL https://gitlab.com/fdroid/fdroiddata/-/raw/master/metadata/<ApplicationID>.yml (e.g. https://gitlab.com/fdroid/fdroiddata/-/raw/master/metadata/org.fdroid.fdroid.yml). The repo index and the GitLab Repository Files API can be used to query which Application IDs are available.

Buildserver-Status von f-droid.org

Die vier Hauptschritte des Build-Zyklus sind: checkupdates, build, update, und deploy. Es gibt für jeden von ihnen eine JSON-Datei mit Statusinformationen. Diese werden angezeigt, sobald der Schritt vollständig durchlaufen ist. Der aktuell laufende Schritt wird als running angezeigt.

Zwei Beispiele, wie diese JSON-APIs genutzt werden können, sind die Website des F-Droid Monitor und die App F-Droid Build Status.

Spiegel- und Repository-Überwachung

mirror-monitor und repo-monitor sind automatisierte Aufgaben, die verschiedene Statistiken über Spiegel von f-droid.org bzw. Drittanbieter-Repos kontrollieren. Jede von ihnen liefert ein einzelnes, großes JSON-Protokoll jedes Mal, wenn die Kontrollen durchgeführt wurden:

Reproduzierbare Builds

verification.f-droid.org ist ein Rebuilder, der die offiziellen Versionen aus f-droid.org erneut herstellt, dann prüft, ob sie reproduzierbar hergestellt wurden. Es gibt pro APK eine JSON-Datei, die kontrolliert werden muss. In ihr folgt der Dateiname dem Muster <ApplicationId>_<VersionCode>.apk.json, zum Beispiel: https://verification.f-droid.org/org.fdroid.fdroid_1010050.apk.json

Protokolle zur Binärdateien-Transparenz

Binärdateien-Transparenz folgt der Idee, dass alle freigegebenen Pakete protokolliert werden sollen, wenn sie veröffentlicht werden. Dies bietet die Möglichkeit, zu prüfen, ob ein bestimmtes binäres Paket vom Herausgeber erstellt wurde oder von irgendwoher sonst kommt, z.B. als ein Exploit. fdroidserver bringt Tools zur Handhabung eines Protokolls für die Binärdateien-Transparenz der indexierten Dateien als Teil des Veröffentlichungsprozesses mit. Ermöglicht wird dies im Repo des Guardian Project: https://github.com/guardianproject/binary_transparency_log

Es gibt auch einen Prototyp für den Betrieb eines Binärdateien-Transparenz-Logs für f-droid.org. https://gitlab.com/eighthave/f-droid.org-binary-transparency

Nachdem Gradle und das Team für die Google Android Tools keines veröffentlicht, hat es F-Droid getan. Die Basis-API ist eine JSON-Datei mit einer Auflistung aller URLs, die als Herausgeber bekannt sind. Jeder URL enthält dann eine Liste von SHA-256-Checksums, die der Protokollablauf gesehen hat. Es werden hier auch andere Dateien überwacht, abhängig davon was der Herausgeber bereitstellt.

issuebot

issuebot läuft bei Merge Requests einer App und Anträgen auf Packaging (RFP), um Prüfern Informationen zur App bereitzustellen. Viele dieser Informationen werden ebenfalls im JSON-Format herausgegeben. Jeder Bericht wird aus Daten erstellt, die aus Modulen stammen, die in einer speziellen App ablaufen. Es gibt zwei Zugangspunkte:

Kennzahlen

Nutzungsdaten werden von verschiedenen Internetseiten von F-Droid gesammelt und ohne persönlich identifizierbare Informationen (PII) veröffentlicht. Sie werden in einer wöchentlichen JSON-Datei in einer JSON-Indexdatei pro Website herausgegeben. Beispielsweise hier Kennzahlen zur Suche in einer Woche: https://fdroid.gitlab.io/metrics/search.f-droid.org/2021-01-18.json

Git-Statistiken

Jedes git Repo hat eine Vielzahl interessanter Metadaten. Das Projekt GitStats erzeugt nette Charts aus diesen Daten. Das ist nicht ganz eine API, aber es ist ähnlich, da es öffentliche Projektdaten verwendet. Vorgefertigte Seiten zu jedem der zentralen Git-Repos sind hier zu sehen: https://fdroid.gitlab.io/.