Зачем миру еще один rsync и почему он появился в OpenBSD

02 Jun, 2026

Представьте: вы работаете с инструментом, который стал стандартом индустрии еще в 90-х. Речь про rsync. Он быстрый, надежный, он есть везде. Но если вы заглянете в исходники оригинального rsync, то увидите огромный пласт кода под лицензией GPL, накопленный за десятилетия. В какой-то момент разработчики OpenBSD решили, что им нужен инструмент с тем же алгоритмом, но написанный с нуля, с акцентом на безопасность и под свободной лицензией ISC. Так появился openrsync.

Это не просто клон. Это попытка переосмыслить классический протокол, выкинуть лишнее и заставить его работать в жестких рамках безопасности современной ОС.

Что это за проект

openrsync — это независимая реализация протокола rsync. Если вам нужно синхронизировать файлы между серверами, но вы по каким-то причинам не хотите тащить в систему тяжеловесный GNU rsync или вам критична лицензия BSD, этот проект — ваш кандидат.

Интересно, что openrsync создавался не как забава, а для конкретной задачи: валидации RPKI (Resource Public Key Infrastructure). Проекту rpki-client требовался надежный способ скачивания сертификатов по протоколу rsync, и они решили написать свою реализацию вместо использования системной. Сейчас код уже перекочевал в основную ветку OpenBSD, а в этом репозитории лежит портабельная версия, которую можно собрать под Linux или macOS.

Как он работает под капотом

Если вы когда-нибудь задумывались, почему rsync такой быстрый, то дело в «блочном обмене». Вместо того чтобы перекачивать файл целиком, клиент и сервер сравнивают куски (блоки) файла.

Реклама
  1. Приемник делит свой (старый) файл на блоки.
  2. Для каждого блока считаются два хеша: быстрый (Adler-32) и медленный (MD4).
  3. Хеши отправляются отправителю.
  4. Отправитель «прокатывает» свое окно хеширования по файлу. Если быстрый хеш совпал, он проверяет медленный.
  5. Если совпадение найдено, вместо данных передается просто индекс блока. Если нет — летят «сырые» байты.

В openrsync алгоритм выбора размера блока довольно забавный: берется квадратный корень из размера файла, округляется до ближайшего множителя восьмерки, но не меньше 700 байт. Почему именно так? Автор честно пишет в документации: «по неизвестным причинам». Обожаю такую искренность в README.

Безопасность прежде всего

Главная фишка openrsync — это не скорость и не лицензия, а параноидальный подход к безопасности. В OpenBSD версии используются системные вызовы pledge и unveil.

unveil буквально ослепляет процесс: после старта программа видит только ту директорию, в которую идет синхронизация. Даже если в коде найдется уязвимость, атакующий не сможет выйти за пределы папки назначения. Для тех, кто привык запускать rsync от рута (что само по себе риск), это отличная страховка.

В портабельной версии под Linux таких механизмов из коробки меньше (автор называет состояние безопасности в Linux «бардаком»), но сама архитектура кода с разделением на разные процессы для отправителя и получателя минимизирует риски.

Практические моменты

Собрать проект на Linux очень просто:

./configure
make
sudo make install

При этом openrsync спокойно живет рядом с обычным rsync, они не конфликтуют. Можно даже заставить их работать в паре:

rsync --rsync-path=openrsync src/* remote_host:dst

Но тут есть нюанс. openrsync поддерживает только подмножество аргументов оригинальной утилиты. Если у вас в скриптах наворочены сложные фильтры и специфические флаги — скорее всего, их придется переписывать. С другой стороны, если вам нужны базовые -lrtp (ссылки, рекурсия, время, права), то разницы вы не заметите.

Итог: стоит ли переходить

На мой взгляд, openrsync — проект специфический. Он идеально подойдет вам в двух случаях:

  1. Вы строите максимально защищенную систему (особенно на базе OpenBSD) и хотите минимизировать количество GPL-кода и потенциальных дыр.
  2. Вам нужна легкая реализация протокола rsync для встраивания в свое приложение на C — благо тут всего около 10 тысяч строк кода, в которых реально разобраться за вечер.

Если же ваша работа завязана на сложных скриптах автоматизации, обкатанных годами на стандартном rsync v3.2+, то openrsync может показаться слишком аскетичным. Но как пример того, как нужно писать системный софт с оглядкой на безопасность, этот проект — просто учебник. заслуживающий места в «звездах» на GitHub.