giFT FAQ

Author: Eelco Lempsink

Abstract

All the questions you should have read before you asked them


Table of Contents

1. Generic
2. Contribute
3. Problems
4. Network plugins

1. Generic

Q:. What is giFT?
Q:. How do I get giFT?
Q:. What's with the name?
Q:. Why do you use a daemon?
Q:. What's your history (so far)?
Q:. What is giFT?
A:.

giFT is a modular daemon capable of abstracting the communication between the end user and specific filesharing protocols (peer-to-peer or otherwise). The giFT project differs from many other similar projects in that it is a distribution of a standalone platform-independent daemon, a library for client/frontend development, and our own homegrown network, OpenFT.

Q:. How do I get giFT?
A:.

You can download the latest release from our Sourceforge File list, and (for most UNIX platforms) follow the instructions from the Installation Guide. Please note that downloading giFT means the daemon (giftd), you'll want to download at least one network plugin, and a client.

There are also packages available in Debian unstable. You do a apt-get install gift. Other distributions might have packages available too.

A:.

For Windows the installation procedure is a little more complicated. As the Windows maintainer hasn't really been very active lately (*cough* same could be said for the doc writer *cough*), the Windows version is currently broken. We could use help fixing this!

A:.

For Mac OS X you should use fink.

Q:. What's with the name?
A:.

As you might know there's an other project named GIFT as well (note the capitalization though). The GNU Image Finding Tool that is.

The strange capitalization is from back when the giFT project still was a 'generic interface to FastTrack' and (a little later) 'giFT isn't FastTrack'. When the encryption was changed which effectively locked giFT out of the FastTrack network (used by KaZaA, and at that time Grokster and Morpheus), the project moved in another direction, becoming what it is now: giFT: internet File Transfer.

Q:. Why do you use a daemon?
A:.

It creates an easy way for people to focus their time on frontends instead of all of so much networking code. Also, if the daemon changes, all of the frontends will still function the same as they had before. This also makes it so we don't end up with 20 incompatible protocols flying around as standalone clients.

Q:. What's your history (so far)?
A:.

Development to create a Linux client to KaZaA was our initial goal. After a lot of reverse engineering and packet sniffing, a group of talented developers which became known as "the givers" stumbled onto our project (at the time "kazaatux").

Within a few weeks, we had a working daemon that could connect to and search the KaZaA network. Shortly after, KaZaA released a new version of their client which eventually led to the breaking of what we now call giFT.

After the permanent departure of the givers, the giFT team started moving development into a new direction; foremost was the desire to have a completely open, completely free peer to peer network modeled in the image of FastTrack.

Thus OpenFT was born. giFT was moved to a new plugin architecture which would allow the creation of plugins that would make it easy for one client to be compatible with any number of networks. The first of these plugins were to be OpenFT. After a while there came a Gnutella plugin, and even a FastTrack plugin!

2. Contribute

Q:. How can I help?
Q:. Aargh, giftd crashed! What now?
Q:. I want to make an OpenFT client! How do I do that?
Q:. I would like to make a frontend/client/gui, where to start?
Q:. I want to make a new network plugin, can you give me some hints?
Q:. How can I help?
A:.

Use your special skills! If you can code (e.g. a new network plugin), design a nifty GUI or are specialized in Public Relations, or whatever, contact us and ask what you can do. Also, clear bug reports, patches and more documentation are always welcome.

Q:. Aargh, giftd crashed! What now?
A:.

You've most likely found a bug. Try upgrading to the most recent release, and if you did that already please write a clear bug report.

If you're a developer you could also try the most recent CVS version (it could have been fixed already). Make sure you know how to use gdb, or else you probably won't be very helpful.

Please make sure you report the bug to the right project. We are not responsible for 3rd party network plugins, and giftd uses quite a few libs for metadata extraction, a few of those libs tend to be kind of buggy. If you're not sure the bug you found is purely giFT's, don't report.

Q:. I want to make an OpenFT client! How do I do that?
A:.

No, you don't. You want to make a giFT client. Through giFT, OpenFT can be used. Otherwise you'll have to include a framework just like giFT in your client, and that would be like reinventing the wheel.

Q:. I would like to make a frontend/client/gui, where to start?
A:.

Very good, but please note that there are already lots of clients, just do a search on SourceForge for example. In other words, make sure your client is actually different from all the others, and it's "killer feature" is not something you can easily build into an already mature client.

That said, there are roughly two ways to make a client. You can use libgift (see lib/example.c for an example, or you can communicate with the Interface Protocol over a socket.

Q:. I want to make a new network plugin, can you give me some hints?
A:.

Network plugins work through libgiftproto and libgift. Unfortunately, there is no tutorial for writing a network plugin, but you can generate doxygen documentation from the sources, and look at other plugins to find out how it is supposed to work.

3. Problems

Q:. Hey, giFT won't connect! (Before I updated it was fine) What's up?
Q:. Hmm, giftd crashed, what now?
Q:. Help! Why does giftd almost bring my system to a halt?
Q:. I run giftd, but nothing happens?
Q:. It complains about my setup being incomplete, I don't get it?
Q:. Hey, giFT won't connect! (Before I updated it was fine) What's up?
A:.

Aha, first of all, giFT itself isn't connecting to anything, so you probably mean OpenFT won't connect. Due to heavy development sometimes new OpenFT versions aren't backwards compatible. Removing your nodes file (~/.giFT/OpenFT/nodes) will usually help. Removing it will cause OpenFT's node cache to be updated with the installed version of the nodes file.

Q:. Hmm, giftd crashed, what now?
A:.

See this question.

Q:. Help! Why does giftd almost bring my system to a halt?
A:.

Ah, you're running giftd for the first time... giftd is calculating the checksums ('hashing') of all your files the network plugins need to uniquely identify them. Also, metadata is extracted. The next time you start giftd only the files that were added or changed will be hashed.

Q:. I run giftd, but nothing happens?
A:.

Indeed. giftd is just the daemon. You need a client and network plugins to make stuff happen.

Q:. It complains about my setup being incomplete, I don't get it?
A:.

Run gift-setup. If you've already done this, do it again, and try to read all the questions this time, the defaults won't get it running.

4. Network plugins

Q:. What networks are supported?
Q:. I want to make a new network plugin, how do I do that?
Q:. Wow, KaZaA on Linux/Mac OS X how did you guys manage that?
Q:. (I'm doing a thesis on P2P networks) is there documentation on how OpenFT works?
Q:. What networks are supported?
A:.

Of course there's OpenFT, our own homegrown network, but there are also plugins for Gnutella (distributed by us too) and FastTrack (KaZaA). A plugin for OpenNap is in development.

Q:. I want to make a new network plugin, how do I do that?
A:.

See this question

Q:. Wow, KaZaA on Linux/Mac OS X how did you guys manage that?
A:.

We didn't ;-) The FastTrack plugin is a 3rd party plugin. It was made after a lot of reverse engineering. You can check #gift-fasttrack @ irc.freenode.net for more information.

Q:. (I'm doing a thesis on P2P networks) is there documentation on how OpenFT works?
A:.

Unfortunately not. In short, it's a hierarchical, clustering p2p network, with USER nodes (normal users), SEARCH nodes (for searching) and INDEX nodes (stats and SEARCH node lists). Every USER has a PARENT node (which is a SEARCH node) through which it searches. For more information, UTSL :-) (And in case of writing a thesis, search for the others.)