7 Copyright 1999-2016 Martin Pool and other contributors.
9 librsync is distributed under the [GNU LGPL v2.1][LGPL] (see COPYING), which
10 basically means that you can dynamically link librsync into non-GPL programs,
11 but you must redistribute the librsync source, with any modifications you have
16 librsync contains the BLAKE2 hash algorithm, written by Samuel Neves and
17 released under the [CC0
public domain dedication][CC0].
24 librsync is a library
for calculating and applying network deltas, with an
25 interface designed to ease integration into diverse network applications.
27 librsync encapsulates the core algorithms of the rsync protocol, which help
28 with efficient calculation of the differences between two files. The rsync
29 algorithm is different from most differencing algorithms because it does not
30 require the presence of the two files to calculate the delta. Instead, it
31 requires a set of checksums of each block of one file, which together form a
32 signature
for that file. Blocks at any position in the other file which have the same
33 checksum are likely to be identical, and whatever remains is the difference.
35 This algorithm transfers the differences between two files without needing
36 both files on the same system.
38 librsync is
for building other programs that transfer files as efficiently as
39 rsync. You can use librsync in a program you write to
do backups, distribute
40 binary patches to programs, or sync directories to a server or between peers.
42 This tree also produces the \ref page_rdiff that exposes the key operations of
43 librsync: generating file signatures, generating the delta from a signature to
44 a
new file, and applying the delta to regenerate the
new file given the old
47 librsync was originally written
for the rproxy experiment in delta-compression
48 for HTTP. librsync is used by: [Dropbox](https:
51 to be listed here, let me know.)
53 ### What librsync is not
55 1. librsync does not implement the rsync wire protocol. If you want to talk to
56 an rsync server to transfer files you
'll need to shell out to `rsync`. You
57 cannot make use of librsync to talk to an rsync server.
59 2. librsync does not deal with file metadata or structure, such as filenames,
60 permissions, or directories. To this library, a file is just a stream of
61 bytes. Higher-level tools can deal with such issues in a way appropriate to
64 3. librsync also does not include any network functions for talking to SSH or
65 any other server. To access a remote filesystem, you need to provide your own
66 code or make use of some other virtual filesystem layer.
72 * \ref page_versioning
78 * [CONTRIBUTING](CONTRIBUTING.md)