Some web-links in the original post above no longer work. Added PDF's to help with some base elementary information for potential gnutella devs.
GhostWhiteCrab is included. But if only using for GWebCache I would instead personally recommend using
Skulls which has been updated several times over the past decade and includes blocking of BOTs and updated GWeb reporting procedures. It should be kept in mind when GhostWhiteCrab is used as a UHC, the client devs should only utilise it as a last resort bootstrap option. First exhausting all other options such as host file and GWebCache; with a bare minimum wait time of two minutes before accessing a UHC. A maximum of once per hour per UHC for both retrieving and reporting purposes. Same report and retrieval rule applies to GWebCaches. Obviously
only ultrapeers should report to web caches. Further comments I will leave to the people in the know.
Many programming languages can potentially be used to create a Gnutella network program client. For example, BearShare and GTK-Gnutella use/used 'C+++' whereas Phex and the LimeWire variations used Java. Other languages have also been used during the lifespan of the network. This included creating browser plug-ins (Unfortunely at least one type of BOT also appears to have used this technique.)
If you do create your own gnutella app, then your app will be best accepted and perform at the upper levels if you consider adding support for the following (brief summary borrowed from GTK-G; I am not qualified to add more details):
HTTP/1.1
Gnutella 0.4/0.6
GNet compression
BYE packet
PFSP (Partial File Sharing Protocol)
Vendor Messages
Ultrapeers
QRP (Query Routing Protocol)
Push Proxies
GUESS (Gnutella UDP Extension for Scalable Searches)
TLS support for Gnutella and HTTP connections
Compressed UDP traffic (negotiated)
Compressed Gnutella connections
Distributed Hash Table (DHT) to find alternate locations and push-proxies
UPnP and NAT-PMP support
Simultaneous downloading of files from multiple hosts (swarming)