Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Gnutella
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
{{short description|Large peer-to-peer network by Nullsoft}} {{about|file sharing technology|the spread|Nutella}} {{Multiple issues| {{more citations needed|date=July 2013}} {{update|date=May 2016}} }} {{Filesharing sidebar}} '''Gnutella''' is a [[peer-to-peer network]] protocol. Founded in 2000, it was the first decentralized peer-to-peer network of its kind, leading to other, later networks adopting the model.<ref>{{cite magazine | last=Kushner | first=David | title=The World's Most Dangerous Geek | date=January 13, 2004 | magazine=Rolling Stone | url=http://74.220.215.94/~davidkus/index.php?option=com_content&view=article&id=82:the-worlds-most-dangerous-geek-&catid=35:articles&Itemid=54 | access-date=May 10, 2011 | archive-url=https://archive.today/20120630204949/http://74.220.215.94/~davidkus/index.php?option=com_content&view=article&id=82:the-worlds-most-dangerous-geek-&catid=35:articles&Itemid=54 | archive-date=June 30, 2012}}</ref> In June 2005, Gnutella's population was 1.81 million computers<ref>[http://www.slyck.com/news.php?story=814 Slyck News - eDonkey2000 Nearly Double the Size of FastTrack] {{Webarchive|url=https://web.archive.org/web/20180129195624/http://www.slyck.com/news.php?story=814 |date=2018-01-29 }}, Thomas Mennecke for [[Slyck.com]], June 2, 2005.</ref> increasing to over three million nodes by January 2006.<ref name="population">[http://www.barsoom.org/papers/gi-2006-long-term.pdf On the Long-term Evolution of the Two-Tier Gnutella Overlay] {{Webarchive|url=https://web.archive.org/web/20170810060540/http://barsoom.org/papers/gi-2006-long-term.pdf |date=2017-08-10 }}. Rasti, Stutzbach, Rejaie, 2006. See Figure 2a.</ref> In late 2007, it was the most popular file-sharing network on the Internet with an estimated market share of more than 40%.<ref>[https://arstechnica.com/news.ars/post/20080421-study-bittorren-sees-big-growth-limewire-still-1-p2p-app.html Ars Technica Study: BitTorrent sees big growth, LimeWire still #1 P2P app] {{Webarchive|url=https://web.archive.org/web/20081216011917/https://arstechnica.com/news.ars/post/20080421-study-bittorren-sees-big-growth-limewire-still-1-p2p-app.html |date=2008-12-16 }} Eric Bangeman, April 21, 2008.</ref> == History == The first client (also called Gnutella) from which the network got its name<ref>{{Cite news|url=http://news.cnet.com/AOLs-Nullsoft-creates-software-for-swapping-MP3s/2100-1023_3-237974.html|title=AOL's Nullsoft creates software for swapping MP3s|work=CNET|access-date=2017-04-13|language=en|archive-date=2015-04-15|archive-url=https://web.archive.org/web/20150415020210/http://news.cnet.com/AOLs-Nullsoft-creates-software-for-swapping-MP3s/2100-1023_3-237974.html|url-status=live}}</ref><ref>{{Cite news|url=http://www.afterdawn.com/software/network/p2p_clients/gnutella.cfm#description|title=Gnutella|last=AfterDawn.com|work=AfterDawn|access-date=2017-04-13|archive-date=2017-04-14|archive-url=https://web.archive.org/web/20170414081208/http://www.afterdawn.com/software/network/p2p_clients/gnutella.cfm#description|url-status=live}}</ref> was developed by [[Justin Frankel]] and [[Tom Pepper]] of [[Nullsoft]] in early 2000, soon after the company's acquisition by [[AOL]]. On March 14, the program was made available for download on Nullsoft's servers. The event was prematurely announced on [[Slashdot]], and thousands downloaded the program that day.<ref>{{cite web|url=https://slashdot.org/story/00/03/14/0949234/open-source-napster-gnutella|title=Open Source Napster: Gnutella - Slashdot|website=slashdot.org|date=14 March 2000 |access-date=2019-03-24|archive-date=2019-03-24|archive-url=https://web.archive.org/web/20190324202943/https://slashdot.org/story/00/03/14/0949234/open-source-napster-gnutella|url-status=live}}</ref><ref>{{cite web|url=https://www.cnn.com/|title=CNN - Breaking News, Latest News and Videos|website=CNN|access-date=2019-03-24|archive-date=2000-06-20|archive-url=https://web.archive.org/web/20000620180259/https://www.cnn.com/|url-status=live}}</ref> The [[source code]] was to be released later, under the [[GNU General Public License]] (GPL); however, the original developers never got the chance to accomplish this purpose.<ref>{{cite web|url=https://www.gnu.org/philosophy/gnutella.html|title=Regarding Gnutella - GNU Project - Free Software Foundation|access-date=2015-03-17|archive-date=2015-03-16|archive-url=https://web.archive.org/web/20150316094719/http://www.gnu.org/philosophy/gnutella.html|url-status=live}}</ref> The next day, AOL stopped the availability of the program over legal concerns and restrained Nullsoft from doing any further work on the project. This did not stop Gnutella; after a few days, the protocol had been [[reverse engineering|reverse engineered]], and compatible [[free and open source software|free and open source]] clones began to appear.<ref>{{Cite book|last1=Schell|first1=Bernadette Hlubik|url=https://books.google.com/books?id=f26uXP_QIaQC&q=This+did+not+stop+Gnutella%3B+after+a+few+days%2C+the+protocol+had+been+reverse+engineered%2C+and+compatible+free+and+open+source+clones+began+to+appear&pg=PA137|title=Webster's New World Hacker Dictionary|last2=Schell|first2=Bernadette|last3=Martin|first3=Clemens|date=2006-09-05|publisher=John Wiley & Sons|isbn=978-0-470-04752-1|language=en|access-date=2020-10-02|archive-date=2023-01-17|archive-url=https://web.archive.org/web/20230117212319/https://books.google.com/books?id=f26uXP_QIaQC&q=This+did+not+stop+Gnutella%3B+after+a+few+days%2C+the+protocol+had+been+reverse+engineered%2C+and+compatible+free+and+open+source+clones+began+to+appear&pg=PA137|url-status=live}}</ref> This parallel development of different clients by different groups remains the ''[[modus operandi]]'' of Gnutella development today. Among the first independent Gnutella pioneers were [[Gene Kan]] and [[Spencer Kimball (computer programmer)|Spencer Kimball]], who launched the first portal aimed to assemble the open-source community to work on Gnutella<ref>{{Cite news|url=http://news.cnet.com/2100-1023-239060.html|title=Programmers help "Napster" clones take off|work=CNET|access-date=2017-04-13|language=en|archive-date=2015-04-16|archive-url=https://web.archive.org/web/20150416121148/http://news.cnet.com/2100-1023-239060.html|url-status=live}}</ref><ref>{{Cite news|url=http://news.cnet.com/2100-1023-942180.html|title=Gnutella pioneer Gene Kan dies|work=CNET|access-date=2017-04-13|language=en|archive-date=2015-04-16|archive-url=https://web.archive.org/web/20150416120216/http://news.cnet.com/2100-1023-942180.html|url-status=live}}</ref> and also developed "GNUbile", one of the first open-source (GNU-GPL) programs to implement the Gnutella protocol.<ref>{{Cite web|url=http://www.stearns.org/gnubile/|title=gnubile file listing|website=stearns.org|access-date=2017-04-13|archive-date=2016-04-22|archive-url=https://web.archive.org/web/20160422095301/http://www.stearns.org/gnubile/|url-status=live}}</ref><ref>{{Cite web|url=http://underpop.free.fr/g/gnutelladev/source/gnubile.html|title=The source code for Gnubile|website=underpop.free.fr|access-date=2017-04-13|archive-date=2016-03-04|archive-url=https://web.archive.org/web/20160304080332/http://underpop.free.fr/g/gnutelladev/source/gnubile.html|url-status=live}}</ref> The Gnutella network is a fully distributed alternative to such semi-centralized systems as [[FastTrack]] ([[KaZaA]]) and the original [[Napster]]. The initial popularity of the network was spurred on by Napster's threatened legal demise in early 2001. This growing surge in popularity revealed the limits of the initial protocol's scalability. In early 2001, variations on the protocol (first implemented in [[proprietary software|proprietary]] and [[closed source software|closed source]] clients) allowed an improvement in scalability. Instead of treating every user as client and server, some users were now treated as ''ultrapeers'', routing search requests and responses for users connected to them. This allowed the network to grow in popularity. In late 2001, the Gnutella client [[LimeWire]] Basic became free and open source. In February 2002, [[Morpheus (file-sharing software)|Morpheus]], a commercial file sharing group, abandoned its FastTrack-based peer-to-peer software and released a new client based on the free and open source Gnutella client [[GnucDNA#Gnucleus|Gnucleus]]. The word ''Gnutella'' today refers not to any one project or piece of software, but to the open protocol used by the various clients. The name is a [[portmanteau]] of ''[[GNU]]'' and ''[[Nutella]]'', the brand name of an Italian hazelnut flavored spread: supposedly, Frankel and Pepper ate a lot of Nutella working on the original project, and intended to license their finished program under the GNU General Public License. Gnutella is not associated with the [[GNU]] project<ref>{{cite web|url=https://www.gnu.org/philosophy/gnutella.html|title=Regarding Gnutella (www.gnu.org)|access-date=2015-03-17|archive-date=2015-03-16|archive-url=https://web.archive.org/web/20150316094719/http://www.gnu.org/philosophy/gnutella.html|url-status=live}}</ref> or GNU's own peer-to-peer network, [[GNUnet]]. On October 26, 2010, the popular Gnutella [[client (computing)|client]] [[LimeWire]] was ordered shut down by Judge [[Kimba Wood]] of the [[United States District Court for the Southern District of New York]] when she signed a [[Consent Decree]] to which recording industry plaintiffs and LimeWire had agreed. This event was the likely cause of a notable drop<ref>{{cite web |url=https://www.pcmag.com/article2/0,2817,2388627,00.asp |title=Indie Labels Sue LimeWire Over Failed Copyright Deal |author=Chloe Albanesius |date=18 July 2011 |work=PC Magazine |publisher=Ziff-Davis |quote=In the wake of the LimeWire shutdown, the percentage of U.S. Internet users who access P2P file-sharing services dropped about 7 percent from [its] all-time high in 2007... |access-date=19 March 2012 |archive-date=2 February 2016 |archive-url=https://web.archive.org/web/20160202131044/http://www.pcmag.com/article2/0,2817,2388627,00.asp |url-status=live }}</ref> in the size of the network, because, while negotiating the [[injunction]], [[LimeWire]] staff had inserted [[Backdoor (computing)|remote-disabling code]] into the software. As the injunction came into force, users who had installed affected versions (newer than 5.5.10) were cut off from the [[Peer-to-peer|P2P network]]. Since LimeWire was [[free software]], nothing had prevented the creation of [[Fork (software development)|forks]] that omitted the disabling code, as long as LimeWire trademarks were not used. The shutdown did not affect, for example, [[FrostWire]], a fork of LimeWire created in 2004 that carries neither the remote-disabling code nor [[adware]]. On November 9, 2010, LimeWire was resurrected by a secret team of developers and named [[LimeWire Pirate Edition]].<ref>{{cite web |url=https://www.pcmag.com/article2/0,2817,2372412,00.asp |title=Report: LimeWire 'Resurrected' by Secret Dev Team |author=Chloe Albanesius |date=9 November 2010 |work=PC Magazine |publisher=Ziff-Davis |access-date=19 March 2012 |archive-date=12 July 2017 |archive-url=https://web.archive.org/web/20170712164112/https://www.pcmag.com/article2/0,2817,2372412,00.asp |url-status=live }}</ref> It was based on LimeWire 5.6 BETA. This version had its server dependencies removed and all the PRO features enabled for free. == Design == [[File:GnutellaQuery.JPG|thumb|upright=1.5|alt=A diagram of Gnutella nodes and their connections.|The gnutella search and retrieval protocol]] To envision how Gnutella originally worked, imagine a large circle of users ''(called nodes),'' each of whom has Gnutella client software. On initial startup, the client software must [[Bootstrapping#Computing|bootstrap]] and find at least one other node. Various methods have been used for this, including a pre-existing address list of possibly working nodes shipped with the software, using updated web caches of known nodes (called ''Gnutella Web Caches''), UDP host caches and, rarely, even [[Internet Relay Chat|IRC]]. Once connected, the client requests a list of working addresses. The client tries to connect to the nodes it was shipped with, as well as nodes it receives from other clients until it reaches a certain quota. It connects to only that many nodes, locally caching the addresses which it has not yet tried and discarding the addresses which it tried and found to be invalid.<ref>{{Cite web |title=How Auto Discovery Works - Amazon ElastiCache |url=https://docs.aws.amazon.com/AmazonElastiCache/latest/mem-ug/AutoDiscovery.HowAutoDiscoveryWorks.html |access-date=2023-06-08 |website=docs.aws.amazon.com |archive-date=2023-03-30 |archive-url=https://web.archive.org/web/20230330091345/https://docs.aws.amazon.com/AmazonElastiCache/latest/mem-ug/AutoDiscovery.HowAutoDiscoveryWorks.html |url-status=live }}</ref><!--try http://gnufu.net (primary source)--> When the user wants to do a search, the client sends the request to each actively connected node. In version 0.4 of the protocol, the number of actively connected nodes for a client was quite small (around 5). In that version of the protocol, each node forwards the request to all its actively connected nodes, who, in turn, forward the request. This continues until the packet has reached a predetermined number of ''hops'' from the sender (maximum 7).<ref>{{cite book |last1=Moon |first1=Jongbae |last2=Cho |first2=Yongyun |title=Computational Science and Its Applications - ICCSA 2011 Proceedings |date=2011 |publisher=Springer |isbn=978-3-642-21897-2 |chapter-url=https://books.google.com/books?id=3ivd-NwNCN8C&pg=PA464 |language=en |page=464 |chapter=A point-based inventive system to prevent free-riding on p2p network environments |access-date=2022-03-10 |archive-date=2023-01-17 |archive-url=https://web.archive.org/web/20230117212316/https://books.google.com/books?id=3ivd-NwNCN8C&pg=PA464 |url-status=live }}</ref> Since version 0.6 (2002<ref>{{Cite web|url=http://rfc-gnutella.sourceforge.net/src/rfc-0_6-draft.html|title=Gnutella Protocol Development|website=rfc-gnutella.sourceforge.net|access-date=2017-04-13|archive-date=2017-05-12|archive-url=https://web.archive.org/web/20170512103209/http://rfc-gnutella.sourceforge.net/src/rfc-0_6-draft.html|url-status=live}}</ref>), Gnutella is a composite network made of leaf nodes and ultra nodes (also called ultrapeers). The leaf nodes are connected to a small number of ultrapeers (typically 3) while each ultrapeer is connected to more than 32 other ultrapeers. With this higher [[outdegree]], the maximum number of ''hops'' a query can travel was lowered to 4. Leaves and ultrapeers use the Query Routing Protocol to exchange a Query Routing Table (QRT), a table of 64 [[Binary prefix#IEC standard prefixes|Ki]]-slots and up to 2 [[Binary prefix#IEC standard prefixes|Mi]]-slots consisting of hashed keywords. A leaf node sends its QRT to each of the ultrapeers to which it is connected, and ultrapeers merge the QRT of all their leaves (downsized to 128 [[binary prefix#IEC standard prefixes|Ki]]-slots) plus their own QRT (if they share files) and exchange that with their own neighbors. Query routing is then done by hashing the words of the query and seeing whether all of them match in the QRT. Ultrapeers do that check before forwarding a query to a leaf node, and also before forwarding the query to a peer ultra node provided this is the last hop the query can travel.{{fact|date=April 2025}} If a search request turns up a result, the node that has the result contacts the searcher. In the classic Gnutella protocol, response messages were sent back along the route taken by the query, as the query itself did not contain identifying information for the node. This scheme was later revised, to deliver search results over [[User Datagram Protocol|UDP]], directly to the node that initiated the search, usually an ultrapeer of the node. Thus, in the current protocol, the queries carry the [[IP address]] and port number of either node. This lowers the amount of traffic routed through the Gnutella network, making it significantly more scalable.<ref>{{Cite report |last1=Ripeanu |first1=Matei |last2=Nakai |first2=Yugo |title=Topology of Gnutella Network: Discovery and Analysis |url=https://www.academia.edu/2893724 |access-date=2023-06-08 |archive-date=2023-11-03 |archive-url=https://web.archive.org/web/20231103002639/https://www.academia.edu/2893724 |url-status=live }}{{self-published inline|date=April 2025}}</ref> If the user decides to download the file, they negotiate the [[file transfer]]. If the node which has the requested file is not [[Firewall (computing)|firewalled]], the querying node can connect to it directly. However, if the node is firewalled, stopping the source node from receiving incoming connections, the client wanting to download a file sends it a so-called ''push request'' to the server for the remote client to initiate the connection instead (to ''push'' the file). At first, these push requests were routed along the original chain it used to send the query. This was rather unreliable because routes would often break and routed packets are always subject to flow control. ''push proxies'' were introduced to address this problem. These are usually the ultrapeers of a leaf node and they are announced in search results. The client connects to one of these ''push proxies'' using an HTTP request and the proxy sends a ''push request'' to a leaf on behalf of the client. Normally, it is also possible to send a push request over UDP to the push proxy, which is more efficient than using TCP. Push proxies have two advantages: First, ultrapeer-leaf connections are more stable than routes. This makes push requests much more reliable. Second, it reduces the amount of traffic routed through the Gnutella network.<ref>{{Cite web |date=2022-05-09 |title=Gnutella clients that still work |url=https://questhalo.amebaownd.com/posts/34235509 |access-date=2023-06-08 |website=apreasnisuf1984's Ownd |language=ja |archive-date=2023-11-03 |archive-url=https://web.archive.org/web/20231103002640/https://questhalo.amebaownd.com/posts/34235509 |url-status=live }}</ref><!--try http://gnufu.net (primary source)--> Finally, when a user disconnects, the client software saves a list of known nodes. This contains the nodes to which the client was connected and the nodes learned from pong packets. The client uses that as its seed list, when it next starts, thus becoming independent of bootstrap services.<ref>{{cite journal |last1=Franzoni |first1=Federico |last2=Daza |first2=Vanesa |title=SoK: Network-Level Attacks on the Bitcoin P2P Network |journal=IEEE Access |date=2022 |volume=10 |pages=94924β94962 |doi=10.1109/ACCESS.2022.3204387 |bibcode=2022IEEEA..1094924F |hdl=10230/55353 |hdl-access=free }}</ref><!--try http://gnufu.net (primary source)--> In practice, this method of searching on the Gnutella network was often unreliable. Each node is a regular computer user; as such, they are constantly connecting and disconnecting, so the network is never completely stable. Also, the bandwidth cost of searching on Gnutella grew exponentially to the number of connected users,<ref>[http://www.darkridge.com/~jpr5/doc/gnutella.html Why Gnutella Can't Scale. No, Really.] {{Webarchive|url=https://web.archive.org/web/20170806013417/http://www.darkridge.com/~jpr5/doc/gnutella.html |date=2017-08-06 }} February 2001.{{self-published inline|date=April 2025}}</ref> often saturating connections and rendering slower nodes useless. Therefore, search requests would often be dropped, and most queries reached only a very small part of the network. This observation identified the Gnutella network as an [[Scalability|unscalable]] distributed system, and inspired the development of [[distributed hash table]]s, which are much more scalable but support only exact-match, rather than keyword, search.<ref>{{cite conference |last1=Bischofs |first1=Ludger |last2=Hasselbring |first2=Wilhelm |title=A Hierarchical Super Peer Network for Distributed Software Development |conference=Proceedings of CSSE 2004 Workshop on Cooperative Support for Distributed Software Engineering Processes |date=September 2004 |pages=99β106 |url=https://oceanrep.geomar.de/id/eprint/14574/ |publisher=Austrian Computer Society }}</ref><!--try http://gnufu.net (primary source)--> To address the problems of [[bottleneck (engineering)|bottleneck]]s, Gnutella developers implemented a tiered system of ''ultrapeers'' and ''leaves''. Instead of all nodes being considered equal, nodes entering the network were kept at the 'edge' of the network, as a leaf. Leaves don't provide routing. Nodes which are capable of routing messages are promoted to ultrapeers. Ultrapeers accept leaf connections and route searches and network maintenance messages. This allows searches to propagate further through the network and allows for numerous alterations in topology. This greatly improved efficiency and scalability.{{fact|date=April 2025}} Additionally, gnutella adopted a number of other techniques to reduce traffic overhead and make searches more efficient. Most notable are Query Routing Protocol (QRP) and Dynamic Querying (DQ). With QRP, a search reaches only those clients which are likely to have the files, so searches for rare files become far more efficient. With DQ, the search stops as soon as the program has acquired enough search results. This vastly reduces the amount of traffic caused by popular searches.<ref>{{Cite web |title=DQ in Arabic - English-Arabic Dictionary {{!}} Glosbe |url=https://glosbe.com/en/ar/DQ |access-date=2023-06-08 |website=glosbe.com |language=en |archive-date=2024-04-09 |archive-url=https://web.archive.org/web/20240409044806/https://glosbe.com/en/ar/DQ |url-status=live }}</ref><!--try http://gnufu.net (primary source)--> One of the benefits of having Gnutella so decentralized is to make it very difficult to shut the network down and to make it a network in which the users are the only ones who can decide which content will be available. Unlike [[Napster]], where the entire network relied on the central server, Gnutella cannot be shut down by shutting down any one node. A decentralized network prevents bad actors from taking control of the contents of the network and/or manipulating data by controlling the central server.<ref>{{cite web |url=https://www.berkes.ca/archive/berkes_gnutella_freenet.pdf |title=Decentralized Peer-to-Peer Network Architecture: Gnutella and Freenet |last=Berkes |first=Jem |publisher=University of Manitoba |date=April 9, 2003 |website=berkes.ca/ |access-date=October 26, 2019 |archive-url=https://web.archive.org/web/20170808170634/http://www.berkes.ca/archive/berkes_gnutella_freenet.pdf |archive-date=August 8, 2017 |url-status=dead }}</ref> == Protocol features and extensions == Gnutella once operated on a purely [[query flooding]]-based protocol. The outdated Gnutella version 0.4 [[network protocol]] employs five different packet types, namely:<ref>Dye, Mark. McDonald, Rick. Rufi, Antoon W., 'Network Fundamentals', Cisco Networking Academy, Cisco Press, Ch 3. p. 91</ref> * ping: discover hosts on network * pong: reply to ping * query: search for a file * query hit: reply to query * push: download request for firewalled servants These packets facilitate searches. File transfers are instead handled by [[HTTP]].<ref name="Dye, Mark p90">Dye, Mark. McDonald, Rick. Rufi, Antoon W., 'Network Fundamentals', Cisco Networking Academy, Cisco Press, Ch 3. p90</ref> The development of the Gnutella protocol is currently led by the Gnutella Developers Forum (The GDF). Many protocol extensions have been and are being developed by the software vendors and by the free Gnutella developers of the GDF. These extensions include intelligent query routing, [[SHA-1]] checksums, query hit transmission via [[User Datagram Protocol|UDP]], querying via UDP, dynamic queries via [[Transmission Control Protocol|TCP]], file transfers via UDP, [[XML]] metadata, source exchange (also termed ''the download mesh'') and parallel downloading in slices (swarming).<ref name="Dye, Mark p90"/> There are efforts to finalize these protocol extensions in the Gnutella 0.6 specification, at the Gnutella protocol development website. The Gnutella 0.4 standard is outdated but it remains the latest protocol specification because all extensions, so far, exist as proposals. In fact, it is hard or impossible to connect today with 0.4 handshakes. According to developers in the GDF, version 0.6 is what new developers should pursue using the [https://web.archive.org/web/20080724010901/http://gnet-specs.gnufu.net/ work-in-progress specifications].<ref>{{Cite web |title=Gnutella Protocol Development |url=http://rfc-gnutella.sourceforge.net/developer/index.html |access-date=2022-07-21 |website=rfc-gnutella.sourceforge.net |archive-date=2022-12-06 |archive-url=https://web.archive.org/web/20221206185124/https://rfc-gnutella.sourceforge.net/developer/index.html |url-status=live }}</ref> The Gnutella protocol remains under development. Despite attempts to make a clean break with the complexity inherited from the old Gnutella 0.4 and to design a clean new message architecture, it remains one of the most successful file-sharing protocols to date.<ref>{{cite thesis |last1=Tyson |first1=Gareth |date=2010 |title=A Middleware Approach to Building Content-Centric Applications |url=https://www.proquest.com/openview/e415473f53cf62814c2a9877ff59fa4b/1 }}{{pn|date=April 2025}}</ref> == Software == The following tables compare general and technical information for a number of applications supporting the Gnutella network. The tables do '''not''' attempt to give a complete [[List of Historical Gnutella Clients|list of Gnutella clients]]. The tables are limited to clients that can participate in the current Gnutella network.{{fact|date=April 2025}} === General specifications === <!-- In each table, link one instance of terms, remove other WP:REPEATLINK(s). --> {| class="wikitable sortable plainrowheaders" style="font-size: 85%;" ! Name ! Platform ! License ! Project active?<br/>(otherwise discontinued) ! Latest release ! Heritage |- ! scope=row style="background:{{Rh2/bgcolor}}"| Acquisition | [[macOS]] | {{Proprietary}} ! {{no}} ! scope=row style="background:{{Rh2/bgcolor}}"|{{Latest stable release/Acquisition}} ! scope=row style="background:{{Rh2/bgcolor}}"| LimeWire |- | scope=row style="background:{{Rh2/bgcolor}}" | [[BearFlix]] | [[Microsoft Windows|Windows]] | {{Proprietary}} ! {{no}} ! scope=row style="background:{{Rh2/bgcolor}}"| 5.2.6.0 ! scope=row style="background:{{Rh2/bgcolor}}"| BearShare |- ! scope=row style="background:{{Rh2/bgcolor}}" | [[BearShare]] | Windows | {{Proprietary}} ! {{no}} ! scope=row style="background:{{Rh2/bgcolor}}"| {{Latest stable release/BearShare}} ! scope=row style="background:{{Rh2/bgcolor}}"| ''Original work'' |- | scope=row style="background:{{Rh2/bgcolor}}" | Cabos | [[Java (software platform)|Java]] | {{free|[[GNU General Public License|GPL]]}} ! {{no}} ! scope=row style="background:{{Rh2/bgcolor}}"| {{Latest stable release/Cabos}} ! scope=row style="background:{{Rh2/bgcolor}}"| LimeWire |- ! scope=row style="background:{{Rh2/bgcolor}}" | CitrixWire | Windows | {{Proprietary}} ! {{no}} ! scope=row style="background:{{Rh2/bgcolor}}"| 2014<ref>{{Cite web|url=http://www.brothersoft.com/citrixwire-50277.html|title=CitrixWire|website=BrotherSoft|access-date=2017-04-13|archive-url=https://web.archive.org/web/20170414081046/http://www.brothersoft.com/citrixwire-50277.html|archive-date=2017-04-14|url-status=usurped}}</ref> ! scope=row style="background:{{Rh2/bgcolor}}"| Addax |- ! scope=row style="background:{{Rh2/bgcolor}}" | CocoGnut | [[RISC OS]] | {{proprietary}} | {{no}} | scope=row style="background:{{Rh2/bgcolor}}"|1.21 (2005-06-21) | scope=row style="background:{{Rh2/bgcolor}}"|''Original work'' |- | scope=row style="background:{{Rh2/bgcolor}}" | FilesWire (P2P) | Java | {{proprietary}} ! {{no}} ! scope=row style="background:{{Rh2/bgcolor}}"| Beta 1.1 (2007) ! scope=row style="background:{{Rh2/bgcolor}}"| ''Original work'' |- ! scope=row style="background:{{Rh2/bgcolor}}" | [[giFT]] (Gnutella plug-in) | [[Cross-platform]] | {{free|GPL}} ! {{no}} ! scope=row style="background:{{Rh2/bgcolor}}"| 0.0.11 (2006-08-06) <!-- {{Latest stable release/giFT}} is outdated and wrong, as this article is about Gnutella, not the protocol-independent core. --> ! scope=row style="background:{{Rh2/bgcolor}}"| ''Original work'' |- ! scope=row style="background:{{Rh2/bgcolor}}" | [[GnucDNA#Gnucleus|Gnucleus]]-[[GnucDNA]] | Windows | {{free|GPL, [[GNU LGPL|LGPL]]}} ! {{no}} ! scope=row style="background:{{Rh2/bgcolor}}"| {{Latest stable release/Gnucleus}} ! scope=row style="background:{{Rh2/bgcolor}}"| ''Original work'' |- ! scope=row | [[gtk-gnutella]] | Cross-platform | {{free|GPL}} | {{yes}} | {{Latest stable release/gtk-gnutella}} | ''Original work'' |- | scope=row style="background:{{Rh2/bgcolor}}" | [[KCeasy]] | Windows | {{free|GPL}} ! {{no}} ! scope=row style="background:{{Rh2/bgcolor}}"| {{Latest stable release/KCeasy}} ! scope=row style="background:{{Rh2/bgcolor}}"| giFT |- | scope=row style="background:{{Rh2/bgcolor}}" | [[GnucDNA#Kiwi Alpha|Kiwi Alpha]] | Windows | {{free|GPL}} ! {{no}} ! scope=row style="background:{{Rh2/bgcolor}}"| {{Latest stable release/Gnucleus}} ! scope=row style="background:{{Rh2/bgcolor}}"| GnucDNA |- ! scope=row style="background:{{Rh2/bgcolor}}" | [[LimeWire]] | Java | {{free|GPL}} ! {{no}} ! scope=row style="background:{{Rh2/bgcolor}}"| {{Latest stable release/LimeWire}} ! scope=row style="background:{{Rh2/bgcolor}}"| ''Original work'' |- ! scope=row style="background:{{Rh2/bgcolor}}" | [[Morpheus (file-sharing software)|Morpheus]] | Windows | {{Proprietary}} ! {{no}} ! scope=row style="background:{{Rh2/bgcolor}}"| {{Latest stable release/Morpheus}} ! scope=row style="background:{{Rh2/bgcolor}}"| GnucDNA |- ! scope=row style="background:{{Rh2/bgcolor}}" | [[Phex]] | Java | {{free|GPL}} ! {{no}} ! scope=row style="background:{{Rh2/bgcolor}}"| {{Latest stable release/Phex}} ! scope=row style="background:{{Rh2/bgcolor}}"| ''Original work'' |- ! scope=row style="background:{{Rh2/bgcolor}}" | [[Poisoned]] | macOS | {{free|GPL}} ! {{no}} ! scope=row style="background:{{Rh2/bgcolor}}"| {{Latest stable release/Poisoned}} ! scope=row style="background:{{Rh2/bgcolor}}"| giFT |- ! scope=row | [[Shareaza]] | Windows | {{free|GPL}} | {{yes}} | {{Latest stable release/Shareaza}} | ''Original work'' |- ! scope=row style="background:{{Rh2/bgcolor}}" | Symella | [[Symbian]] | {{free|GPL}} ! {{no}} ! scope=row style="background:{{Rh2/bgcolor}}"| ! scope=row style="background:{{Rh2/bgcolor}}"| ''Original work'' |- ! scope=row | [[WireShare]] (aka ''LimeWire Pirate Edition'') | Java | {{free|GPL}} | {{yes}} | 6.0.2 (2022-10-04) | LimeWire |- ! scope=row style="background:{{Rh2/bgcolor}}"| [[Zultrax]] | Windows | {{Proprietary}} ! {{no}} ! scope=row style="background:{{Rh2/bgcolor}}"| 4.33 (April 2009) ! scope=row style="background:{{Rh2/bgcolor}}"| ''Original work'' |} {{legend2|{{rh2/bgcolor}}|Discontinued project}} === Gnutella features === {| class="wikitable sortable plainrowheaders" style="font-size: 85%; text-align: center;" ! colspan=2 | Client ! Hash search ! Chat{{efn-lr|Refers to direct client-to-client chat; not IRC chat, which is often also available in the same application through an embedded HTTP browser window.}} ! Buddy list ! Handles [https://github.com/gtk-gnutella/gtk-gnutella/blob/devel/doc/public/GGEP/LF large files] (> 4 [[gigabyte|GB]]) ! Unicode-compatible query routing ! UPnP port mapping{{efn-lr|Automatically configures port forwarding in routers or combination modem/gateways which support UPnP control.}} ! [[NAT traversal]] ! [[NAT Port Mapping Protocol|NAT port mapping]] ! RUD{{efn-lr|The '''R'''eliable '''UDP''' protocol provides NAT-to-NAT transfers, sometimes called Firewall-to-Firewall or "hole-punching", in cases where port-forwarding is not or cannot be done by the user.}} ! TCP push proxy ! UDP push proxy ! Ultrapeer ! GWebCache{{efn-lr|As GWCs had a history of problems with traffic overload and long-term reliability, UDP host caches became the preferred bootstrap method; though some GWCs remain available for the sake of older software.}} ! UDP host cache ! {{abbr|THEX|Tree Hash EXchange format.}} ! [[Transport Layer Security|TLS]] ! Other |- ! scope=row style="background:{{Rh2/bgcolor}}" colspan=2 | [[BearShare]] | {{yes}} | {{yes}} | {{yes}} | {{no}} | {{no}} | {{yes}} | {{yes}} | {{yes}} | {{yes}} | {{yes}} | {{no}} | {{yes}} | {{yes}} | {{no}} | {{yes}} | {{no}} | - |- ! scope=row style="background:{{Rh2/bgcolor}}" colspan=2 | [[giFT]] (core & plug-ins) | {{yes}} | {{n/a}} | {{n/a}} | {{no}} | {{no}} | {{no}} | {{no}} | {{no}} | {{no}} | {{yes}} {{efn|Client mode only, as a dependent leaf on ultrapeers.}} | {{no}} | {{no}} {{efn|name=b}} | {{yes}} | {{no}} | {{no}} | {{no}} | - |- ! scope=row style="background:{{Rh2/bgcolor}}" colspan=2 | [[GnucDNA]] {{efn|Version 0.9.2.7}} | {{yes}} | {{n/a}} | {{n/a}} | {{no}} | {{no}} | {{no}} | {{no}} | {{no}} | {{no}} | {{yes}} | {{no}} | {{no}} {{efn|name=b}} | {{yes}} | {{no}} | {{no}} | {{no}} | - |- ! scope=row colspan=2 | [[gtk-gnutella]] | {{yes}} {{efn|name=d}} | {{no}} | {{no}} | {{yes}} | {{yes}} | {{yes}} | {{yes}} | {{yes}} | {{yes}} {{efn|[[gtk-gnutella]] version 0.98.4 and later.}} | {{yes}} | {{yes}} | {{yes}} | {{no}} (Dropped) | {{yes}} | {{yes}} | {{yes}} | [[IPv6]], [[Distributed hash table|DHT]], GUESS, [[Gnutella2|G2]] |- ! scope=row style="background:{{Rh2/bgcolor}}" colspan=2 | [[LimeWire]]{{efn|name=h}} | {{yes}} {{efn|name=d}} | {{yes}} | {{Yes|GMail or XMPP}} | {{yes}} | {{yes}} | {{yes}} | {{yes}} {{efn|name=e}} | {{yes}} {{efn|name=g}} | {{yes}} | {{yes}} | {{yes}} | {{yes}} | {{yes}} | {{yes}} | {{yes}} | {{yes}} | [[Distributed hash table|DHT]] |- ! scope=row colspan=2 | [[WireShare]]{{efn|name=h}} | {{yes}} {{efn|name=d}} | {{yes}} | {{Yes|GMail or XMPP}} | {{yes}} | {{yes}} | {{yes}} | {{yes}} {{efn|name=e}} | {{yes}} {{efn|name=g}} | {{yes}} | {{yes}} | {{yes}} | {{yes}} | {{yes}} | {{yes}} | {{yes}} | {{yes}} | [[Distributed hash table|DHT]] |- ! scope=row style="background:{{Rh2/bgcolor}}" colspan=2 | [[Phex]] | {{yes}} | {{yes}} | {{no}} | {{yes}} | {{yes}} | {{no}} | {{yes}}{{efn|Via [[SOCKS]] proxy which can tunnel over [[Secure Shell|SSH]].}} | {{no}} | {{no}} | {{yes}} | {{no}} | {{yes}} | {{yes}} | {{yes}} | {{yes}} | {{yes}} | [[I2P]] |- ! scope=row colspan=2 | [[Shareaza]] | {{yes}} | {{yes}} | {{no}} | {{yes}} | {{no}} | {{yes}} | {{yes}} | {{yes}} | {{no}} | {{yes}} | {{yes}} | {{yes}} | {{yes}} | {{yes}}{{efn|Since version 2.2.4.0}} | {{yes}} | {{no}} | [[Gnutella2|G2]], [[BitTorrent (protocol)|BT]], [[eDonkey network|eD2k]], [[IRC]] |} ==== Notes ==== {{notelist-lr}} {{notelist|refs= {{efn|name=b|Not high [[outdegree]], so is unusable in its current form.}} {{efn|name=d|Via the [[Kademlia]]-based Mojito DHT network supported only by LimeWire and gtk-gnutella (starting with version r15750); this is completely different from [[SHA-1]] searches supported by most gnutella clients.}} {{efn|name=e|Port triggering or ''firewall to firewall'' (FW2FW).}} {{efn|name=g|Automatic with UPnP, or manual configuration in LimeWire firewall options}} {{efn|name=h|As the LimeWire client is no longer available clients that share most of LimeWire's code base, like [[FrostWire]], can provide an alternative.}} }} <!-- * No features have been recorded for the [[gnutella]] clients [[iMesh]], Symella, [[TrustyFiles]], and [[WinMX]] Music. --> * [[Morpheus (file-sharing software)|Morpheus]] differs significantly and may have completely independent code from the GnucDNA engine. Morpheus can function as a ''modern'' ultrapeer whereas other GnucDNA clients cannot. * [[GnucDNA#Gnucleus|Gnucleus]] and Kiwi Alpha use the [[GnucDNA]] engine. * [[BearFlix]], a functionally limited version of the [[BearShare]] 5.2 series, can search only for images or videos and shared videos are limited to a relatively short length. * [[giFTcurs]], [[Apollon (software)|Apollon]], [[FilePipe]], [[giFToxic]], giFTui, [[giFTwin32]], [[KCeasy]], [[Poisoned]], and Xfactor are GUI front-ends for the [[giFT]] engine. * etomi uses outdated [[Shareaza]] networking code. * MP3 Rocket, 360Share, LemonWire, MP3Torpedo, and DexterWire are variants of [[LimeWire]]. * [[FrostWire]] (up to version 4.21.8) is nearly identical to LimeWire 4.18 but versions greater than 5.00 no longer use gnutella. * Acquisition and Cabos are custom front-ends overlaying the [[LimeWire]] engine. * [[LimeWire Pirate Edition]] (5.6.2) is a resurrected version of the unreleased [[LimeWire]] 5.6.1 alpha, thus has similar features minus automatic updates (with nags) and centralized remote controls to disable core functions like searches and downloads were removed. == Gnutella2 == {{Main|Gnutella2}} The Gnutella2 protocol (often referred to as G2), despite its name, is not a successor protocol of Gnutella nor related to the original Gnutella project,<ref>[http://www.mp3newswire.net/stories/2003/gnutella2.html Gnutella vs. Gnutella2, Part 2] {{Webarchive|url=https://web.archive.org/web/20120728110155/http://www.mp3newswire.net/stories/2003/Gnutella2.html |date=2012-07-28 }} Thomas Mennecke for [[Slyck.com]], February 25, 2003.</ref> but rather is a completely different protocol that [[fork (software development)|forked]] from the original project and piggybacked on the Gnutella name. A sore point with many Gnutella developers is that the ''Gnutella2'' name conveys an upgrade or superiority, which led to a flame war. Other criticism included the use of the Gnutella network to bootstrap G2 peers and poor documentation of the G2 protocol. Additionally, the more frequent search retries of the [[Shareaza]] client, one of the initial G2 clients, could unnecessarily burden the Gnutella network.<ref>[http://www.slyck.com/news.php?story=100 Gnutella vs. Gnutella2, Part 1] {{Webarchive|url=https://web.archive.org/web/20160305053853/http://www.slyck.com/news.php?story=100 |date=2016-03-05 }} Thomas Mennecke for [[Slyck.com]], February 25, 2003</ref> Both protocols have undergone significant changes since the fork in 2002. G2 has advantages and disadvantages compared to Gnutella. An advantage often cited is that Gnutella2's hybrid search is more efficient than the original Gnutella's [[query flooding]]. However, Gnutella replaced query flooding with more efficient search methods, starting with Query Routing in 2002. This was proposed in 2001 by Limewire developers.<ref>[http://wortschatz.uni-leipzig.de/~fwitschel/vorlP2P/literatur/search_methods.pdf A comparison of Peer-to-Peer search methods] {{webarchive|url=https://web.archive.org/web/20070926110918/http://wortschatz.uni-leipzig.de/~fwitschel/vorlP2P/literatur/search_methods.pdf |date=2007-09-26 }} Dimitrios Tsoumakos, 2003</ref><ref>[http://www.ic.unicamp.br/~celio/peer2peer/gnutella-related/query-routing-protocol.htm Query Routing for the Gnutella Network proposal] {{Webarchive|url=https://web.archive.org/web/20150924032530/http://www.ic.unicamp.br/~celio/peer2peer/gnutella-related/query-routing-protocol.htm |date=2015-09-24 }} Christopher Rohrs, 2001-12-18</ref><ref>[http://www.ic.unicamp.br/~celio/peer2peer/gnutella-related/query-routing-protocol.htm Query Routing for the Gnutella Network 1.0] {{Webarchive|url=https://web.archive.org/web/20150924032530/http://www.ic.unicamp.br/~celio/peer2peer/gnutella-related/query-routing-protocol.htm |date=2015-09-24 }} Christopher Rohrs, 2002-05-16</ref> An advantage of Gnutella is its large user base, which numbers in the millions.<ref name="population"/> The G2 network is approximately an [[order of magnitude]] smaller.<ref>[http://crawler.trillinux.org/ G2 Network Statistics] {{Webarchive|url=https://web.archive.org/web/20100501141118/http://crawler.trillinux.org/ |date=2010-05-01 }} Population ~200,000 January 2010.</ref> It is difficult to compare the protocols in their current form. The choice of client, on either network, probably affects the end user just as much. == See also == * [[Bitzi]] * [[Gnutella crawler]] * [[GNUnet]] == References == {{Reflist}} * Dye, Mark. McDonald, Rick. Rufi, Antoon W., 'Network Fundamentals', Cisco Networking Academy, Cisco Press, Ch 3. p91 * Dye, Mark. McDonald, Rick. Rufi, Antoon W., 'Network Fundamentals', Cisco Networking Academy, Cisco Press, Ch 3. p90 == External links == {{wikibooks|The World of Peer-to-Peer (P2P)/Networks and Protocols/Gnutella}} * [https://web.archive.org/web/20080525005017/http://www.gnutella.com/ Gnutella official website] (on Internet Archive) {{Gnutella}} {{File sharing protocols}} [[Category:Gnutella| ]] [[Category:File sharing networks]] [[Category:Application layer protocols]] [[Category:Hash-based data structures]]
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)
Pages transcluded onto the current version of this page
(
help
)
:
Template:Abbr
(
edit
)
Template:About
(
edit
)
Template:Cite book
(
edit
)
Template:Cite conference
(
edit
)
Template:Cite journal
(
edit
)
Template:Cite magazine
(
edit
)
Template:Cite news
(
edit
)
Template:Cite report
(
edit
)
Template:Cite thesis
(
edit
)
Template:Cite web
(
edit
)
Template:Efn
(
edit
)
Template:Efn-lr
(
edit
)
Template:Fact
(
edit
)
Template:File sharing protocols
(
edit
)
Template:Filesharing sidebar
(
edit
)
Template:Free
(
edit
)
Template:Gnutella
(
edit
)
Template:Latest stable release/Acquisition
(
edit
)
Template:Latest stable release/BearShare
(
edit
)
Template:Latest stable release/Cabos
(
edit
)
Template:Latest stable release/Gnucleus
(
edit
)
Template:Latest stable release/KCeasy
(
edit
)
Template:Latest stable release/LimeWire
(
edit
)
Template:Latest stable release/Morpheus
(
edit
)
Template:Latest stable release/Phex
(
edit
)
Template:Latest stable release/Poisoned
(
edit
)
Template:Latest stable release/Shareaza
(
edit
)
Template:Latest stable release/gtk-gnutella
(
edit
)
Template:Legend2
(
edit
)
Template:Main
(
edit
)
Template:Multiple issues
(
edit
)
Template:N/a
(
edit
)
Template:No
(
edit
)
Template:Notelist
(
edit
)
Template:Notelist-lr
(
edit
)
Template:Pn
(
edit
)
Template:Proprietary
(
edit
)
Template:Reflist
(
edit
)
Template:Rh2/bgcolor
(
edit
)
Template:Self-published inline
(
edit
)
Template:Short description
(
edit
)
Template:Sister project
(
edit
)
Template:Webarchive
(
edit
)
Template:Wikibooks
(
edit
)
Template:Yes
(
edit
)