gtk-gnutella logo
Current version: 1.2.0

The Most Efficient Gnutella Client

gtk-gnutella is a server/client for the Gnutella peer-to-peer network. It runs on Microsoft Windows, MacOS and every Unix-like system which supports GTK+ (1.2 or above). The GNOME desktop environment is not required. It is currently developed and tested under Linux (Debian) as well as NetBSD. It is known to run at least on Linux, FreeBSD, NetBSD, Darwin, Solaris, Tru64 UNIX (OSF/1), SGI IRIX, BeOS whereas CPU architectures include x86, AMD64, PowerPC, SPARC, MIPS. And of course Microsoft Windows (XP at least).

gtk-gnutella is free open-source software and released under the GNU General Public License (GPL).

gtk-gnutella is not finished yet, but it is fully functional: you may share, search, and download. And it is stable too, users usually just leave it run unattended for days.

This website follows HTML5 and CSS3 web standards and uses cookies only to record language preferences.

All ideas and comments are welcome to the gtk-gnutella-devel mailing list. Bugs should be reported to the SourceForge.net Bug Tracker

We need additional contributors for C development and documentation

News

14 June 2020, Version 1.2.0 Released

This is an evolution release, hence the minor version bump.

Several cases of bad input (from network) causing assertion failures were fixed. In particular, bad DHT response after a security token lookup or invalid G2 input streams were fatal.

There was also a critical bug, originating from a harmful code typo, which led gtk-gnutella to serve unvailable file chunks from partial files, as if they were available, resulting in unintended download corruption on the remote end!

Thanks to Laurent Gil's efforts, it is now possible to run gtk-gnutella from a Docker container. See https://github.com/angegar/gtk-gnutella-docker. Running within docker raised some issues about sbrk() and thread_self(), which were fixed.

The computation of the build date was fixed, to avoid corner cases where gtk-gnutella would complain it was "old" when freshely compiled from up-to-date sources in a git tree whose "master" branch was only infrequently updated.

The file selector was fixed, to avoid displaying grayed-out folders, a setup wich did not allow one to actually select directories in the preferences.

Many improvements were done to allow smoother uploading for servents with more bandwidth than the recipients. Instead of drastically limiting upload bandwidth (which was negatively impacting everyone), we are now monitoring and adjusting our uploading speed to avoid congestion on the remote end. When stalling happens, we also react quickly to reduce the available bandwidth of the connection, not that of all connections to whom we are uploading.

We also no longer rely on MaxMind GeoIP for providing the IP -> country mappings. Their distribution mode now requires a specific licence which seems totally incompatible with the gtk-gnutella's distribution mode. Instead, we are now using IP2Location, and the GEO_LICENCE file now lists the conditions under which these data are re-distributed (gtk-gnutella transforms the data into a form that it can digest, so we are distributing a modified, derived work, not the original).

If you are still using a version of gtk-gnutella earlier than the 1.1.x series, you are strongly encouraged to upgrade. Starting from this release, we are now considering these versions too old to connect to.

Improvements
Bug Fixes
Under the Hood

14 July 2019, Version 1.1.15 Released

This release is a maintenance one fixing several minor bugs and two annoying

ones

The OOB banning code for hosts that never claim their OOB hits was also revisited to prevent problems with hosts that query a popular file and then get submerged by hits and thus refrain to claim the additional hits. We are now much more tolerant to avoid accidentally banning innocent hosts.

On Windows, the disassembling of machine instructions was enhanced to further improve the ability to correctly issue symbolic stack traces when encountering assertion failures or during crashes.

Finally, the Geo IP databases were refreshed.

Improvements
Bug Fixes
Under the Hood

4 October 2018, Version 1.1.14 Released

This release mostly improves the core routines and fixes a few important bugs.

Due to a bug in the usage of the RX buffers, we were not correctly parsing data returned in "chunked" transfer-encoding by HTTP/1.1 servers. This affected the UPnP logic.

The UPnP port unmapping done when the program shuts down was also not being able to complete successfully because we were preventing the HTTP connection from going on during the shutdown. Not critical because there is a lifetime attached to all mappings, but always best to properly clean-up when leaving.

The algorithm used to pick random chunks to download was also revisited to ensure a uniform selection within the whole file ranges that remain to be fetched.

At startup time, the DHT code no longer expires keys when reloading data. This could create crashes during the operation, with no other remedy than to erase all the DHT database files manually to be able to recover!

The background task layer was also causing crashes (at exit time though) because it was not recording whether it was running "user" code as opposed to "kernel" code.

The SDBM code was also improved to allow concurrency and, in particular, a "loose" iteration scheme which does not need to grab the database lock during the whole iteration process. It is also possible to perform a concurrent database rebuilding.

The thread runtime now has an improved deadlock detection engine, based on a topological sort, that can definitely tell whether we are deadlocked. When the deadlock is detected, we can also have more information about the threads participating in that deadlock condition, to assist debugging.

On Windows, a bug in our mingw_dlerror() emulation caused it to always fail once an error had been recorded, leading to un-decorated subsequent stack traces, which really do not help on that platform!

There was also a concurrency bug in the processing of network queries. Every time the library was rescanned, it could trigger a crash due to a memory zone being declared private and was in fact shared between threads. The crash occurred only when a query was received on the Gnutella network whilst the library was rescanned.

The semi-reliable UDP layer TX side was revisited to maximize chances that reliable messages get through completely.

The pattern matching code was revisited thoroughly. A new algorithm (2-Way String Matching) now complements the Quick Search algorithm and an initial benchmarking is done to compare our own matching routines with native libc versions of strstr(), strlen(), strchr() and memchr(). The fastest routine is then selected, to ensure optimal performances. There is also a unit-test program ensuring proper semantics for the pattern search flags.

New Features
Improvements
Bug Fixes
Under the Hood

Older news...

SourceForge.net Logo   Glade   RSS Feed Available   Open Hub   Coverity Scan Build Status   gtk-gnutella at GitHub  
gtk-gnutella © 2000-2014 by Yann Grossel, Raphaël Manfredi and various contributors.