Сделал несколько тестов. Не вполне корректно, но в целом более ли менее понятно. Итак. Один модуль 640 метров, второй модуль аналогичного размера, но в нем удалено пару файлов и добавлено пару других чтоб общий размер не сильно изменился.
rsync - отправил 181кб, скачал 22 метра.
zsync - сказал, что 99.2% уже есть. То есть скачать по идее должен 5.1 + 1.2 (размер самого sync файла) - 6.3 метра, но это чистый размер, сколько будет реально скачано не знаю, с моим http сервером качать отказался.
zsync2 - 99.5% остальное аналогично zsync, только размер zsync файла - больше.
xdelta3 - абсолютный чемпион по размеру того что надо качать. Патч получился 1.9 метров.
Все это достаточно странно, так как везде утверждается, что алгоритм один и тот же.
По остальным аспектам применения все еще менее однозначно. Rsync - минимум телодвижений, закинул файл и уже работает, стандарт де факто.
Zsync - не развивается с 17 года, zsync2 - альфа. Протокол только http(s), вроде качает с libcurl, но с ftp не завелось. Httpd тоже не всякий подойдет, нужно чтоб чанками умел отдавать. Нужно создавать файл с метадатой для каждого выкладываемого файла.
Xdelta - по размеру патча чемпион, по всему остальному нет. Патч создается для конкретных файлов, то есть если у тебя более древний файл, чем тот для которого сделан патч уже не обновить. Можно патчи мержить, но это дополнительный геморрой. Сам качать не умеет. Можно по идее сделать скиптовую обвязку и получится zsync ))