Re: Implementing a Gnutella-structured network only with basic HTTP possible?Date: Wed, 24 Feb 2010 09:08:15 +0000 (UTC)

[email protected] Wed, 24 Feb 2010 10:08:17 +0100
Newsgroups gmane.network.gnutella.devel
Organization Home, Grenoble, France
Message-ID <[email protected]>
Hello Arne,

Quoting Arne Babenhauserheide <[email protected]> from ml.gnutella.dev-forum:
:I'd love to hear your thoughts on the idea. 

I've read your proposal in its entirety, but I'm not sure you're going to
love hearing my thoughts. :-)

:Do you think it would be useful - and help getting more developers into 
:Gnutella again?

I think it would be totally useless:

1) You're talking about a major change in the way peer-to-peer communications
in the Gnutella layer are conducted, breaking the symetry of the peers.

2) You're slightly confused about existing Gnutella using HTTP for handshaking
and then switching to a binary protocol.

2.1) First, it is true that Gnutella is using an HTTP-like header format
for handshaking, but these headers are also RFC822-like (the original
RFC for e-mail).  You wouldn't want us to switch to a e-mail for Gnutella
communications just because headers look alike, right?

2.2) Second, even using a pure HTTP-type of header exchanges between peers
would not prevent a binary stream from being exchanged between peers later on.
It's all a matter of which content type you're negotiating.

3) My personal view on the way Gnutella handshaking is done is that the current
design (which is a 3-way handshake by the way, something HTTP would not give
you for free) fits the purposes, is reasonably extensible and is rather
easy to implement (although of course not trivial).

3.1) As a servent developer, what would be my incentive to undergo a
major overhaul of the peer-to-peer communication stream, and how would
I handle a smooth transition (continuity of service) between the current
scheme and a new scheme?

3.2) Your proposed design as it stands breaks the symetry between peers and
is not acceptable.  Gnutella peers need to be able to exchange data at will,
regardless of who initiated the TCP connection: once the 3-way handshake has
been successful, both peers have the ability to exchange and do not have to
track who connected to whom in the first place.

4) I believe "simplifying" the Gnutella protocol by using HTTP instead of
the current protocol would not attract more developers into Gnutella.

4.1) As a developer, it's good to know that some libraries exist to do the
low-level work for you, but that's not sufficient to motivate someone into
putting hard hours into learning these libraries and using them.

4.2) As I hinted above, the complexity of Gnutella is not really at
the handshaking level but lies in the proper handling of the protocol:
understanding what messages are for (not even talking about the format
of the messages, that's a one-shot problem you handle for each message
and then you simply forget about it), what their semantic is, how you react
to the reception of a given message and when you need to send one and with
which information.

4.3) Writing a Gnutella servent is a complex task which requires skills,
time and dedication.  It's not just the assembly of high-level components
or protocols (HTTP, zlib, DHT, GUI toolkit, XML, SHA-1, Tiger, hash trees,
DIME, UDP, TCP, web or UDP host caches).

4.4) Gnutella documentation is widespread and some of the information
is not even written explictly but embedded in the code of popular
open-source servents.  Without proper documentation, how do you expect
newcomers to be able to navigate in the maze of the existing documents and
make the right decisions when it comes to implementing?

4.5) The "barrier of entry" for a Gnutella servent today is extremely
high.  Before you reach the level of features of servents like LimeWire
or gkt-gnutella, you're going to have to spend man.years of efforts.
Using standard libraries and protocols is not going to help significantly
reduce that amount here.  As a new servent author, how would you attract
users when people can choose LimeWire or gtk-gnutella and use them with
a very high level of satisfaction?  What will be your differentiator?

:Did I miss something which can't be done with basic HTTP? 

I've not even considered that question, sorry.  Like I tried to explain
above, switching to basic HTTP for peer-to-peer exchanges is not going
to make things simpler and is not going to be a move that will likely
attract new developers to Gnutella.

What would be more interesting a question to answer to is: what do
we do to attract more open-source developers to work on the existing
open-source servents?

Cheers,
Raphael