(The stuff above is horribly outdated.)

In the beginning of P2P stuff, there was Napster. It went down. Nobody likes a centralized server.
Then there was Gnutella. It's still there, but it was damn slow and bandwidth-consuming, and is still slow even after updates.
Then there was AudioGalaxy, which later met the fate of Napster - because it still was the same model of operation, even when they tried to play nice with the record companies. Then there was Morpheus, and KaZaA, and other FastTrack networks. But none of them worked in Linux and liked to disclose the protocol.
So there was an inspiration...

...

So much for informal, probably inaccurate and largely omitting history of Peer-to-peer file trading.

The giFT project originated as giFT Isn't FastTrack. Since the FastTrack networks (which at time included Morpheus and KaZaA, probably some others too) didn't want to cooperate with open development, the project folks reverse-engineered the giFT protocols, and found them pretty neat. They announced that giFT interoperates with the networks at full battle speed. Then, FastTrack changed the protocol. giFT soon caught up. Then, they decided "Ewww, those evil hackers keep making things that play nice with us, let's make our proggies centrally authenticated." the record companies thought, "What a boneheaded move, let's sue 'em and shut them down!" and giFT folks went "Yeah, that truly was an idiotic move, let's just make our own network that uses the ideas of the old FastTrack network."

So, then giFT became GNU Internet File Transfer, which (obviously due to RMS' gentle suggestion to either give the copyrights to FSF or change the name?) was changed to giFT Internet File Transfer.

These days, giFT is under heavy development, and it is getting much nicer and nicer over time.

...

The first time I used giFT was when it was just a FT frontend. I remember being able to connect to the network and search for stuff, but downloading didn't work. Then, afterwards, after the FT's move to centralization, it needed to find other peers by port-scanning, which I thought was not nice.

I remember the first time I checked out the "new" giFT. Napster was down, Audiogalaxy was severely blocking stuff (but fortunately still letting me to download some hideously obscure stuff, which I was actually looking for), people had recommended eDonkey 2000 but I never got it working properly, and LimeWire was a slowish way to download stuff from Gnutella. I installed giFT, found a client, and...

...it worked.

I searched for a file. It returned me a bunch of stuff. I told it to download. It downloaded fast and without problems. My DSL thingy didn't act like a 56k modem at this time.

Incredible.

...

These days, the giFT system can be divided to many parts:

  • Client
  • Server
  • Server plugins
  • The network

The server is the most central part of giFT. You download, compile (if required), configure and start up the server on your own machine. The server loads up its plugins, reads the configuration, and connects to all of the networks you want.

The most important network, the "native" network of giFT, is the OpenFT network. OpenFT is based on the ideas of the old FT network, as mentioned: There's two protocols, the server-to-server protocol to route queries and stuff, and the file download protocol, which just conviniently happens to be HTTP.

Basically, each OpenFT node also runs its own web server, by default on port 1216. If you access http://localhost:1216/ on your own machine, you get a beautiful server status page and by following the link you get a list of files you share. You can disable the directory listing for other hosts, of course.

OpenFT supports "swarming" downloads (that is, downloading small bits of file from multiple sources at once) using HTTP range features.

The plugins can be written in C or Perl or perharps other languages in the future. These allow the server to connect to other networks - the most prominent plugin is the OpenFT plugin. Gnutella plugin ships with giFT and is compiled with it (though not enabled by default, but it's easy to get it running). Others are planned. In theory, it's possible to make the giFT daemon to connect to Gnutella, all those OpenNap servers from Napigator lists you've always dreamed of searching at once, and your brother's FTP servers, and thus making the daemon to give uniform, singly searchable interface to all of them, at once. Which leads us to the next topic...

The client is the dumbest part of the chain. The client basically asks search results from the server, and tells the server to download the file. The server does the actual downloading and searching on each network - the client just needs to present the users some way of seeing the things they want to find, and showing the users how the downloads are proceeding. There are many kinds of clients for different environments. My favorites are giFTcurs, which is a console-based client, and giFToxic, which is based on GTK+.

A few words of the culture: it seems that giFT network is still a bit "geeky" - in order to use it you don't just download and use it, if you're using Windows you need to fetch the thing from CVS and compile the thing (mingw32 works), and if you're using a *NIX variant you need to... er, fetch the thing from CVS and compile the thing. (There are actual releases nowadays and it's even in Debian, but you may still want to stick with CVS version...) I'm able to find a lot of DivX stuff of science fiction and Japanese animation, and a surprising amount of good music in .ogg format, not to even mention the abundance of MP3s. People looking for Windows warez probably want to stay far away, but people like me who just want to find movies and music that are harder to find are in much more luck. I also found it a great place to find game ROMs from...

It should also be remembered that giFT with OpenFT, when run as a purely user node, doesn't need too much bandwidth (when I'm idle, my net card monitor seems strangely quiet for most of the time), which makes it good one to run alongside other file sharing daemons.

Project homepage (same thing, same place):
http://www.giftproject.org/
http://gift.sourceforge.net/

(2003-10-27: Thanks to RPGeek for reminding me of Gnutella plugin. These days, I mostly use eMule, but giFT is still very cool - always among the first things where I look stuff from.)