blob: 66da754219eb91f449e4c89e0cb73637ff5e029a [file] [log] [blame] [view]
Davide Pesaventoa0546db2020-04-01 19:18:04 -04001# ChronoSync: synchronization library for distributed realtime applications for NDN
Alexander Afanasyev7c97cfa2014-07-02 12:10:13 -07002
Davide Pesaventoa0546db2020-04-01 19:18:04 -04003![Language](https://img.shields.io/badge/C%2B%2B-14-blue.svg)
Davide Pesaventoc2489b42017-10-28 17:19:08 -04004[![Build Status](https://travis-ci.org/named-data/ChronoSync.svg?branch=master)](https://travis-ci.org/named-data/ChronoSync)
Davide Pesaventoa0546db2020-04-01 19:18:04 -04005![Latest Version](https://img.shields.io/github/tag/named-data/ChronoSync.svg?color=darkkhaki&label=latest%20version)
Nick Gordondc885072017-12-21 14:18:49 -06006
Alexander Afanasyev7c97cfa2014-07-02 12:10:13 -07007In supporting many distributed applications, such as group text messaging, file sharing,
8and joint editing, a basic requirement is the efficient and robust synchronization of
9knowledge about the dataset such as text messages, changes to the shared folder, or
Davide Pesaventoc2489b42017-10-28 17:19:08 -040010document edits. This library implements the
11[ChronoSync protocol](https://named-data.net/wp-content/uploads/2014/03/chronosync-icnp2013.pdf),
Alexander Afanasyev7c97cfa2014-07-02 12:10:13 -070012which exploits the features of the Named Data Networking architecture to efficiently
13synchronize the state of a dataset among a distributed group of users. Using appropriate
14naming rules, ChronoSync summarizes the state of a dataset in a condensed cryptographic
15digest form and exchange it among the distributed parties. Differences of the dataset can
16be inferred from the digests and disseminated efficiently to all parties. With the
17complete and up-to-date knowledge of the dataset changes, applications can decide whether
18or when to fetch which pieces of the data.
19
Davide Pesaventoa0546db2020-04-01 19:18:04 -040020ChronoSync uses the [ndn-cxx](https://github.com/named-data/ndn-cxx) library.
Alexander Afanasyev7c97cfa2014-07-02 12:10:13 -070021
Davide Pesaventoa0546db2020-04-01 19:18:04 -040022## Installation
Alexander Afanasyev7c97cfa2014-07-02 12:10:13 -070023
24### Prerequisites
25
Davide Pesaventoa0546db2020-04-01 19:18:04 -040026* [ndn-cxx and its dependencies](https://named-data.net/doc/ndn-cxx/current/INSTALL.html)
Alexander Afanasyev7c97cfa2014-07-02 12:10:13 -070027
28### Build
29
30To build ChronoSync from the source:
31
32 ./waf configure
33 ./waf
34 sudo ./waf install
35
Yingdi Yue042f832015-02-09 14:52:59 -080036To build on memory constrained platform, please use `./waf -j1` instead of `./waf`. The
37command will disable parallel compilation.
38
Davide Pesaventoa0546db2020-04-01 19:18:04 -040039If configured with tests (`./waf configure --with-tests`), the above commands will also
40generate unit tests that can be run with `./build/unit-tests`.
41
42## Reporting bugs
43
44Please submit any bug reports or feature requests to the
45[ChronoSync issue tracker](https://redmine.named-data.net/projects/chronosync/issues).
46
47## Contributing
48
49We greatly appreciate contributions to the ChronoSync code base, provided that they are
50licensed under the GPL 3.0+ or a compatible license (see below).
51If you are new to the NDN software community, please read the
52[Contributor's Guide](https://github.com/named-data/.github/blob/master/CONTRIBUTING.md)
53to get started.
54
55## License
56
57ChronoSync is an open source project licensed under the GPL version 3.
58See [`COPYING.md`](COPYING.md) for more information.