- Le serveur de build de F-Droid n’est plus en mesure de compiler des applications Android récentes à cause d’un CPU ancien
- Il ne prend pas en charge les jeux d’instructions avancés requis par les applications mobiles modernes sur ARM, x86-64, etc.
- Une mise à niveau et un remplacement des serveurs sont nécessaires, mais se heurtent aux limites de coût et d’infrastructure
- Les développeurs expriment des inquiétudes quant à la pérennité de F-Droid et à son niveau de modernité technique
- Des alternatives comme des builds basés sur le cloud et des dons de ressources serveur sont en cours de discussion
Aperçu
- F-Droid est une boutique non officielle d’applications open source pour Android, qui distribue les applications après avoir directement compilé leur code source
- Récemment, ses serveurs de build ne prenant pas en charge les jeux d’instructions CPU exigés par les applications Android récentes, il n’est plus possible de fournir les builds de certaines d’entre elles
Limites techniques des serveurs de build
- Les anciens CPU ne prennent pas en charge les nouvelles instructions ARM et x86-64 nécessaires à la compilation des applications
- À cause de cette limitation, il devient impossible de fournir des fichiers compilés pour des applications modernes optimisées en performances ou utilisant des bibliothèques récentes
- Des langages récents comme Python et Kotlin, ainsi que des outils de build modernes comme Gradle, exigent eux aussi souvent un environnement CPU récent
Inquiétudes et discussions dans la communauté
- Développeurs et utilisateurs font part de leurs inquiétudes face à la dégradation continue de la qualité des applications sur F-Droid et aux échecs de compilation signalés
- Une mise à niveau de l’infrastructure est nécessaire, mais les contraintes financières et le manque de personnel pour administrer les serveurs sont mis en avant
Recherche d’alternatives et de solutions
- Différentes pistes sont discutées, comme l’exploitation des serveurs de build dans un environnement cloud ou des dons communautaires de ressources serveur
- L’équipe de F-Droid a exprimé sa volonté de résoudre le problème grâce à un soutien externe et à l’acquisition de nouveau matériel
Conclusion
- La valeur de F-Droid et son rôle de soutien à l’écosystème open source restent importants
- Mais des efforts d’innovation de l’infrastructure et de maintenance adaptés aux tendances actuelles des applications sont indispensables
1 commentaires
Réactions sur Hacker News
Cela signifie que leurs serveurs sont vraiment très anciens, au point de ne pas prendre en charge x86-64-v2, ce qui fait penser à des serveurs de l’époque des Intel Core 2 Duo
Voir aussi cet article récapitulatif sur le niveau de microarchitecture x86-64-v2 de Red Hat Enterprise Linux 9
En passant à des CPU Epyc grand public, les performances des serveurs seraient sans doute bien meilleures
J’avais justement pensé à faire un don, mais il leur restait déjà 80 000 $
Étant donné que leur budget annuel est de 17 000 $, même en achetant un serveur Epyc grand public mATX récent en Zen4 ou Zen5 pour 2 000 à 3 000 dollars, cela resterait dans le budget
S’il y a vraiment plusieurs serveurs vieillissants, une seule machine Zen5 pourrait en remplacer plusieurs, tout en économisant beaucoup d’électricité et d’espace
Voir aussi l’état du budget de F-Droid
Il semble que les dons via Librapay ne soient pas encore comptabilisés
Lien de don Librapay
L’exigence minimale était « Pentium et Celeron », donc on pensait être tranquilles
En réalité, l’un des services utilisait une instruction prise en charge uniquement sur des CPU v3 ou v4, ce qui l’a fait tomber en panne
Une fois les paramètres du CPU exposé modifiés, tout a refonctionné normalement
Donc il est possible que le serveur ait en réalité les performances nécessaires, mais qu’il y ait une erreur de configuration, ou qu’un binaire exige plus que ce qu’il annonce explicitement, ou un autre problème du même genre
L’instruction
cmpxchg16bn’est pas si récente, et elle est désormais généralement considérée comme obligatoire80 000 £, c’est vraiment peu au regard du temps et des efforts que des bénévoles consacrent à maintenir ce système
J’ai entendu dire qu’une modernisation de l’infrastructure était nécessaire, mais qu’elle demanderait un investissement important
Avec une trésorerie plus confortable, ils auraient sans doute davantage confiance pour investir
Il y a d’autres problèmes à régler en plus de la mise à niveau des serveurs
Je trouve la situation assez préoccupante
F-Droid est sans doute aujourd’hui le plus grand app store Android en dehors de Google, ce qui le rend d’autant plus important
Je me demande s’il existe un plan pour résoudre ce problème, quand F-Droid pourrait mettre à niveau ses serveurs, ou si Google pourrait revenir sur cette exigence obligatoire, même si ce dernier scénario me semble peu probable
Le problème a été corrigé dans Gradle Plugin 4.2.0-rc01 / Gradle 7.0.0 alpha 9
Il reste d’ailleurs une trace du ticket
À mon avis, il n’entrerait même pas dans le top 10
Je me demande pourquoi ils ne recompilent pas simplement
aapt2pour la cibleLe code source est disponible
Emplacement des sources de
aapt2Il y a énormément de binaires, et quand j’ai essayé d’en recompiler certains à partir des sources, le système de build était tellement cassé que j’ai abandonné immédiatement
aapt2à la main à chaque foisCela permet aussi de suivre automatiquement les mises à jour des binaires, sans devoir repatcher chaque nouveau binaire publié
Je partage la page Wikipédia sur Streaming SIMD Extensions (SSSE3)
Même mon vieux desktop prenait en charge cette instruction, et je l’ai utilisé pendant près de dix ans
Je trouve donc surprenant qu’ils n’aient même pas prévu de chemin de repli non assembleur dans le code source
Le plus probable est que le compilateur ait été utilisé avec une cible
x86_64-v2RHEL 9 a été compilé ainsi lui aussi, et RHEL 10 montera à
x86_64-v3, avec prise en charge d’AVXLien Wikipédia AMD 10h
En pratique, personne n’a vraiment le matériel nécessaire pour tester cela, à part des machines anciennes et lentes
Je ne comprends pas complètement
gradleetaapt2sont open source, et si on compilait soi-même toute la toolchain comme dans buildroot ou openwrt, on obtiendrait un résultat plus prévisibleF-Droid pourrait de la même manière reconstruire toute la toolchain depuis les sources et éviter ainsi d’utiliser des binaires
gradleouaapt2contenant des instructions non prises en chargegradletélécharge et utilise aussi de son côté des dépendances comme des bibliothèques Java précompiléesCertaines embarquent des binaires natifs, et contrairement à buildroot ou aux distributions Linux, il n’existe pas de métadonnées décrivant la manière dont chaque bibliothèque a été compilée
En plus, le processus de build varie d’une bibliothèque de l’écosystème Gradle à l’autre, sans vraie standardisation, donc tout reconstruire à partir des sources serait un travail considérable et compliqué
Certains disent que Google a déjà corrigé le problème en amont
Voir ce lien vers l’incident
Il est difficile de savoir à quelle vitesse cela sera résolu, mais le fil donne quand même un peu d’espoir, même sans preuve directe qu’un correctif a bien été appliqué
Dans le fil lié ci-dessus, quelqu’un a pris une correction de faute de frappe (« mas fixed » → « was fixed ») pour la résolution de l’incident actuel
Ce qui a été corrigé, c’est un problème similaire plus ancien, datant de plusieurs années
Voir le Google Issue Tracker
Quand on pense que
sse4.1est une instruction introduite en 2011, c’est étonnant que des serveurs aussi anciens soient encore en serviceAvec des CPU récents, on pourrait faire le même travail avec une fraction de la consommation électrique, donc économiquement aussi j’ai du mal à comprendre qu’on continue à utiliser un matériel aussi vieux
Si quelqu’un connaît le nombre ou les spécifications des serveurs de build, ça m’intéresserait
Même en divisant ce coût par deux, cela ne représente qu’environ 10 % du prix d’un ordinateur neuf, ce qui ferait un amortissement sur dix ans
Il faut aussi distinguer les dépenses d’investissement des dépenses d’exploitation
Source sur les tarifs de l’électricité aux États-Unis
sse4.1a d’abord été introduit par Intel Penryn en novembre 2007, et AMD ne l’a pris en charge qu’avec Bulldozer, à la mi-2011Bulldozer ajoutait aussi diverses instructions comme AVX et FMA, mais dans de nombreux cas les anciens Opteron restaient en pratique plus rapides que Bulldozer, donc l’incitation à mettre à niveau est restée faible jusqu’à l’arrivée d’Epyc, à la mi-2017
Si beaucoup de paquets exigent aujourd’hui
sse4.1ou plus, c’est aussi parce que sur les vieux CPU, la surcharge liée aux branchements conditionnels et autres opérations réduit l’intérêt du parallélisme SIMDLes vieux PC des années 2000 restaient suffisants pour des usages ordinaires comme la navigation web, puis avec le temps les logiciels ont commencé à exiger de nouvelles instructions, ce qui les a progressivement rendus inutiles
Même Firefox a fini par exiger un jeu d’instructions plus récent, et j’ai moi-même dû abandonner un desktop pourtant encore parfaitement fonctionnel
Cela dit, la carte KGPE-D16 peut aussi accueillir des CPU compatibles SSE4.2, donc je ne connais pas la raison exacte
À propos du nouveau binaire
aapt2de Google (AGP 8.12.0), je trouve étonnant que F-Droid, qui accorde énormément d’importance à la protection et à l’isolation de son environnement de build, récupère malgré tout les binaires upstream au lieu de tout compiler depuis les sourcesPour développer des applications Android, on dépend encore fondamentalement de binaires non libres fournis par Google
Voir ce billet de forum connexe
Récapitulatif de liens utiles
Incident d’administration F-Droid
Incident de l’application Catima
Incident MBCompass
Un membre dit ceci : « Comme toujours avec F-Droid, nos voix sont systématiquement ignorées. S’il y avait eu le moindre espoir de discuter de solutions pour améliorer F-Droid, je ne serais pas parti frustré après y avoir investi autant de temps et d’énergie. »
Les serveurs de F-Droid semblent vraiment vétustes
On en serait presque au point où émuler
x86_64sur une architecture complètement différente apporterait malgré tout un gain de performancesOn n’a même plus besoin d’invoquer un argumentaire OSS pour le dire
Et si les firmwares propriétaires ne sont pas un sujet, il existe beaucoup d’options de serveurs x86 plus récentes et moins chères
Avec la culture populaire, ça évoque des formules du genre « ce serveur est si vieux qu’il était en maternelle avec Benjamin Franklin »