gtk-gnutella logo
Current version: 1.1.4

The Most Efficient Gnutella Client

gtk-gnutella is a server/client for Gnutella. It runs on Microsoft Windows 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.

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

We need additional contributors for C development and documentation


9 September 2015, Version 1.1.4 Released

This release is mostly a bug-fixing release.

One major bug (leading to crash) was found in the G2 frame parsing layer: a carefully crafted G2 packet sent to GTKG could crash it, leading to a Denial of Service. For that reason, an upgrade to 1.1.4 is strongly recommended.

The only major new feature is the added cleanups of the TTH cache and the crash log directory, to make sure we do not keep useless files on the disk forever.

Because the Phex servent is no longer maintained, there is now a workaround for that particular servent to ensure it can correctly download from GTKG.

Bug Fixes
Under the Hood

8 April 2015, Version 1.1.3 Released

This is mainly a critical bug-fixing release, addressing a huge shortcoming in 1.1.2: all Shareaza leaves are incorrectly flagged as being fakes and are being removed quicktly from ultrapeers, creating network churn and instability. Everyone running gtk-gnutella as Ultrapeer must upgrade to 1.1.3 quickly.

Releasing quickly after 1.1.3 is also a pretext for improving stability on Windows platforms, especially after restarts: because Windows does not support the "close on exec" flag on file descriptors, restarted processes were left with several instances of a listening socket bound to the same port, causing havoc as behaviour is totally undefined and was most probably leading to the inability for the process to get any incoming connections.

On Windows, we now also monitor the memory usage more closely, in order to avoid the C runtime from issuing a (blocking) popup signalling a fatal memory allocation error should it run out of space.

More generally, the VMM layer is now capable of trapping fatal memory allocation errors and handling them more efficiently. In particular, when everything has failed, the layer can request a brutal restart of the process. Under less dire circumstances, a graceful restart will be requested.

This was also an occasion to revisit the long-term allocation strategy in the VMM layer and optimize it in order to further limit fragmentation of the VM space. Even though avoiding fragmentation matters mostly for 32-bit applications, this also limits the amount of individual memory region mappings the kernel has to maintain and gtk-gnutella has to keep track of.

Finally, a last-minute bug fix where a user reported a deadlock in the QRP processing code. After investigation, it turned out that there was indeed a recursive locking on a spinlock that had escaped all real-life testing out there so far!

Bug Fixes
Under the Hood

21 March 2015, Version 1.1.2 Released

This is mainly a bug-fixing release, addressing rare crashes that have been happening in production. It also contains several improvements.

It fixes a user-reported bug whreby it was not possible to properly configure the download paths using the GUI -- that led to application crashes due to the incomplete support for discovered threads (which GTK is using underneath to manage the dialog box).

Another bug was caused by the HTTP header parsing logic which did not allow "." in header names. That made it refuse to parse headers sent by some UPnP devices, such as "BOOTID.UPNP.ORG" or "CONFIGID.UPNP.ORG", prevening UPnP mappings from being installed.

Hapening rarely but still annoying, there was a bug on the error handling path of write errors to the TX network stack, leading to assertion failures in the mq_tcp_putq() routine. That was because the qrt_compressed() routine was not handling task cancellation properly. The likelyhood of hitting that bug when running as a leaf node was very low.

On the improvement side, the search list is now highlighting searches for which we have associated downloads by displaying the text in green. Further tweaks were made to our GTK2 code to make sure the changes are reported "real time" when the state changes, which was not always the case before (one needed to go over a search by explicitly clicking on it to update the display in the search list).

The SHA1 computation code was also further optimized to be as fast as possible, reducing file hashing time by two! Since SHA1 hashing happens regularily in gtk-gnutella to collect entropy, optimizing the SHA1 computation affects more than just file verification.

Bug Fixes
Under the Hood

Older news... Logo   Glade   Valid HTML 4.01   Valid CSS RSS Feed Available   Ohloh Metrics   Coverity Scan Build Status   gtk-gnutella at GitHub  
gtk-gnutella © 2000-2014 by Yann Grossel, Raphaël Manfredi and various contributors.