Unworkable: A Free BitTorrent Implementation
Unworkable is a BSD-licensed BitTorrent implementation written by Niall O'Higgins <niallo@p2presearch.com>.
Goals of this project include efficiency, simplicity and high code quality.
Unworkable is single threaded and asynchronous, written in portable ANSI C using libevent and mmap() for
performance.
Unworkable is developed primarily under OpenBSD, however it has been written with portability in mind and should compile and run out of the box on at least:
- Various Linux flavours:
- Arch Linux
- Centos 5
- Fedora 7 (Amazon EC 2)
- Gentoo Linux
- Ubuntu Linux 7.10 and up
- Mandriva Linux 2008.1
- FreeBSD 6.2
- Mac OS X (both PPC and i386)
- Solaris 10
- Windows XP (cygwin)
I go out of my way to use slower, harsher platforms for development (e.g. old sparc64, g3 macppc, arm zaurus) to weed out endianness and pointer issues, and of course to get a feel for performance problems. This approach has led to quite reasonable CPU and memory requirements. Transferring at around 150KB/sec used 5% CPU and 1.4M memory on a 270Mhz UltraSparc II machine. Given that contemporary machines are roughly an order of magnitude faster than this, performance should be within acceptable bounds.
Screen shots
Windows XP via Cygwin:
Large photo of unworkable running on a Sharp Zaurus PDA.
Latest updates
2008-10-01: Unworkable 0.51 [Google Code mirror] released.
2008-09-21: Unworkable 0.5 [Google Code mirror] released.
2008-01-07: Unworkable 0.4 released.
2007-12-20: Unworkable 0.3 released.
2007-12-05: Unworkable 0.2 released.
Features
Unworkable can download all the torrents I've thrown at it. However, there is still plenty of room for improvement. Patches are welcome.
In particular, unworkable currently lacks support for the following:
- Encryption.
- Trackerless (DHT) operation.
- Multiple trackers.
Binary packages
Arch Linux
CVS build contributed by Tom K. Thanks Tom!
OpenBSD
As of this commit on 2007-11-26, Unworkable is available in the OpenBSD ports repository as 'net/unworkable'. Starting with the next packages snapshot, users should simply be able to type 'pkg_add unworkable' on their OpenBSD system and have Unworkable installed.
Other Platforms
I have not gotten around to making binary packages for any other platforms yet. Contributions welcome.
Building
Unworkable will build cleanly on OpenBSD (tested on i386, amd64, zaurus, sparc64, macppc) without any additional dependencies beyond the base install. Simply type 'make'.
On other platforms, you must use the SCons build tool. After installing scons, type 'scons' to compile. Make sure you have libevent, OpenSSL and some YACC implementation (e.g. BSD yacc(1) or GNU bison) installed. If you get it working on other platforms, please let me know and send along any portability diffs.
Usage
Unworkable is supposed to be simple to use.
A manual page is included in the source, and built by default under OpenBSD.
$ ./unworkable mymusic.torrent
mymusic.torrent hash ok: 35% rx: 9538KB 103.0KB/s 02:38 ETA
Getting the Source
The code is hosted here on Google Code. To get an anonymous checkout of Subversion trunk run this command:
svn checkout http://unworkable.googlecode.com/svn/trunk/ unworkable-read-only
A tarball of version 0.51 is available at http://p2presearch.com/unworkable/dist/unworkable-0.51.tar.gz [Google Code mirror].
$Id: index.shtml,v 1.14 2009/05/05 20:59:42 niallo Exp $
