- El servidor de compilación de F-Droid está teniendo problemas para compilar apps Android modernas debido a una CPU antigua
- No puede soportar los conjuntos de instrucciones avanzadas requeridos por apps móviles modernas en ARM, x86-64 y otras arquitecturas
- Se necesita una actualización y reemplazo de los servidores, pero existen limitaciones de costo e infraestructura
- Los desarrolladores han expresado preocupación por la sostenibilidad de F-Droid y su vigencia técnica
- Como alternativas, se están discutiendo la compilación basada en la nube y la donación de recursos de servidor
Resumen
- F-Droid es una tienda no oficial de apps Android de código abierto que distribuye aplicaciones compilando directamente su código fuente
- Recientemente, sus servidores de compilación dejaron de poder ofrecer compilaciones de algunas apps porque no soportan los conjuntos de instrucciones de CPU requeridos por las apps Android modernas
Limitaciones técnicas de los servidores de compilación
- La CPU antigua no soporta las nuevas instrucciones ARM y x86-64 necesarias para compilar apps
- Debido a esta limitación, surgió el problema de no poder ofrecer archivos compilados de apps modernas optimizadas en rendimiento o de apps que usan bibliotecas recientes
- Lenguajes modernos como Python y Kotlin, así como herramientas de compilación modernas como Gradle, también suelen requerir entornos de CPU más actuales
Preocupaciones y debate dentro de la comunidad
- Desarrolladores y usuarios han expresado preocupación por el deterioro continuo de la calidad de las apps en F-Droid y por los reportes de fallas de compilación
- Aunque es necesario actualizar la infraestructura, se han hecho evidentes las limitaciones financieras y la falta de personal para administrar los servidores
Búsqueda de alternativas y soluciones
- Se están discutiendo diversas opciones, como operar los servidores de compilación en un entorno en la nube o impulsar donaciones de recursos de servidor por parte de la comunidad
- El equipo de F-Droid expresó su intención de resolver el problema asegurando apoyo externo y nuevo hardware
Conclusión
- El valor de F-Droid y su papel en el apoyo al ecosistema de código abierto siguen siendo muy altos
- Sin embargo, son imprescindibles esfuerzos de innovación en infraestructura y mantenimiento acordes con las tendencias de las apps modernas
1 comentarios
Opiniones de Hacker News
Esto implica que sus servidores realmente son muy viejos, al punto de no soportar x86-64-v2; casi hace pensar en servidores de la era del Intel Core 2 Duo
Vale la pena revisar este artículo que resume el nivel de microarquitectura x86-64-v2 de Red Hat Enterprise Linux 9
Si los cambiaran por CPUs de consumo Epyc, parece que el rendimiento del servidor mejoraría muchísimo
De hecho intenté donar, pero ya les quedaban $80,000
Considerando que su presupuesto anual es de $17,000, incluso comprando por 2 o 3 mil dólares un servidor Epyc de consumo mATX moderno Zen4 o Zen5 seguirían dentro del presupuesto
Si de verdad tienen varios servidores muy envejecidos, un solo servidor Zen5 podría reemplazar a varios, además de ahorrar mucho en energía y espacio
También revisé el estado del presupuesto de F-Droid
Parece que las donaciones de Librapay todavía no están incluidas
Enlace de donaciones en Librapay
El requisito mínimo decía "Pentium y Celeron", así que pensamos que sería suficiente
Pero en realidad uno de los servicios usaba instrucciones soportadas solo en CPUs v3 o v4, y dejó de funcionar
Al cambiar la configuración del CPU expuesto, volvió a correr normalmente
Así que el servidor como tal sí podría tener rendimiento suficiente, y el problema podría ser una mala configuración, o que el binario requiera especificaciones más altas de las que declara, u otro tipo de problema
La instrucción
cmpxchg16bno es tan antigua y hoy se considera un requisito obligatorioComparado con el tiempo y esfuerzo que los voluntarios dedican a mantener el sistema, £80,000 es realmente muy poco dinero
He escuchado que hace falta modernizar la infraestructura, pero eso requiere una inversión importante
Si tuvieran más holgura en los fondos, probablemente podrían invertir con más confianza
Además del upgrade de servidores, hay muchos otros problemas por resolver
La situación actual sí me preocupa bastante
F-Droid es, fuera de Google, la tienda de apps de Android más grande que existe ahora mismo, así que me parece aún más necesaria
Me pregunto si hay algún plan para resolver esto, cuándo podría F-Droid actualizar sus servidores, o si existe la posibilidad de que Google retire este requisito obligatorio, aunque veo poco probable este último caso
Ese problema se corrigió en Gradle Plugin 4.2.0-rc01 / Gradle 7.0.0 alpha 9
Incluso quedó el registro del ticket
Personalmente, creo que ni siquiera entraría al top 10
Me pregunto por qué no vuelven a compilar
aapt2para ajustarlo al objetivoSe puede conseguir el código fuente
Ubicación del código fuente de aapt2
Está lleno de binarios, y cuando intenté recompilar algunos desde fuente, el sistema de build estaba tan roto que me rendí de inmediato
aapt2manualmente cada vezAsí pueden absorber automáticamente futuras actualizaciones de binarios sin tener que volver a parchear cada uno
Comparto el artículo de Wikipedia sobre Streaming SIMD Extensions (SSSE3)
Hasta mi viejo desktop soportaba esa instrucción, y lo usé durante casi 10 años
Aun así, sorprende que ni siquiera hayan dejado una ruta de respaldo en ensamblador en el código fuente
Lo más probable es que el compilador lo haya compilado con objetivo
x86_64-v2RHEL 9 también se construyó con esa opción, y en RHEL 10 sube a
x86_64-v3, agregando soporte para AVXEnlace de Wikipedia sobre AMD 10h
En la práctica no tienen hardware donde probar esto, salvo equipos viejos y lentos
No termino de entenderlo
Si
gradleyaapt2son open source, compilar directamente el toolchain, como se hace en buildroot u openwrt, daría resultados más predeciblesDel mismo modo, si f-droid construyera todo el toolchain directamente desde fuente, ya no tendría que usar binarios de
gradleoaapt2con instrucciones no soportadasAlgunas incluyen binarios nativos, y no existe metadata sobre cómo se construyó cada biblioteca, como sí pasa en buildroot o en una distro Linux
Además, cada biblioteca del ecosistema de gradle tiene un proceso de build distinto, sin estandarización, así que reconstruir todo directamente desde fuente sería un trabajo bastante engorroso y complicado
También se dice que Google ya corrigió este problema en upstream
Ver este enlace al issue
No estoy seguro de qué tan rápido se resolverá, pero aunque el hilo no da una prueba directa de que ya esté corregido, de todas formas deja algo más de tranquilidad
En el hilo enlazado confundieron una corrección de typo ("mas fixed"→"was fixed") con la resolución de este issue
Lo que se corrigió fue un problema similar de hace algunos años
Ver el Google Issue Tracker
Considerando que
sse4.1es una instrucción introducida en 2011, sorprende que todavía haya servidores tan viejos en operaciónCon un CPU moderno podrían hacer lo mismo usando solo una fracción de la energía, así que tampoco se entiende económicamente seguir con hardware tan antiguo
Me pregunto si alguien sabe cuántos servidores de build tienen o qué especificaciones manejan
Aunque lo reduzcas a la mitad, sigue siendo apenas el 10% del precio de una computadora nueva, así que recuperar la inversión tardaría 10 años
Además, un upgrade es gasto de capital, mientras que la electricidad es gasto operativo
Fuente sobre el precio de la electricidad en EE. UU.
sse4.1fue introducida por primera vez en Intel Penryn en noviembre de 2007, y AMD no la soportó hasta Bulldozer, a mediados de 2011Bulldozer agregó varias instrucciones nuevas, como AVX y FMA, pero muchos Opteron anteriores seguían siendo más rápidos en la práctica, así que antes de Epyc, a mediados de 2017, no había tanto incentivo para actualizar
Una de las razones por las que muchos paquetes empiezan a exigir
sse4.1o superior es que en CPUs viejos el overhead de cosas como ramas condicionales en procesamiento SIMD paralelo es altoLas PCs viejas de los 2000 todavía servían bien para tareas normales como navegar por la web, pero con el tiempo los programas empezaron a requerir nuevas instrucciones y fueron perdiendo utilidad
Incluso Firefox terminó exigiendo conjuntos de instrucciones más nuevos, y al final tuve que tirar un desktop que por lo demás seguía funcionando perfectamente
Pero la placa KGPE-D16 sí puede montar CPUs con soporte para
SSE4.2, así que no tengo claro cuál sea la razón exactaHablando del nuevo binario
aapt2de Google (AGP 8.12.0), F-Droid es un proyecto que pone muchísima atención en proteger y aislar el entorno de build, así que sorprende que aun así usen binarios de upstream en vez de compilar todo desde fuentePara crear apps de Android, básicamente terminas dependiendo de binarios privativos de Google
Ver este post del foro
Resumen de enlaces de referencia
F-Droid admin issue
Issue de la app Catima
Issue de MBCompass
Un miembro dijo esto: "Como siempre pasa con F-Droid, nuestras voces siempre son ignoradas. Si hubiera existido la esperanza de que discutir soluciones pudiera mejorar F-Droid, no habría terminado yéndome frustrado después de invertir tanto tiempo y energía"
La opinión es que los servidores de F-Droid de verdad están muy obsoletos
Incluso emular
x86_64sobre una arquitectura completamente distinta podría dar mejor rendimientoNi siquiera hace falta recurrir a una lógica de OSS para defenderlo
Si no te preocupa el firmware cerrado, hay muchas opciones de servidores x86 más baratos y más modernos
Por culpa de la cultura popular, uno termina pensando en bromas como "el servidor es tan viejo que fue compañero de kínder de Benjamin Franklin"