Neues Repository-Format für schnellere und kleinere Updates

Wir haben gerade Version 1.16 der offiziellen F-Droid-App für Android veröffentlicht, die sowohl viele radikale Veränderungen beinhaltet als auch viele Lösungen für lange bestehende Probleme. Lest weiter, um mehr Details darüber zu erfahren.

Wachsende Repository-Größe

Da immer mehr Apps ihren Weg zu F-Droid finden, wächst auch der offizielle Repository-Index, der alle Apps und ihre Metadaten enthält, stetig an. Derzeit beträgt die Größe des komprimierten Index 8 MB, was unkomprimiert 33 MB entspricht. Wenn der Repository-Index aktualisiert wird, muss jede F-Droid-Client-App diese 8 MB immer wieder herunterladen und verarbeiten. Dieser problematische Trend war seit langem absehbar.

Nur was sich ändert wird aktualisiert

Unser Repository-Index ist im JSON-Format und wir entschieden uns dafür, vom RFC 7396 JSON Merge Patch Gebrauch zu machen, um viel kleinere JSON-Dateien zu erstellen, die nur noch die Änderungen seit der letzten Aktualisierung eurer F-Droid-App enthalten. Technisch funktioniert das so, dass eine neue Datei mit Namen entry.json statt des kompletten Index heruntergeladen wird. Diese „entry“-Datei verweist auf den kompletten Index, sollte die App nie zuvor aktualisiert worden sein und ohnehin alle Metadaten benötigen. Aber die „entry“ beinhaltet auch Verweise auf verschiedene kleinere Differenz-Dateien. Die App sucht sich automatisch die richtige Diff und lädt nur die viel kleinere Datei statt des kompletten Index herunter. Das spart nicht nur Datenvolumen, es macht die Aktualisierung des Index auch viel schneller, da nur die kleinst mögliche Datenmenge heruntegeladen, verarbeitet und gespeichert werden muss. Während dies hier geschrieben wird, betrug die Größe der neusten Diff komprimiert 80 KB, was unkomprimiert 241 KB entspricht, nur 1% des kompletten Index. Die Version 1.16 der offiziellen F-Droid-App für Android unterstützt dieses neue Repository-Format.

Weitere Verbesserungen

Die neue Version bringt eine große Zahl radikaler Veränderungen mit sich. Zum Besipiel musste die ganze Datenbank ersetzt werden, um das neue differenzbasierte Repository-Format zu unterstützen. Wir nutzten auf dem Weg dorthin die Gelegenheit, verschiedenen Kleinkram zu verbessern:

  • verbesserte Spiegelserver-Unterstützung: alle Dateien (z. B. Bilder) werden nun von Spiegelservern geladen, was die Belastung des Hauptservers reduziert
  • bessere Unterstützung von Geräten mit geringem RAM, weil der Index jetzt in die Datenbank einfließt, statt ihn komplett in den Speicher zu laden
  • Hash-Verifizierung: Der SHA256-Hash aller Dateien ist nun Teil der Repository-Metadaten und wird während des Downloads verifiziert
  • stärkerer Algorithmus zur Repository-Signierung: Wir verwenden jetzt SHA256 statt SHA1 für die Indexsignatur
  • Unterstützung für das Herunterladen von Repository-Dateien über IPFS
  • viele Fehlerkorrekturen als Resultat der Modernisierung alten Codes

Die neue Version durchlief eine Serie von Alpha-Versionen mit ausführlicher Testung, um sicherzugehen, dass keine ernsten Probleme in der stabilen Version auftauchen. Sie wird nun als bereit für den allgemeinen Gebrauch angesehen.

Informationen für Maintainer von Repository und Client

Eigentümer von F-Droid-Repositorys von Drittanbietern können das neue Format aktivieren, indem sie ein Upgrade auf die neueste Version von fdroidserver vornehmen, der automatisch das neue Format veröffentlichen wird, zusätzlich zum alten, welches erhalten bleibt, um ältere Client-Apps zu unterstützen.

Entwickler von F-Droid-Clients von Drittanbietern werden ermutigt, das neue Format zu übernehmen, entweder in Form eigener Implementationen oder durch Nutzung der neuen Bibliotheken, die wir veröffentlichen, um die Verwendung dieser Technologie so einfach wie möglich zu machen und um soviel Code wie möglich unter verschiedenen Implementationen zu teilen.

Diese Arbeit wurde durch einen FFDW-DVD-Zuschuss gefördert