¿Por qué las aplicaciones no se actualizan calculando la diferencia?

¿Por qué las aplicaciones no se actualizan calculando la diferencia?

Tengo computadoras con Ubuntu y un teléfono con Android, y siempre me ha dejado perplejo por qué el administrador de actualizaciones predeterminado en Ubuntu y Google Play en el teléfono no actualiza las versiones existentes de las aplicaciones calculando la diferencia entre ellas y las nuevas versiones. Estoy seguro de que este también es el caso de otros sistemas operativos (por eso esta pregunta no está en Ask Ubuntu o los entusiastas de Android)

Considere, por ejemplo, la última actualización (una versión menor) demapas de Google(al 18 de abril de 2012). La sección "Novedades" dice que incluye una corrección de errores críticos. Es seguro asumir que no se modificó una gran cantidad de código y, sin embargo, cuando actualiza la aplicación, se descarga más de 6 MB, como si fuera una instalación nueva.

¿Por qué los servidores de actualización no pueden calcular la diferencia (a la git) con las versiones instaladas y enviar solo la diferencia? ¿Puede realmente ser tan difícil hacer eso con todas las versiones? ¿No sería el ancho de banda ahorrado una motivación importante?

Editar 6 de diciembre de 2016: Google acaba de anunciar que utilizará parches archivo por archivo para las actualizaciones de APK de Android.Ahorro de datos: reducción del tamaño de las actualizaciones de aplicaciones en un 65 %

Respuesta1

Hay tres niveles en los que puedes optimizar el tamaño de la descarga transmitiendo sólo una diferencia.

Nivel de paqueteTransmitir únicamente paquetes actualizados. Esto ya está hecho. Si observa los tamaños de descarga de los paquetes, verá que la mayoría de ellos son realmente pequeños. Por lo tanto, esto protege la mayor cantidad de ancho de banda.

Archivos dentro de un paqueteTransmita solo archivos modificados dentro de un paquete. La gestión de paquetes es más que simplemente copiar archivos a ubicaciones fijas. Hay archivos de configuración que pueden haberse adaptado automáticamente a su sistema. Puede haber cambios manuales. Sería difícil descubrir de manera confiable la diferencia sin cargar primero los archivos instalados.

diferencias de archivos internosLa mayoría y particularmente los archivos grandes son binarios. Es difícil imaginar un algoritmo de parche confiable para archivos binarios si el archivo a parchear tiene un pequeño cambio como, por ejemplo, una marca de tiempo de compilación diferente. Por otro lado, para archivos de texto, los antiguos algoritmos de diferencias y parches aplicados por git probablemente funcionarían bien, pero probablemente no valga la pena el esfuerzo.

Otro problema sería que no sabes qué versión anterior se actualizará. Es posible que los usuarios se hayan saltado las actualizaciones intermedias. Por supuesto, el administrador de paquetes podría solicitar al servidor que envíe una diferencia a una versión determinada, pero eso supondría una carga enorme para el servidor para generar diferencias. Dudo que los mantenedores del servidor lo permitan.

Resumen: Lo que se podía hacer de forma fácil y fiable ya está hecho. El resto depende de los administradores de paquetes, crear paquetes pequeños para mantener las actualizaciones pequeñas.

Respuesta2

Básicamente, es técnicamente difícil para los desarrolladores. Y el ancho de banda es barato, o mejor dicho, la factura la pagan los usuarios.

Google Chrome invirtió mucha inteligencia en el desarrollo de actualizaciones incrementales para los binarios de Chromehttp://blog.chromium.org/2009/07/smaller-is-faster-and-safer-too.html.

Fedora desarrolló 'delta rpms' para enviar actualizaciones incrementales de paquetes. Curiosamente, debido a que mi computadora tiene una conexión de red rápida pero un procesador lento, estos en realidad se instalan más lentamente para mí.

información relacionada