rsync: the delta-transfer idea that never became obsolete
An open source utility that provides fast incremental file transfer. It also has useful features for backup and restore operations among many other use cases.
At a glance
- What is it?
- rsync is the open source file copying tool for local and remote transfer whose delta-transfer algorithm sends only the differences between files across the link, without requiring both sets of files at either end. Written in C, originally by Andrew Tridgell and Paul Mackerras and maintained from 2004 to 2024 by Wayne Davison, it ships with a technical report on its own algorithm, runs over ssh or rsh or as a socket daemon, and released v3.5.1 in September 2026.
- Who is it for?
- Use rsync whenever files must move between systems and only the differences matter, backups, mirrors, deployment artifacts and public distribution, over ssh for security or a daemon for anonymous serving. Choose scp for a one-off copy where simplicity beats bandwidth, or a modern sync service when continuous bidirectional sync is the requirement rather than directional transfer.
- Can I use it commercially?
- Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
- Is it still maintained?
- Yes. The repository last received commits 6 days ago.
- What is it written in?
- Mainly C, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 30, 2026, and from our analysis. They are not legal advice.
Editorial analysis
An algorithm that looks impossible until you read the report
The heart of rsync is the delta-transfer algorithm, and the README pauses to explain why it is remarkable, it provides a very fast method for bringing remote files into sync by sending just the differences across the link, without requiring that both sets of files are present at one of the ends beforehand. At first glance this seems impossible, the README concedes, because calculating diffs between two files normally requires local access to both. The resolution is the rolling-checksum trick the algorithm is famous for, the receiver's content is fingerprinted in overlapping windows so the sender can match pieces it already has and transmit only what is genuinely absent, and a technical report describing the algorithm is included with the package itself, an invitation to verification that few tools of this age extend. Every incremental backup product and delta-sync service since has either reimplemented this idea or been measured against it, and the reason the tool never became obsolete is that the idea remains the efficient answer to the question it posed.
Used like scp, until you open the options
The usage guidance is famously brief, basically you use rsync just like scp, but rsync has many additional options, and the complete list is one command away:
rsync --helpThe manpage, hosted alongside the project's documentation, carries the detail, and it is genuinely needed, because the option surface is where the tool's versatility lives, inclusion and exclusion patterns, deletion semantics for making destinations mirror sources, preservation of permissions, ownership and timestamps, dry runs, batching, and the backup behaviors the project description names as a headline use case. The learning path the README implies is correct, start with scp-shaped muscle memory, then adopt options one at a time as a need appears, and consult the manpage rather than folklore, since several widely repeated flag combinations found in tutorials are subtler than they look and the official documentation states the actual semantics.
ssh transport, no privileges, optional daemon
The setup section makes rsync's operational modesty explicit, it normally uses ssh or rsh for communication with remote systems, does not need to be setuid, and requires no special privileges for installation, the only prerequisite being a working ssh or rsh setup, with ssh recommended for its security features. That profile, an ordinary binary speaking to an ordinary shell login, is why rsync proliferated, nothing on the server side needed to change, and it also defines the trust model, the tool rides the authentication and encryption of its transport rather than inventing its own. The alternative is daemon mode, where rsync listens on a socket directly, generally used for public file distribution, with authentication and access control available for deployments that are not anonymous, configuration of which belongs to the rsyncd.conf manpage. Two deployment shapes, one riding the login infrastructure every machine already has and one purpose-built for serving, cover the tool's two audiences, administrators and distributors.
configure, make, and the compiler caveat
Building from source follows the classic autotools rhythm the README describes, run the configure script, which creates a Makefile and config.h appropriate for the system, then type make, and finally put a copy of rsync in your search path on both local and remote systems or use make install. The interesting wrinkle is the compiler guidance, on some systems you must force configure not to use gcc, because gcc may not support features the system supports, the example given being 64 bit file offsets, and the remedy is setting the CC environment variable to the native compiler before configure runs. A footnote of computing history sits in that advice, from the era when the Free Software Foundation's compiler was not yet the universal default and system compilers held platform advantages. The INSTALL.md page in the repository extends this with the libraries and packages that unlock maximum features in a build, the zstd and acl and xattr support that distributions compile in but a minimal build omits.
The source tree as a systems programming exhibit
Reading the repository's file list is a tour of what a network file transfer program actually contains. flist.c builds the file lists the protocol exchanges, checksum.c implements the rolling fingerprints, match.c finds the common pieces, generator.c drives the receiving side's decisions, and io.c with its own header handles the wire protocol layering. Around the core sit the policy surfaces, exclude.c for the filtering language, delete.c for mirroring semantics, backup.c for preserving what is about to be overwritten, acls.c and the xattr code for extended metadata, authenticate.c and clientserver.c for daemon mode with its loadparm.c configuration parser. csprotocol.txt documents the protocol design in prose, and the awk scripts that generate help text and manpages from markdown sources, help-from-md.awk and md-convert among them, show a documentation pipeline maintained with the same seriousness as the C code. It is a compact, readable codebase by the standards of infrastructure software, which is part of why it has survived thirty years of stewardship.
Community plumbing, from mailing lists to Discord
The support infrastructure spans the tool's generations. A general mailing list open to anyone discusses rsync and its applications, with releases announced there, plus an announcement-only list for official notices, both documented on the mailing-list page of the website. A Discord server now exists for real-time chat about rsync and its development, the modern channel sitting beside the classical ones rather than replacing them. Bug reporting runs through the website's bug-tracking page with guidance on writing a good report, with the alternative of searching the Internet for the error message or the mailing list archives, and email submission to the project list remains supported. Security issues have their own private address, [email protected], the standard disclosure channel arrangement, and the repository itself is mirrored between GitHub and Samba's own git server, keeping the project's independence from any single host while meeting developers where they are.
Three decades, three maintainers, one license
The copyright section is a short history of the project, rsync was originally written by Andrew Tridgell and Paul Mackerras, many people from around the world have helped maintain and improve it, and special thanks go to Wayne Davison, who maintained rsync from 2004 to 2024, a twenty-year stewardship that carried the tool from ubiquitous to effectively infrastructure. The license is the GNU General Public License per the COPYING file in the distribution, with GitHub's license detection reporting no recognized standard identifier, a quirk worth knowing when license scanners review a system. Release cadence remains deliberate, v3.4.4 in June 2026, v3.5.0 in August and v3.5.1 on 2026-09-21, with the last push two days after that release, and the NEWS.md file records what each version changed. The web site at rsync.samba.org anchors it all with the FAQ, downloads, resources and HTML manpages, a project that has outlived most of its contemporaries by refusing to grow beyond its problem.
Editorial conclusion
Use rsync whenever files must move between systems and only the differences matter, backups, mirrors, deployment artifacts and public distribution, over ssh for security or a daemon for anonymous serving. Choose scp for a one-off copy where simplicity beats bandwidth, or a modern sync service when continuous bidirectional sync is the requirement rather than directional transfer. Verify first that both ends have compatible rsync versions since protocol features negotiate between them, read the manpage before trusting any flag combination you have not used before, and if you build from source, follow the INSTALL.md guidance on optional libraries to get the feature set your platform supports.
Frequently asked questions
What is rsync used for?
rsync is a fast and versatile file copying tool for remote and local files, using a delta-transfer algorithm that sends only the differences across the link. Its common uses include backups and restore operations, mirroring, and public file distribution, over ssh or a daemon socket.
How do you use rsync?
Basically like scp, with many additional options available. Run rsync --help for the complete option list and consult the rsync manpage for detailed semantics, since the option surface covers exclusions, deletion behavior, attribute preservation and dry runs.
How do you install rsync?
Most systems ship it or package it, but from source you run the configure script, then make, then place the binary in your path on both local and remote systems or use make install. The INSTALL.md page documents the libraries that enable maximum features in a build.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/rsyncproject-rsync)