В OpenBSD влили openrsync — собственную реализацию rsync с лицензией BSD (ISC). Она совместима с современным rsync (тестируют на версии 3.1.3, подходит любой с протоколом 27), но понимает только часть флагов командной строки. Официально живёт под OpenBSD, однако собирается и на других UNIX-системах. Проект вырос из rpki-client — RPKI-валидатора для OpenBSD. Финансировали NetNod, IIS.SE, SUNET и 6connect.
Основной алгоритм делится на отправителя (sender) и получателя (receiver). Сначала они обмениваются списком файлов с метаданными — это делает flist.c. Обе стороны сортируют записи в лексикографическом порядке, сохраняя очерёдность «директория — содержимое». Затем получатель для каждого файла запрашивает обновление — это «блочный обмен». Для симлинков и директорий данных хватает из списка, для обычных файлов — проверяют размер и время модификации. Если файл устарел, получатель разбивает его на блоки фиксированного размера (кроме последнего, если размер не кратен), хэширует каждый дважды: быстрым Adler-32 на 4 байта и медленным MD4 на 16 байт. Эти хэши уходят отправителю. Тот перебирает байты своего файла, ищет совпадения — сначала по быстрому хэшу, потом по медленному. Найдя совпадение, отправляет данные до этого места как поток байт, затем идентификатор блока. Получатель пишет поток, копирует данные из блока — и так до конца файла. Если файла на получателе нет, его шлют целиком потоком. В конце всё сверяется по MD4-хэшу.
Размер блока — квадратный корень от размера файла, округлённый вверх и кратный восьми. Минимум — 700 байт.
openrsync работает как клиент и сервер. Пользователь запускает клиент, тот либо запускает сервер удалённо через ssh (с флагом --server), либо подключается к постоянному сетевому демону. Режим (sender/receiver) определяется флагами --sender для сервера и типом переданных путей для клиента. Демон использует протокол rsyncd(5) для рукопожатия.
Безопасность — главная фишка. openrsync опирается на OpenBSD: pledge(2) ограничивает доступные системные вызовы на разных этапах (получатель не получит запись диска в сухом прогоне, демон — доступ к сети раньше времени), а unveil(2) «запирает» файловую систему в пределах целевой директории — альтернатива chroot без прав root. MD4-хэши при старте сервера инициализируются через arc4random(3), а не time(3).
Портируемость — опциональна. Код собирается на Linux (glibc и musl), FreeBSD, NetBSD, macOS и OmniOS под архитектурами x86_64, aarch64 и s390x. Основная сложность — замена pledge и unveil. FreeBSD может использовать Capsicum, а с Linux пока всё грустно: «там бардак с безопасностью, нужна рука эксперта».
openrsync написан на C — около 10 000 строк. Автор прямо задаёт вопрос: «Доверяете ли вы мне не ошибиться?»