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

Michael Rogers <[email protected]> Fri, 26 Feb 2010 11:55:34 +0000
Newsgroups gmane.network.gnutella.devel
Message-ID <[email protected]>
Hi Arne, Raphael,

I think you both have excellent points. The complexity of the protocol
is too high, and it does discourage new developers and new ways of using
Gnutella - but the wire protocol's only a small part of that complexity.
The larger problem is that a peer must implement several rather
complicated features before other peers will even talk to it. There's no
equivalent in Gnutella of a dumb router that just forwards packets
without knowing about the higher-layer protocols those packets
implement, or a dumb client that uses higher-layer protocols without
knowing how they're implemented at the packet level. Layering is
completely broken, so it's all or nothing - and "all" is too much for
most developers to chew.

So we seem to have a rather unappealing choice. We can let the network
stagnate, as fewer and fewer new developers get involved. We can abandon
the network and start from scratch - but given the huge number of people
still using Gnutella and the uncertainty of persuading them to move to
another network, that seems like a desparate measure. Or we can try to
plan a gradual transition from the current network to a simpler, more
maintainable one, with lower barriers to entry.

That may not be possible, but let's talk about some ideas before we decide.

Cheers,
Michael

[email protected] wrote:
> 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
> 
> 
> ------------------------------------
> 
> Yahoo! Groups Links
> 
> 
>