Yeah, Apple is chronically unable to ship diff updates (or more generally updates). They just can't do it apparently. iTunes update? Download everything. Xcode update? Download everything. AppStore app update? Download everthing. iOS firmware update? Download everything.
All their other updates done through Software Update use a very sophisticated binary diff setup using Colin Percival's bsdiff — the updater checks the current state of your filesystem, hashing the files covered by the update manifests, and downloads the smallest possible update.
The only downside is that the "Checking for new software…" dialog takes fucking forever.
I'd love if that dialogue would give more feedback about what it's doing. I've always just assumed that there's an issue with my connection or their update servers.
Complete, non-diff updates have predictability on their side; if something was corrupted on the user's end, the update will overwrite it, whereas a diff will leave it in an unpredictable state.
I suspect Apple prefers the simplicity and explainability of "here's the update, same thing for everyone" to "well if this smaller update didn't work in any of a huge variety of ways, you could optionally try this other update"
This can easily be automated. You could send a hash of the binary and have a custom patch either pulled from cache or created (the largest "patch" being the whole binary). You'd end up with a fairly complete cache very fast though. Binary diffing is a mostly solved problem. This assumes that there's a list of hashes that correlate to known historical binaries. If the hash doesn't match you fall back to sending the whole thing.
You sound like the only person who's dealt with this problem before :-)
I remember the Visual Studio setup team and their stories about the woes of trying to make downloads as small as possible. You're fighting with:
- wanting the file download to be one step
- what version (or sets of versions?) can you upgrade from? Does this include the one-off patches you were mandated to provide to top-tier (guaranteed bug turnaround time) Fortune 100 partners?
- how do you handle corrupted files or munged bits of the installation that were unchanged between versions?
The list goes on. You'd think things like Setup are boring, but trying to make the experience smooth and good requires and incredible amount of amazingly unglamorous work. It's one of those pieces of the product that nobody notices until it is slow/buggy/has picture of people who are way too happy to be using your product flash during installation.