Re: Implementing a Gnutella-structured network only with basic HTTP

[email protected] Fri, 26 Feb 2010 08:57:23 +0000 (UTC)
Newsgroups gmane.network.gnutella.devel
Organization Home, Grenoble, France
Message-ID <[email protected]>
Quoting Arne Babenhauserheide <[email protected]> from ml.gnutella.dev-forum:
:And that's where I think a problem lies. If someone wants to do a nice client 
:with features he always missed, he can't just start with it. And getting into 
:an unknown codebase is not really easy.

People have to learn to dive into an unknown codebase.  It will not always
be possible to start a project from scratch.

By your line of reasonning, no new developer would ever be attracted to do
operating system work because, well, writing a kernel from scratch is a huge
undertaking (remember, linux started out very small and grew over time).

When I started working on gtk-gnutella back in 2001, it was mostly an
abandonned project and I had to learn my way through the existing code to
be able to fix numerous bugs at first, then rewrite parts of the code.

I don't believe there is much code left over from the original gtk-gnutella
in today's code, as almost all the major parts have been rewritten.  But this
rewriting did not happen in one day, and was not gratuitous: it was done only
to accomodate necessary evolutions.

For instance, the migration from 0.4 to 0.6 Gnutella handshaking caused
a major overhaul of the Gnutella node layer and was an opportunity to
introduce an HTTP-compliant header parsing layer, with proper handling
of continuations.  It was not added as a "hack" in the existing legacy code,
but was seen as a pretext to redo major building blocks from scratch.

But naturally, it was simpler for me to dive into the code base of 2001,
which was rather small, than it would be for any newcomer to dive into
the code base of 2010, which has been considerably expanded!  Still, I believe
the code to be reasonably modular and commented well enough for someone to
be able to figure things out.  That added to the ability to turn on logging
selectively is a precious aid because you can also get a better feeeling
at the dynamic behaviour of the code you're reading.

:Why don't we have a Gnutella based p2p web-search engine, which searches 
:bookmarks of the participants? Why can't I just setup a Gnutella based network  
:with just my jabber contacts as direct connections? Why don't we have Gnutella 
:based friend discovery to rival skype? 

Perhaps we don't have these things because they don't make sense, or because
the people "in charge" don't have time to be distracted by corner features,
or because it's better to let some things separated, or because nobody took
care of actually implementing this stuff.

:> 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?
:
:I'd rather turn the question around: How can new developers do something 
:really cool (in reasonable time) by contributing to the current free licensed 
:servents? 
:
:What are reasons for people to want to contribute? 
:
:One thing which comes to mind for me is the hyped "semantic desktop". How can 
:Gnutella be used to power that?
:
:(for example as tag based search engine - tagging stuff => is there other 
:similar stuff people share?)

You're not talking about Gnutella here really but about applications that
could be built on top of Gnutella (or any other P2P network with the ability
to conduct a search by name and/or a structured search by key).

What you need to do is think about which interface you would like Gnutella
servents to offer (from a command-line perspective, say) to be able to serve
as an enabler for the higher level features you're talking about.  Then if
it is general enough to be implemented, it will eventually.

Raphael