# GnucDNA

GnucDNA was a software library for building peer-to-peer applications. It provides developers with a common layer to create their own Gnutella or Gnutella2 client or network. As a separate component, GnucDNA can be updated independently of the client, passing down improvements to the applications already using it.

## General

GnucDNA is a widespread and established library which can be extended by programmers. It includes the capability of forming a decentralized network between peers with integrated Ultrapeer support, allowing the network to avoid bottlenecks of low bandwidth nodes. However, the Ultrapeer - respectively Hub on G2 - support is outdated compared to modern implementations by clients like gtk-gnutella and Shareaza.
The library gives programs which link to it the ability to share files with built-in support for uploading, downloading, file queuing and partial file sharing (the ability to upload verified chunks of a file while it is downloading), hash those files, extract meta-data to be shared through the network, and the ability to perform advanced searching by specific hash and meta-data parameters. GnucDNA also offers applications the ability to update their software easily through the same P2P network that they create.
The GnucDNA component is COM based to inherit the advantage of language independence and versatility. Applications in C++, Visual Basic, .Net, and even scripts can utilize GnucDNA. Also by being a separate component, it can be used in a number of alternate situations such as part of a plugin, a service or running behind a web server.

## History

Over five years of development have already gone into coding, improving, and testing the GnucDNA as part of the Gnucleus project. As others took notice of the project the engine was duplicated over 15 times, but while the interfaces and services others provided were great, they could not keep up with the main development. So the decision was taken, to move the Gnucleus engine, now called GnucDNA, into a separate component, so that anyone has access to it without fear of falling behind in the developments and improvements that are made. It also opens up new doors for those interested in creating their own P2P networks, but do not want to re-invent the low layer communication and file transfer mechanisms.

## Clients
### Gnucleus

Gnucleus is the gnutella and Gnutella2 client project for Microsoft Windows that the GnucDNA library code originally has been developed in, before it was split to a semi-separated project. Just like the GnucDNA library, it has been released under the GNU General Public License.
The client is designed to be easy to use without reducing the number of options available. Gnucleus implements a number of features including Ultrapeer capability on gnutella (resp. Hub mode on G2), multisource swarming downloads, partial-file sharing, SHA1 file hashing, Merkle tree sub chunk verification and proxy server support.

### Kiwi Alpha

Kiwi Alpha is a peer-to-peer file sharing application that uses the GnucDNA library to connect to the gnutella and G2 networks. Its design goal focusses on leaving a small resource footprint and being simple to use for beginners.
Kiwi Alpha doesn't contain functionality such as media players, in the spirit of its lightweight goal. However, the application comes with two bundled pieces of adware, such as SaveNow, which seems to contradict the small footprint goal. Also, the program's website states that "Kiwi Alpha does not require users to register and protects the user's privacy by connecting anonymously to the network". This is misleading, as both supported protocols do not obfuscate the user's IP address, which the statement seems to indicate.