HTTPS clone URL
Subversion checkout URL
zsync 0.6.2 =========== zsync is a file transfer program. It allows you to download a file from a remote web server, where you have a copy of an older version of the file on your computer already. zsync downloads only the new parts of the file. It uses the same algorithm as rsync. zsync does not require any special server software or a shell account on the remote system (rsync, in comparison, requires that you have an rsh or ssh account, or that the remote system runs rsyncd). Instead, it uses a control file - a .zsync file - that describes the file to be downloaded and enables zsync to work out which blocks it needs. This file can be created by the admin of the web server hosting the download, and placed alongside the file to download - it is generated once, then any downloaders with zsync can use it. Alternatively, anyone can download the file, make a .zsync and provide it to other users (this is what I am doing for the moment). The zsync web site is at http://zsync.moria.org.uk/ . There are likely to be frequent releases, so check back often. Installation ------------ See the file INSTALL for instructions on compiling and (optionally) installing zsync. As zsync is still at a very early stage, you may prefer not to install it, and to run the program where you compile it. It will work fine that way - it has no data files or libraries. The man(1) program on some systems will let you read the man pages without installing them, e.g. man -l doc/zsync.1 . zsync is free software. There is no implied support, no implied fitness for purpose, no warranty. You use it at your own risk. Use --- In its simplest form, as an end-user: zsync http://some.example.com/downloads/my-big-download.tar.zsync Someone has to make a .zsync file for the download before you can use zsync. As zsync has not been around long, there won't be many such downloads around :-). And you have to have an older copy of the file around, otherwise there is little point in using zsync - zsync normally looks in the current directory for a file of the same name as the one being downloaded (note: if the download is a .gz file, the local file should be uncompressed - use gzip -d to decompress it first). If the local file is not in the current directory or has a different name, you can specify it with -i, e.g.: zsync -i /var/lib/apt/lists/ftp.uk.debian.org_debian_dists_sarge_main_binary-i386_Packages http://zsync.moria.org.uk/s/sarge/Packages.zsync Offering zsync downloads ------------------------ Simple example: Suppose you have http://example.com/dl/some-image-0.2.iso ; which is in /var/www/downloads/ on your server. cd /var/www/downloads/ zsyncmake -u 'http://example.com/dl/some-image-0.2.iso' some-image-0.2.iso This creates some-image-0.2.iso.zsync in the same directory, and specifies the URL from which users can retrieve the full file. (Note that zsync requires both the public URL for the full download, and a local copy of the same file. Users will still need access to the full downloads - zsync merely allows then to save time by only downloading parts of the file.) A user with v0.1 of the same file can now use zsync to download only the new bits. zsync -i some-image-0.1.iso http://example.com/dl/some-image-0.2.iso.zsync Compressed example: Support you have http://example.com/downloads/big-0.2.tar.gz ; which is in /var/www/downloads/ on your server. cd /var/www/downloads/ zsyncmake -u 'http://example.com/downloads/big-0.2.tar.gz' big-0.2.tar.gz This creates big-0.2.tar.zsync in the same directory, and specifies the URL from which users can see the file. A user with v0.1 of the same file can now use zsync to download only the new bits: zsync -i <(zcat big-0.1.tar.gz) http://example.com/downloads/big-0.2.tar.zsync Feedback, Support ----------------- Mail email@example.com if you have questions about zsync. And join the mailing list if you are using it a lot or are interested in the ongoing development. Copyright, Author, Acknowledgements ----------------------------------- zsync is based on the rsync algorithm, by Andrew Tridgell. It also incorporates a number of optimisations, based on ideas in academic papers by Utku Irmak, Svilen Mihaylov and Torsten Suel (primarily "Improved Single-Round Protocols for Remote File Synchronization", Sept 2004). zsync uses a large part of zlib - this code, in the zlib subdirectory, is copyright 1995-2003 Jean-loup Gailly and Mark Adler, see zlib/README for details. This code contains local changes by me that are not compatible with and not available in standard zlib; see zlib/README.zsync for an explanation. zsync includes an implementation of getaddrinfo by Motoyuki Kasahara. See getaddrinfo.c for the license, it's a BSD-style license; but normally zsync compiles against the getaddrinfo() in the system libc, so this code is not normally used. zsync also includes checksum code taken from OpenBSD. The MD4 code is public domain, by Colin Plumb and Todd C. Miller. The SHA1 code is also public domain, by Steve Reid. This code is in the libhash/ subdirectory, see the individual files for their non-copyright notices. The rest of the code (that is, everything not in the zlib and libhash subdirectories) is Copyright (C) 2004,2005,2007,2009 Colin Phipps <firstname.lastname@example.org>. zsync is made available under the (clarified) Artistic License - see the file COPYING for details. Thanks also to: * Dennis Schridde, for contributing patches to improve portability. * Timothy Lee, for finding bugs and supplying patches. * Richard Kiss, for supplying a patch for MacOS X compilation. I must thank the developers above, whose code I have used. Also, I would like to thank the Free Software Foundation and its contributors, for gcc, gdb and emacs, the essential development tools. Also I would thank Sourceforge for providing the hosting facilities for the downloads and mailing list, and the compile farm for testing portability. Also, thanks to Érsek László, James Montgomerie, James Antill, email@example.com, Kent Mein, Marc Lehmann, Robert Lemmen, Mark Adler, Ricardo Correia, Karl Kalleberg, Michael Stone, Richard Lucassen, Duncan Mac-Vicar, Jari Aalto, Marcin Mirosław, Jan Varho and Loïc Minier for useful feedback and bug reports for previous versions.