View Single Post
Old 07-20-2016, 09:54 PM
Reply Reply is offline
Join Date: Jul 2003
Location: Chicago
Posts: 8,305
You can't really update a program while it's still running, so what they have to do is launch a separate updater program, close the main program, update the main program, and then relaunch the main program. And if the updater needs an update, well, the main program (or a third updater) does a similar process. None of that is very hard, though.

And small incremental updates ("delta patches" that only download the difference between v1.09 and v1.10 instead of redownloading the entire v1.10) have been around since the 90s or earlier via rtpatch in the Windows world and rsync in the *NIX world.

Today, the standard practice for the *NIX world is to let package managers handle the updates. For OSX it's the App Store, for Windows it's the Windows Store (I think?). They handle all the downloads and patches etc. for you, the same way the Play Store or App Store on your phone does.

The legacy (meaning old, non-best-practice) apps out there still use their ancient update schemes, which are usually just "download the entire program over again from our website or FTP because we're lazy". It certainly doesn't have to be that way, but that's often the easiest for lazy programmers. Microsoft has improving the update process even before the Windows Store using their ClickOnce technology, but Windows being what it is (super-popular and used across the world), very few programmers followed their best practices and just did their own things, usually the "laziness wins" methods above.

Where efficient updates really matter are big files that are distributed to millions of users, things like MMO games. In those cases, not only do they only update changed files, they will make users send each bits and pieces. User A has 50% of a new file, he'll send that 50% to user B while user C sends both of them another 25% and users D, E, F each send them another 5%. (That's how Bittorrent works, too.).

None of this is very hard. There are usually documented, encouraged, best practices for every operating system, or failing that, a bunch of third-party software update and patching solutions that can be integrated into your software. Too many small business and indie programmers just don't care because by the time you're updating someone's software, you already have their money. And bandwidth is cheap as heck unless you have millions of users. With limited development resources, they probably prefer to spend time improving the actual programs rather than the update processes behind them...