Por que os aplicativos não são atualizados calculando a diferença?

Por que os aplicativos não são atualizados calculando a diferença?

Eu tenho computadores Ubuntu e um telefone Android, e sempre fico perplexo porque o gerenciador de atualização padrão no Ubuntu e no Google Play no telefone não atualiza versões existentes de aplicativos calculando a diferença entre eles e as novas versões. Tenho certeza de que esse também é o caso de outros sistemas operacionais (é por isso que essa pergunta não está no Pergunte aos entusiastas do Ubuntu ou do Android)

Considere, por exemplo, a atualização mais recente (uma versão secundária) doGoogle Mapas(em 18 de abril de 2012). A seção “Novidades” diz que inclui uma correção de bug crítica. É seguro presumir que muito código não foi modificado e, ainda assim, quando você atualiza o aplicativo, ele baixa mais de 6 MB, como se fosse uma instalação nova.

Por que os servidores de atualização não conseguem calcular a diferença (a la git) com as versões instaladas e enviar apenas a diferença? Pode ser tão difícil fazer isso com todas as versões? A largura de banda economizada não seria uma grande motivação?

Editar 6 de dezembro de 2016: o Google acaba de anunciar que usará correção arquivo por arquivo para atualizações de APK do Android -Salvando dados: reduzindo o tamanho das atualizações de aplicativos em 65%

Responder1

Existem três níveis nos quais você pode otimizar o tamanho do download transmitindo apenas um diff.

Nível do pacoteTransmita apenas pacotes atualizados. Isso já está feito. Se você observar os tamanhos de download dos pacotes, verá que a maioria deles é muito pequena. Assim, isso protege mais largura de banda.

Arquivos dentro de um pacoteTransmita apenas arquivos alterados dentro de um pacote. O gerenciamento de pacotes é mais do que apenas copiar arquivos para locais fixos. Existem arquivos de configuração que podem ter sido adaptados automaticamente ao seu sistema. Pode haver alterações manuais. Seria difícil descobrir a diferença com segurança sem primeiro carregar os arquivos instalados.

Diferenças de arquivos internosA maioria, especialmente os arquivos grandes, são binários. É difícil imaginar um algoritmo de correção confiável para arquivos binários se o arquivo a ser corrigido tiver uma pequena alteração como, por exemplo, um carimbo de data/hora de construção diferente. Por outro lado, para arquivos de texto, os antigos algoritmos diff e patch aplicados pelo git provavelmente funcionariam bem, mas provavelmente não valeria o esforço.

Outro problema seria você não saber qual versão antiga será atualizada. Os usuários podem ter ignorado as atualizações intermediárias. É claro que o gerenciador de pacotes poderia solicitar ao servidor que enviasse uma comparação para uma determinada versão, mas isso colocaria uma carga enorme no servidor para gerar diferenças. Duvido que os mantenedores do servidor permitam isso.

Resumo: O que poderia ser feito de forma fácil e confiável já foi feito. O resto cabe aos gerenciadores de pacotes criarem pacotes pequenos para manter as atualizações pequenas.

Responder2

Principalmente, é tecnicamente difícil para os desenvolvedores. E a largura de banda é barata – ou melhor, a conta é paga pelos usuários.

O Google Chrome investiu muita inteligência no desenvolvimento de atualizações incrementais para binários do Chromehttp://blog.chromium.org/2009/07/smaller-is-faster-and-safer-too.html.

O Fedora desenvolveu 'delta rpms' para enviar atualizações incrementais de pacotes. Curiosamente, como meu computador tem uma conexão de rede rápida, mas um processador lento, a instalação deles é mais lenta para mim.

informação relacionada