I wish GOG would also open up their client and release it cross platform. Or at least document their protocol, as they promised.
Take Steam for example. For some games, downloading the update takes seconds, but calculating diffs and extracting takes 10-20 minutes. That's great for Valve, because little bandwidth is used, but terrible at the client side. On top of that, the update process slows the rest of the system almost to a halt, because of all the hard drive activity.
I can potentially see this mechanism making the same mistake.
As far as I'm aware, that's a problem only on Linux, because Windows has a desktop-grade IO scheduler tuned to interactive usage (whereas in Linux both the CPU and IO schedulers are written for maximum throughput).
(Seems to be worst on Firefox)
If this poses an issue anyway you could run steam using ionice.
Using their customers bandwidth to take off some load of their own patch servers during peak times is (imho) a pretty good use of BitTorrent. You can also quite easily disable this feature in their launcher app.
One thing that seemed glossed over, so I'm not sure if it's obvious for their use case, is the trade-off between compress once, distribute many times.
When looking at how long it takes to compress vs transmit, the optimisation was done to make the sum of both as small as possible - minimise(time(compress) + time(transmit)).
Instead it seems like you want to do is - minimise(time(compress) + expected_transmissions * time(transmit))
For any reasonable number of distributed copies of a game, it seems like this time to transmit will quickly come to dominate the total time involved.
I suspect, however, that the time to compress grows extremely quickly, for not much gain in compression, so the potential improvement is probably tiny even if you expect to be transmitting to millions of clients.
The problem also applies to the binary delta. Adding a prefix will shift everything forward causing a diff in everything.
Bsdiff solves this with the suffix sorting. But what does rsync do? Or am I just wrong that rsync still works well? In either case, I think the offset problem makes for a more interesting motivating example for bsdiff.
Thus, in your example, the first (and possibly the last) block won't be found, but all other blocks will be found, shifted by an offset of 1.
The butler client is an incredible way of sending games to itch.io and I sincerely hope that Apple or Google had a good command line client as well.