OpenRSYNC: A BSD‑licensed rsync fork that leans on OpenBSD’s security primitives
#Security

OpenRSYNC: A BSD‑licensed rsync fork that leans on OpenBSD’s security primitives

Trends Reporter
4 min read

OpenRSYNC brings the familiar rsync protocol to the OpenBSD base, trimming down the code‑base, tightening security with pledge and unveil, and offering a portable alternative for Unix‑like systems. While its adoption is modest, the project sparks a broader discussion about permissively‑licensed file‑synchronisation tools and the trade‑offs of re‑implementing mature utilities.

OpenRSYNC – What it is and why it matters

The openrsync repository (https://github.com/kristapsdz/openrsync) is a BSD‑licensed re‑implementation of the classic rsync utility. It lives inside the OpenBSD source tree, but the GitHub mirror adds a thin portability layer so the code can be built on Linux, FreeBSD, NetBSD, macOS and even OmniOS. The project was originally written for the rpki-client validator and funded by a handful of academic and network‑infrastructure groups.


Community sentiment: a niche but vocal cohort

  • OpenBSD purists appreciate the move away from the GPL‑licensed rsync binary. The ISC license aligns with OpenBSD’s long‑standing preference for permissive licensing, making it easier to redistribute the tool in custom firmware or appliance images.
  • Security‑focused developers point to the heavy use of OpenBSD’s pledge(2) and unveil(2) as a concrete demonstration that a file‑sync daemon can be sandboxed without root privileges. The codebase shows how these primitives replace the traditional chroot‑plus‑setuid approach used by the upstream rsync.
  • Portability advocates note that the project compiles cleanly on a wide range of platforms thanks to the oconfigure wrapper. CI runs on x86_64, aarch64 and s390x, which is impressive for a tool that started as an internal component.
  • Rsync veterans remain skeptical. They argue that the subset of command‑line options supported by openrsync is too narrow for production scripts, and that the lack of a generator process (merged into the receiver) could affect performance on very large transfers.

Evidence of adoption signals

  1. GitHub activity – The repository has over 10 k lines of C, a steady stream of commits, and a modest number of forks (≈30). Issues are primarily about build failures on non‑OpenBSD platforms, indicating real‑world attempts to use the tool elsewhere.
  2. Package inclusion – OpenRSYNC appears in the ports tree of OpenBSD and has been added to the pkgsrc collection for NetBSD and the homebrew formula for macOS. This distribution footprint suggests a willingness from maintainers to ship a non‑GPL alternative.
  3. Reference in security write‑ups – Several blog posts on OpenBSD’s security model cite openrsync as a case study for pledge/unveil integration, giving the project visibility beyond its immediate user base.
  4. RPKI validator deployments – The original rpki-client project ships openrsync as its internal sync engine, and a handful of network operators have reported using that stack in production.

Counter‑perspectives and challenges

Limited feature set

OpenRSYNC deliberately supports only a subset of rsync’s flags. Scripts that rely on --delete, --exclude-from, or complex filter rules may break without modification. The maintainer acknowledges this trade‑off: keeping the code small (≈10 k lines) reduces the attack surface, but it also narrows the tool’s applicability.

Performance considerations

The upstream rsync spawns a separate generator process to feed file‑list data to the receiver, allowing parallel block checksums on multi‑core machines. OpenRSYNC merges generator and receiver into a single event‑driven process. Benchmarks on a 4 TB dataset show a 5‑10 % slowdown compared with GNU rsync on OpenBSD, though the difference shrinks on modern SSDs where I/O dominates.

Portability friction

While oconfigure abstracts many platform differences, the security model still depends on OpenBSD‑specific syscalls. On Linux the project falls back to a no‑op implementation, which means the sandboxing guarantees disappear. Developers must manually audit the code or replace the sandbox layer with something like seccomp or Capsicum on FreeBSD.

Ecosystem inertia

Rsync has been the de‑facto standard for file synchronization for two decades. Many automation tools (Ansible, Salt, backup scripts) embed rsync calls directly. Convincing operators to switch to openrsync requires not only code changes but also a shift in trust: the open‑source community has vetted rsync for years, whereas openrsync is still relatively young.


What the future could look like

  • Broader licensing adoption – If more projects adopt permissive licenses for core utilities, openrsync could become a reference implementation for “secure‑by‑default” file sync.
  • Enhanced sandboxing on other OSes – A community effort to back‑port pledge‑like restrictions (e.g., using Linux’s landlock or FreeBSD’s capsicum) would make the security claims portable, potentially widening the user base.
  • Feature extensions – Adding support for common rsync flags (--delete, --exclude) without bloating the code could attract a larger audience while preserving the lean design.
  • Integration with modern CI/CD pipelines – As container‑based deployments look for minimal attack surfaces, a small, statically linked openrsync binary could replace the larger GNU rsync package in immutable images.

Bottom line

OpenRSYNC is more than a curiosity; it is a concrete experiment in re‑engineering a mature networking tool under a permissive license and with a strong security focus. The community response is mixed: security‑first engineers applaud the sandboxing, while pragmatic operators question the reduced feature set and performance trade‑offs. Whether openrsync will stay a niche OpenBSD utility or evolve into a widely‑adopted alternative depends on how quickly the project can broaden its platform security guarantees and address the most common rsync use‑cases.

Featured image

Comments

Loading comments...