I have Ubuntu computers and an Android phone, and it's always perplexed me why the default update manager on Ubuntu and Google Play on the phone don't update existing versions of applications by calculating the difference between them and the new versions. I'm sure this is the case with other operating systems as well (which is why this question isn't in Ask Ubuntu or Android enthusiasts)
Consider, for example, the latest update (a minor release) of Google Maps (as of April 18,2012). The "What's new" section says it includes a critical bug fix. It's safe to assume a lot of code wasn't modified, and yet, when you update the app, it downloads over 6 MB, as if it's a fresh install.
Why can't the update servers calculate the difference (a la git) with installed versions and send only the difference? Can it really be that hard to do that with all versions? Wouldn't the saved bandwidth be a major motivation?
Edit 6 Dec 2016: Google just announced that they are going to use file-by-file patching for Android APK updates - Saving Data: Reducing the size of App Updates by 65%