From Gnutella Developers
Gnutella is a decentralized peer-to-peer system. It allows the participants to share resources from their system for others to see and get, and locate resources shared by others on the network.
Resources can be anything: mappings to other resources, cryptographic keys, files of any type, meta-information on keyable resources, etc. However, the semantics for locating and handling resources other than plain files are not specified in this document.
Each participant launches a Gnutella program, which will seek out other Gnutella nodes to which to connect. This set of connected nodes carries the Gnutella traffic, which is essentially made of queries, replies to those queries, and also other control messages to facilitate the discovery of other nodes.
Users interact with the nodes by supplying them with the list of resources they wish to share on the network, can enter searches for others' resources, will hopefully get results from those searches, and can then select those resources amongst the results: if those resources are files, for instance, they can download them. But one can imagine other types of resources that, once fetched, will bring more than their content value.
Resource data exchanges between nodes are negotiated using the standard HTTP. The Gnutella network is only used to locate the nodes sharing those resources.