Торрентами, полагаю, все пользовались и знают, как неудобно это работает, когда скачиваешь сериал, раздача которого обновляется по мере выхода серий. Вчера их было 9, а сегодня добавили 10-ю и нужно обновить .torrent. В некоторых клиентах пытались привязать обновление через RSS, но трекеры разные и никогда это нормально не работало. Потому, видимо, и не зашло в массы — редко в каком клиенте это можно встретить.

Речь же не совсем о BitTorrent, а скорее о средстве синхронизации файлов. Компания, выпускающая закрытый µTorrent, однажды выкатила замечательный и многообещающий BitTorrent Sync. Такой же закрытый, что объяснялось общей кодовой базой с их торрент-клиентом, но работает эта штука совсем иначе. Во-первых, это не совсем торренты и здесь именно синхронизация, а не раздача. Юзер добавляет папку, даёт её код (аналог magnet-link) другим юзерам и они получают копию папки. Если первый юзер что-то меняет в папке, остальные получают изменения. Синхронизация бывает как во все стороны между юзерами, так и односторонняя, которая как раз напоминает обычный BitTorrent.

И что меня порадовало: почти сразу же появился российский трекер на всё том же ублюдочном форумном движке, где раздачи производились через BTSync. Скажем, выходит новый сезон “Ворониных”, появляется тема на трекере и юзер пихает код раздачи себе в BTSync. Скачивается одна-две серии, он смотрит и может не париться — не нужно заходить на трекер, так как новые серии, добавленные в раздачу, прилетят к нему сразу же, как только будут добавлены сидом (раздающим). BitTorrent так не умеет. Увы, длилось это не так уж долго и тот трекер давно закрыт.

BitTorrent Sync внезапно переименовался в Resilio Sync и вроде бы выделился в отдельную компанию, не связанную с µTorrent. Удобнее в плане интерфейса он не стал, как не стал и открытым (ну, никто и не обещал). Тут же появились два открытых приложения — Syncthing и LibreVault. К сожалению, ни один из них не заменил Resilio Sync.

Syncthing просто не позволяет раздачи вроде торрентов, так как заточен именно под синхронизацию, причём безопасную. В нём нужно обязательно привязать и подтвердить каждый девайс, участвующий в синхронизации и именно её обеспечивать он и создан. Он не слишком удобен, но терпимо, так как других подобных продуктов мало и этот наиболее вменяемый. Вполне себе жив и здравствует, в своём деле чуть ли не стандарт теперь. Я пользуюсь им в основном для синхронизации файлов между десктопом и телефоном: какие-то папки синхронизируются в одну сторону, чтобы автоматически сливать, например, фотографии с телефона на комп и тут же удалять их с телефона; отдельные папки синхронизируются в обе стороны, чтобы в обеих целях всегда была актуальная версия файлов. Тут же есть и версионирование, о чём будет чуть дальше.

LibreVault же тянул, как я понимаю, один разработчик и было это шатко и валко, пока вовсе не остановилось. Кажется, он брался переписать программу, снова что-то завертелось, а потом снова забросил. Полноценного и готового для использования релиза нет до сих пор, что жаль, так как он как раз метил в открытые аналоги Resilio Sync — простая синхронизация без лишних телодвижений и тонкостей, коих полон Syncthing.

И вот тут я размечтался, так как кодить, к сожалению, не умею, не говоря уже о таких сложных вещах, как средство синхронизации на основе блоков.
Представьте себе нечто вроде Resilio Sync, но с версионированием (как тэги в Git). Юзер расшаривает папку и может поделиться кодом с другими (либо в одну сторону, либо многосторонняя синхронизация). В случае односторонней синхронизации свежие изменения просто продолжают прилетать к другим юзерам, но если в какой-то момент первый юзер поставил тэг, то у других юзеров будет возможность получить именно эту версию раздачи, пока её копия хранится у раздающего. Можно сравнить это разными версиями .torrent-файла для одной раздачи, но постоянно синхронизируются только сами .torrent, а не обязательно их содержимое. Другие юзеры могут либо всегда иметь свежак, храня также и прежние версии, либо выбирать нужные, как обычно выбирают файлы при скачивании файлов через BitTorrent.

Да, тут есть одна загвоздка с версионированием и дисковым пространством. Я бы предположил, что некоторые современные файловые системы (ZFS, Btrfs, ReFS) могли бы решить это дело, но далеко не везде они используются. Потому самый простой и дубовый вариант — папки и символические ссылки. Симлинки есть даже в NTFS, пусть и далеко не все об этом знают и активно ими пользуются.
Git сам разруливает такие дела, храня все ветки и версии на месте, но Git заточен под текстовые файлы, а не бинарные, да и цели у него заметно отличаются, так что такой подход был бы сложноват. В случае с синхронизацией бинарников, мне кажется, достаточно было бы в самой папке синхронизации иметь либо последнюю версию раздачи, либо, если юзеру нужна какая-то другая, по выбору. Остальные версии со всеми изменениями хранятся тут же в .versions по порядку [номер]+[название тэга], и состоят из символических ссылок на основную последнюю (или выбранную) там, где файлы не менялись, и файлов с изменениями. Увы, вряд ли возможно делать что-то подобное на уровне блоков, оставляя файлы просто файлами в папках, так что вот так.

В случае многосторонней синхронизации, полагаю, потребуются права — кто-то может создавать тэги и контролировать процесс, а кто-то нет. Это, мне кажется, вполне решаемо через сами коды, выдаваемые юзерам.
Как быть в этом случае с ветками и нужны ли они? Тут вопрос в целях.

Изначально я подумал о сериалах, но мысль быстро зацепилась за насколько другие сферы, а именно аудио-проекты. Я вспомнил свою возню с разными версиями проектов Reaper (да и любой DAW, если уж на то пошло) и то, насколько непросто без осложнений синхронизировать подобные вещи с кем-то ещё для общей работы. Да, Git как бы подходит, но в случае с папками по несколько гигабайт, полных бинарных файлов, это становится откровенно неудобно. Да и сам Git в плане удобства для музыкантов — нет, строго нет. Есть и другие системы контроля версий, которые вроде бы получше дружат с бинарниками и большими объёмами, но они сейчас точно не будут удобнее того, что уже популярно и неудобно.

Так вот, если цель в простой и удобной синхронизации, вроде торрентов, то ветки скорее создадут путаницу в том, что уже становится несколько сложнее, чем обычно. Если говорить о какой-то удалённой работе с разными людьми, то оно вроде бы и нужно, но в этом случае, если уж так надо, есть собственно DVCS.

Наверняка я что-то не продумал, что-то где-то не доглядел, но вот вам идея прямиком из духовки. Не особо надеюсь, что она попадёт в нужные руки и заинтересует кого-то, но раз она есть, то почему бы ей не быть хотя бы здесь?