librsync  2.3.1
README.md
1 # librsync
2 
3 http://librsync.sourcefrog.net/
4 
5 \copyright
6 
7 Copyright 1999-2016 Martin Pool and other contributors.
8 
9 librsync is distributed under the [GNU LGPL v2.1][LGPL]
10 (see COPYING), which basically
11 means that you can dynamically link librsync into non-GPL programs, but you
12 must redistribute the librsync source, with any modifications you have made.
13 
14 [LGPL]: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html
15 
16 librsync contains the BLAKE2 hash algorithm, written by Samuel Neves and
17 released under the [CC0 public domain dedication][CC0].
18 
19 [CC0]: http://creativecommons.org/publicdomain/zero/1.0/
20 
21 
22 ## Introduction
23 
24 librsync is a library for calculating and applying network deltas,
25 with an interface designed to ease integration into diverse
26 network applications.
27 
28 librsync encapsulates the core algorithms of the rsync protocol, which
29 help with efficient calculation of the differences between two files.
30 The rsync algorithm is different from most differencing algorithms
31 because it does not require the presence of the two files to calculate
32 the delta. Instead, it requires a set of checksums of each block of
33 one file, which together form a signature for that file. Blocks at
34 any in the other file which have the same checksum are likely to be
35 identical, and whatever remains is the difference.
36 
37 This algorithm transfers the differences between two files without
38 needing both files on the same system.
39 
40 librsync is for building other programs that transfer files as efficiently
41 as rsync. You can use librsync in a program you write to do backups,
42 distribute binary patches to programs, or sync directories to a server
43 or between peers.
44 
45 This tree also produces the \ref page_rdiff that exposes the key operations of
46 librsync: generating file signatures, generating the delta from a signature to
47 a new file, and applying the delta to regenerate the new file given the old
48 file.
49 
50 librsync was originally written for the rproxy experiment in
51 delta-compression for HTTP.
52 librsync is used by: [Dropbox](https://dropbox.com/),
53 [rdiff-backup](http://www.nongnu.org/rdiff-backup/),
54 [Duplicity](http://www.nongnu.org/duplicity/), and others.
55 (If you would like to be listed here, let me know.)
56 
57 ### What librsync is not
58 
59 1. librsync does not implement the rsync wire protocol. If you want to talk to
60 an rsync server to transfer files you'll need to shell out to `rsync`.
61 You cannot make use of librsync to talk to an rsync server.
62 
63 2. librsync does not deal with file metadata or structure, such as filenames,
64 permissions, or directories. To this library, a file is just a stream of bytes.
65 Higher-level tools can deal with such issues in a way appropriate to their
66 users.
67 
68 3. librsync also does not include any network functions for talking to SSH
69 or any other server. To access a remote filesystem, you need to provide
70 your own code or make use of some other virtual filesystem layer.
71 
72 
73 ## More information
74 
75 * \ref page_downloads
76 * \ref versioning
77 * \ref page_install
78 * \ref page_rdiff
79 * \ref page_api
80 * \ref page_formats
81 * \ref page_support
82 * \ref page_contributing
83 * \ref NEWS.md