- Beim F-Droid-Build-Server ist eine Situation entstanden, in der wegen veralteter CPUs aktuelle Android-Apps nicht mehr gebaut werden können
- Er unterstützt die in modernen mobilen Apps benötigten erweiterten Befehlssätze wie ARM und x86-64 nicht
- Upgrades und Austausch der Server sind nötig, stoßen aber auf Kosten- und Infrastrukturgrenzen
- Entwickler äußern Sorgen über die Nachhaltigkeit von F-Droid und seine technische Aktualität
- Als Alternativen werden Cloud-basierte Builds sowie Spenden von Server-Ressourcen diskutiert
Überblick
- F-Droid ist ein inoffizieller Store für Android-Open-Source-Apps, der Apps verteilt, indem er den Quellcode direkt baut
- Kürzlich stellte sich heraus, dass die Build-Server die von aktuellen Android-Apps verlangten CPU-Befehlssätze nicht unterstützen, sodass für einige Apps keine Builds mehr bereitgestellt werden können
Technische Grenzen der Build-Server
- Die alten CPUs unterstützen die für App-Builds nötigen neuen ARM- und x86-64-Befehle nicht
- Durch diese Einschränkung können moderne Apps mit Performance-Optimierungen oder Apps mit aktuellen Bibliotheken nicht als Build-Artefakte bereitgestellt werden
- Auch moderne Sprachen wie Python und Kotlin sowie aktuelle Build-Tools wie Gradle verlangen häufig neuere CPU-Umgebungen
Sorgen und Diskussionen in der Community
- Entwickler und Nutzer äußern Besorgnis über die anhaltende Verschlechterung der App-Qualität bei F-Droid und Berichte über fehlgeschlagene Builds
- Ein Infrastruktur-Upgrade ist nötig, doch finanzielle Grenzen und fehlendes Personal für die Server-Verwaltung treten deutlich hervor
Alternativen und Lösungsansätze
- Diskutiert werden verschiedene Ansätze, etwa der Betrieb von Build-Servern in einer Cloud-Umgebung oder gemeinschaftlich gespendete Server-Ressourcen
- Das F-Droid-Team hat erklärt, das Problem mithilfe von externer Unterstützung und neuer Hardware lösen zu wollen
Fazit
- Der Wert von F-Droid und seine Bedeutung für die Unterstützung des Open-Source-Ökosystems bleiben hoch
- Allerdings sind Innovationen bei der Infrastruktur und laufende Wartung unerlässlich, um mit modernen App-Trends Schritt zu halten
1 Kommentare
Hacker-News-Kommentare
Das bedeutet, dass ihre Server wirklich sehr alt sind, auf einem Niveau ohne Unterstützung für x86-64-v2; man denkt dabei fast an Server aus der Intel-Core-2-Duo-Ära.
Siehe auch diesen Überblick zum x86-64-v2-Mikroarchitektur-Level in Red Hat Enterprise Linux 9.
Wenn man auf einen Consumer-EPYC-CPU wechseln würde, dürfte die Serverleistung deutlich steigen.
Ich wollte tatsächlich spenden, aber es waren bereits noch 80.000 $ übrig.
Wenn man bedenkt, dass das Jahresbudget 17.000 $ beträgt, würde selbst der Kauf eines aktuellen Zen4- oder Zen5-mATX-Consumer-EPYC-Servers für 2.000 bis 3.000 $ noch ins Budget passen.
Falls es wirklich mehrere stark veraltete Server sind, könnte ein einzelner Zen5-Server gleich mehrere ersetzen und dabei viel Strom und Platz sparen.
Siehe auch den Budgetstatus von F-Droid.
Die Librapay-Spenden scheinen noch nicht enthalten zu sein.
Link zu den Librapay-Spenden
Die Mindestanforderung lautete „Pentium und Celeron“, also dachten wir, das reiche aus.
Tatsächlich verwendete aber einer der Dienste Instruktionen, die nur auf v3- oder v4-CPUs unterstützt werden, und stellte deshalb den Betrieb ein.
Nachdem wir die exponierten CPU-Einstellungen geändert hatten, lief alles wieder normal.
Es kann also auch sein, dass die Serverleistung an sich ausreicht, aber eine Fehlkonfiguration vorliegt, oder dass das Binary höhere Anforderungen hat als angegeben, oder dass ein anderer Faktor dahintersteckt.
Die
cmpxchg16b-Instruktion ist noch gar nicht so alt und gilt inzwischen als Mindestvoraussetzung.Verglichen mit der Zeit und Arbeit, die Freiwillige in die Pflege des Systems stecken, sind 80.000 £ wirklich nicht viel.
Ich habe gehört, dass eine Modernisierung der Infrastruktur nötig ist, aber das erfordert größere Investitionen.
Mit mehr finanzieller Reserve hätte man vermutlich auch mehr Vertrauen, diese Investitionen tatsächlich zu tätigen.
Neben Server-Upgrades gibt es noch viele weitere Baustellen.
Die aktuelle Situation wirkt ziemlich besorgniserregend.
F-Droid ist nach Google derzeit vermutlich der größte Android-App-Store, deshalb halte ich ihn für umso wichtiger.
Ich frage mich, ob es Pläne zur Behebung dieses Problems gibt, wann F-Droid die Server aufrüsten könnte oder ob Google diese Pflichtanforderung vielleicht doch zurücknimmt, auch wenn Letzteres eher unwahrscheinlich erscheint.
Behoben wurde das in Gradle Plugin 4.2.0-rc01 / Gradle 7.0.0 alpha 9.
Dazu gibt es auch ein tatsächliches Ticket im Issue-Tracker.
Meiner Meinung nach wäre es nicht einmal in den Top 10.
Ich frage mich, warum man
aapt2nicht einfach passend zum Zielsystem neu baut.Der Source ist verfügbar.
Ort des
aapt2-SourcecodesDa stecken extrem viele Binaries drin, und als ich versucht habe, einige davon aus dem Source neu zu bauen, war das Build-System so kaputt, dass ich sofort aufgegeben habe.
aapt2jedes Mal neu zu kompilieren.So kann man künftige Binary-Updates automatisch abfangen, statt jedes neue Binary erneut patchen zu müssen.
Ich teile mal den Wikipedia-Artikel zu Streaming SIMD Extensions (SSSE3).
Selbst mein alter Desktop unterstützte diese Instruktion, und ich habe ihn fast zehn Jahre lang genutzt.
Umso überraschender ist es, dass im Sourcecode nicht einmal ein Fallback-Pfad ohne Assembler bereitgestellt wurde.
Wahrscheinlicher ist, dass der Compiler schlicht mit Ziel
x86_64-v2gebaut wurde.RHEL 9 wurde ebenfalls mit solchen Optionen gebaut, und in RHEL 10 geht es auf
x86_64-v3hoch, womit dann auch AVX unterstützt wird.AMD-10h-Wiki-Link
Praktisch gibt es keine Hardware mehr, auf der man das sinnvoll testen kann; übrig sind nur alte und langsame Geräte.
Ganz nachvollziehen kann ich das nicht.
Gradle und
aapt2sind Open Source, und wenn man die Toolchain wie bei buildroot oder openwrt selbst kompiliert, erhält man ein deutlich vorhersagbareres Ergebnis.Auch F-Droid könnte die komplette Toolchain selbst aus dem Source bauen und müsste dann keine Binary-Versionen von Gradle oder
aapt2mit nicht unterstützten Instruktionen verwenden.Darunter sind auch native Binaries, und anders als bei buildroot oder Linux-Distributionen gibt es keine Metadaten darüber, wie jede einzelne Bibliothek gebaut wird.
Außerdem unterscheiden sich die Build-Prozesse innerhalb des Gradle-Ökosystems von Bibliothek zu Bibliothek erheblich und sind nicht standardisiert. Deshalb ist es sehr mühsam und schwierig, das gesamte System selbst aus dem Source zu rekonstruieren.
Es heißt auch, Google habe das Problem upstream bereits behoben.
Siehe dieses Issue.
Wie schnell das gelöst wird, ist unklar, aber auch wenn der Thread keinen direkten Beleg für eine tatsächliche Behebung liefert, wirkt das zumindest etwas beruhigend.
In dem verlinkten Thread wurde eine Tippfehlerkorrektur („mas fixed“ → „was fixed“) fälschlich als Hinweis verstanden, dass dieses Issue bereits gelöst sei.
Behoben wurde in Wirklichkeit ein ähnliches Problem aus einigen Jahren zuvor.
Siehe dazu den Google Issue Tracker.
Wenn man bedenkt, dass
sse4.1bereits 2011 eingeführt wurde, ist es schon seltsam, dass solche alten Server noch in Betrieb sind.Mit einer modernen CPU ließe sich dieselbe Arbeit mit nur einem Bruchteil des Stromverbrauchs erledigen; wirtschaftlich erscheint es daher ebenfalls wenig sinnvoll, an alter Hardware festzuhalten.
Weiß jemand Näheres über Anzahl oder Spezifikationen der Build-Server?
Selbst wenn man das halbiert, entspricht das nur 10 % des Preises eines neuen Rechners; bis sich die Investition amortisiert, vergehen also zehn Jahre.
Hinzu kommt, dass ein Upgrade eine Investitionsausgabe ist, während Stromkosten Betriebsausgaben sind.
Beleg zu US-Strompreisen
sse4.1wurde erstmals im November 2007 mit Intel Penryn eingeführt; AMD unterstützte es erst ab Bulldozer Mitte 2011.Bulldozer brachte zwar diverse zusätzliche Instruktionen wie AVX und FMA, aber ältere Opterons waren in der Praxis oft schneller als Bulldozer, sodass es bis zum Erscheinen von EPYC Mitte 2017 wenig Anreiz für ein Upgrade gab.
Dass in vielen Paketen inzwischen
sse4.1oder höher vorausgesetzt wird, liegt daran, dass auf alten CPUs der Overhead für Dinge wie Verzweigungen bei SIMD-Parallelisierung hoch ist.Alte PCs aus den 2000ern reichten für alltägliche Aufgaben wie Web-Browsing lange völlig aus, doch mit der Zeit verlangten Programme neue Instruktionen und machten sie nach und nach unbrauchbar.
Am Ende verlangte sogar Firefox neue Instruktionssätze, sodass ich schließlich einen eigentlich noch funktionierenden Desktop entsorgen musste.
Allerdings lassen sich auf dem KGPE-D16 auch CPUs mit SSE4.2-Unterstützung einsetzen, daher bin ich mir über den genauen Grund nicht sicher.
Bei den neuen
aapt2-Binaries von Google (AGP 8.12.0) überrascht mich, dass F-Droid als Projekt so großen Wert auf Schutz und Isolierung der Build-Umgebung legt, dann aber ausgerechnet Upstream-Binaries übernimmt, statt alles aus dem Source zu bauen.Wer Android-Apps bauen will, ist im Grunde auf nicht freie Binaries von Google angewiesen.
Siehe dazu diesen Forenbeitrag.
Zusammenstellung von Referenzlinks
F-Droid-Admin-Issue
Catima-App-Issue
MBCompass-Issue
Ein Mitglied sagte dazu: „Wie bei F-Droid immer werden unsere Stimmen ignoriert. Hätte es Hoffnung gegeben, durch Diskussionen über Lösungen F-Droid zu verbessern, wäre ich nach all der investierten Zeit und Energie nicht frustriert gegangen.“
Die F-Droid-Server sind wohl wirklich uralt.
Selbst wenn man auf einer völlig anderen Architektur
x86_64emuliert, dürfte das noch Leistungsgewinne bringen.Man muss hier nicht einmal mit OSS-Argumenten kommen.
Wenn einen geschlossene Firmware nicht stört, gibt es viele günstigere und modernere x86-Serveroptionen.
Dank der Popkultur denkt man sofort an Sprüche wie: „Der Server ist so alt, dass er mit Benjamin Franklin im Kindergarten war.“