Pourquoi les applications ne se mettent-elles pas à jour en calculant la différence?

1

J'ai des ordinateurs Ubuntu et un téléphone Android. Je ne comprends donc pas pourquoi le gestionnaire de mise à jour par défaut d'Ubuntu et de Google Play sur le téléphone ne met pas à jour les versions existantes des applications en calculant la différence entre elles et les nouvelles versions. Je suis certain que c'est également le cas avec d'autres systèmes d'exploitation (c'est pourquoi cette question n'appartient pas à Ask Ubuntu ou aux passionnés d'Android)

Considérons, par exemple, la dernière mise à jour (une version mineure) de Google Maps (à compter du 18 avril 2012). La section "Quoi de neuf" indique qu'elle inclut une correction de bogue critique. Il est prudent de supposer que beaucoup de code n'a pas été modifié, et pourtant, lorsque vous mettez à jour l'application, celle-ci télécharge plus de 6 Mo, comme s'il s'agissait d'une nouvelle installation.

Pourquoi les serveurs de mise à jour ne peuvent-ils pas calculer la différence (à la git) avec les versions installées et envoyer uniquement la différence? Est-ce vraiment difficile de faire cela avec toutes les versions? La bande passante économisée ne serait-elle pas une motivation majeure?

modifier 6 déc. 2016: Google vient d'annoncer qu'il utilisera un correctif fichier par fichier pour les mises à jour d'Android APK - Enregistrement des données: réduction de 65% de la taille des mises à jour des applications

WeNeigh
la source
Dunno. Fedora l'a fait depuis quelques années déjà .
Ignacio Vazquez-Abrams
Chrome le fait aussi lors de la mise à jour, je pense. Sur les plates-formes mobiles, les cycles de publication sont probablement plus lents, car vous avez le temps supplémentaire nécessaire pour permettre au fournisseur de système d'exploitation de certifier votre application, etc. Enfin, un serveur proposant des mises à jour devrait calculer les différences à la volée en fonction de la version que vous possédez. ou cachez-les. la bande passante est bon marché de nos jours (et vous ne mettez pas à jour Google Maps sur votre téléphone Android via le réseau cellulaire, je suppose) et ajouter davantage d'exigences de traitement et de stockage aux serveurs de mise à jour n'est probablement pas trop élevé sur la liste des utilisateurs.
Joey
@ IgnacioVazquez-Abrams: Je ne le savais pas! Peut-être qu'il est temps que je quitte Ubuntu après tout :)
WeNeigh

Réponses:

1

Il existe trois niveaux pour lesquels vous pouvez optimiser la taille du téléchargement en transmettant uniquement un diff.

Niveau du paquet Transmettez uniquement les paquets mis à jour. C'est déjà fait. Si vous regardez les tailles de téléchargement des paquets, vous voyez que la plupart d'entre eux sont vraiment petits. Ainsi, cela sécurise le plus de bande passante.

Fichiers dans un package Transmettre uniquement les fichiers modifiés dans un package. La gestion des packages ne se limite pas à la copie de fichiers dans des emplacements fixes. Il existe des fichiers de configuration qui peuvent avoir été automatiquement adaptés à votre système. Il peut y avoir des changements manuels. Il serait difficile de faire la différence de manière fiable sans télécharger au préalable les fichiers installés.

Diffs de fichiers internes La plupart et surtout les gros fichiers sont binaires. Il est difficile d'imaginer un algorithme de correction fiable pour les fichiers binaires si le fichier à corriger comporte une petite modification, telle qu'un horodatage de construction différent, par exemple. Par contre, pour les fichiers texte, les anciens algorithmes de diff et de patch appliqués par git fonctionneraient probablement bien, mais cela ne vaut probablement pas la peine.

Un autre problème serait que vous ne savez pas quelle ancienne version sera mise à jour. Les utilisateurs peuvent avoir ignoré les mises à jour intermédiaires. Bien sûr, le gestionnaire de paquets pourrait demander au serveur d’envoyer un diff à une certaine version, mais cela entraînerait une charge énorme sur le serveur pour générer des diffs. Je doute que les mainteneurs de serveur permettent cela.

Résumé : Ce qui pourrait être fait facilement et de manière fiable est déjà fait. Le reste est aux gestionnaires de paquets de faire de petits paquets pour garder les mises à jour petites.

bjhend
la source
1
En passant, il existe des méthodes de mise à jour des fichiers binaires utilisant un algorithme de diff binaire, telles que bsdiff . En fait, Google Chrome utilise son propre algorithme de diff binaire appelé Courgette dans le cadre de son mécanisme de mise à jour automatique.
Stephen Jennings
0

Principalement, c'est techniquement difficile pour les développeurs. Et la bande passante est bon marché - ou plutôt, la facture est payée par les utilisateurs.

Google Chrome a beaucoup investi dans le développement de mises à jour incrémentielles pour les fichiers binaires Chrome. http://blog.chromium.org/2009/07/smaller-is-faster-and-safer-too.html .

Fedora a développé «delta rpms» pour envoyer des mises à jour incrémentielles de paquets. Curieusement, comme mon ordinateur dispose d’une connexion réseau rapide mais d’un processeur lent, leur installation s’effectue plus lentement.

Colonel Panic
la source
1
Haha, ma situation est exactement le contraire. Je suis dans un "pays du tiers monde" et ma vitesse de connexion est effroyable. J'ai souvent souhaité pouvoir obtenir des diffs au lieu de paquets entiers, alors je eu poser cette question.
WeNeigh