**Gnutella** (disebut dengan 'g' senyap) adalah projek perisian tersebar untuk membentuk jaringan rakan-ke-rakan yang sebenar, tanpa pelayan pusat.

Sejarah
-------

Pelanggan pertama dicipta oleh Justin Frankel dan Tom Pepper dari syarikat Nullsoft, salah satu division dari AOL, pada awal 2000. Pada 14 On March 2000, perisian tersebut disediakan untuk dipindah turun daripada pelayan Nullsoft. Peristiwa tersebut diumumkan sebelum cukup tempoh (*prematurely*) di Slashdot, dan perisian tersebut dipindah turun oleh beribu-ribu orang pada hari itu. Kod sumber akan dikeluarkan kemudian, sepatutnya dibawah GNU General Public License (GPL). 

Pada keesokkan harinya, AOL menghentikan penyebaran perisian tersebut kerana kebimbangan mengenai masalah undang-undang dan melarang division Nullsoft daripada melakukan sebarang kerja pembangunan pada projek tersebut. Ini tidak membantutkan Gnutella; selepas beberapa hari protokol Gnutella telah difahami melalui kejuruteraan undur dan klon sumber terbuka serasi mula muncul. Pembangunan selari oleh pelanggan berlainan oleh kumpulan berlainan kekal menjadi *modus operandi* pembangunan Gnutella hari ini.

Jaringan Gnutella adalah tersebar sepenuhnya berbanding dengan sistem separuh pusat seperti Napster. Kepopularan awal jaringan tersebut digalakkan lagi dengan ancaman kehakiman penutupan Napster pada awal 2001. Perkembangan mengejut populariti ini menyingkap had penskalaran protokol awal itu. Pada awal 2001, variasi protokol tersebut (dilaksanakan pada awalnya dalam pelanggan sumber tertutup) membenarkan penskalaran yang lebih baik. Dengan tidak melayan setiap pelanggan sebagai pelanggan dan pelayan, sesetengah pengguna sekarang dilayan sebagai "ultrapeers", melencong permohonan carian dan jawapan pada pengguna yang bersambung kepada mereka. 

Ini menjadikan Gnutella bertambah popular dan menggalakkan perkembangan jaringan Gnutella. Pada akhir tahun 2001, pelanggan Gnutella LimeWire, yang merupakan pendorong utama pembangunan protokol Gnutella, dibebaskan sebagai sumber terbuka. Pada Februari 2002, aturcara Morpheus, kumpulan perkongsian fail perdagangan, meninggalkan FastTrack, aturcara rakan ke rakannya dan membebaskan pelanggan baru berasaskan sumber terbuka pelanggan Gnutella, Gnucleus.

Kadang kala perkataan 'Gnutella' merujuk bukan kepada projek tertentu atau aturcara yang khusus, tetapi kepada protokol terbuka digunakan oleh pelbagai pelanggan. Oleh kerana pelanggan bari sedang dibangunkan dipelbagai lokasi, dan protokol baru juga sedang dibangunkan, ia sukar untuk menyatakan apakah erti sebenar 'Gnutella' dimasa hadapan. 

Nama tersebut adalah gabungan perkataan GNU dan Nutella. Kononnya, penulis aturcara Frankel dan Pepper memakan banyak nutella ketika membangunkan projek asal, dan mereka bercadang untuk menggunakan lesen GNU GPL pada program yang siap. Gnutella tidak mempunyai sebarang kaitan dengan projek GNU; lihat GNUnet untuk yang seumpama dengan projek GNU.

Bagaimana ia berfungsi
----------------------

Untuk membayangkan bagaimana Gnutella berfungsi, bayangkan kitaran besar pengguna (dikenali sebagai nod), yang setiap mereka mempunyai aturcara pelanggan Gnutella. Aturcara pelanggan pada penggunaan pertama mesti *bootstrap* dan menjumpai sekurangnya satu daripada nod yang lain. Kaedah yang berlainan telah digunakan untuk tujuan ini, termasuk senarai sedia ada alamat nod yang berfungsi dihantar bersama aturcara ini, menggunakan tapak Gwebcache pada web untuk mencari nod, termasuk juga menggunakan IRC untuk mencari nod. Kemungkinannya terdapat satu nod (labelkan sebagai B) yang berfungsi. Apabila ia bersambung, nod B akan menghantar kepada nod A senarai nod yang berfungsi kepunyaannya. Nod A akan cuba menyambungkan kepada nod yang terdapat dalam bungkusan penghantaran, dan juga nod yang ia terima dari nod lain, sehingga ia mencapai kuota tertentu, biasanya ditetapkan pengguna. Ia hanya menyambung kepada jumlah nod tersebut, tetapi ia menyimpan nod yang belum dicuba lagi (ia memadamkan nod yang gagal disambung).

Sekarang, apabila pengguna A ingin melakukan carian, ia menghantar permohonan carian kepada setiap nod yang bersambung secara aktif. Terdapat kemungkinan sebahagian daripada mereka tidak lagi berfungsi, dalam kes ini pengguna A cuba menyambung dengan nod yang disimpan sebagai sokongan backup. Jumlah nod yang bersambung secara aktif kepada pengguna A adalah kecil (sekitar 5), jadi setiap nod akan menghantar permohonan tersebut kepada semua nod yang bersambung dengannya, dan mereka akan menghantar permohonan itu, dan seterusnya. Secara teori, permohonan tersebut akhirnya akan sampai kepada semua pengguna jaringan Gnutella.

Sekiranya carian tersebut menghasilkan jumpaan, nod yang menghasilkan sambungan tersebut (yang mana alamat IP termasuk dalam permohonan carian) secara langsung. Mereka berbincang mengenai pindahan fail dan proses pindahan. Jika lebih dari satu salinan fail yang sama dijumpai, pencari boleh melaksanakan pindah terima "berkelompok" - pindah terima sebahagian fail daripada nod berlainan secara serentak. Ini meningkatkan lagi kadar pindah terima.

Akhirnya, apabila pengguna A putus, aturcara pelanggan menyimpan salinan senarai nod yang aktif bersambung, dan disimpan sebagai pendua, untuk kegunaan masa hadapan.

Dalam amalan, pencarian pada jaringan Gnutella biasanya amat lambat dan tidak terjamin. Setiap nod adalah pengguna komputer biasa; oleh itu, mereka sentiasa berpaut dan putus pautan, oleh itu jaringan tersebut tidak pernah stabil. Oleh kerana sambungan pengguna individu biasanya adalah perlahan, ia akan mengambil masa yang lama untuk permohonan pencarian untuk mengembara keseluruhan jaringan (yang purata 100,000 nod sesuatu masa.)

Kebaikan utama mempunyai jaringan tersebar Gnutella adalah ini menjadikannya sukar bagi menutup jaringan tersebut. Tidak seperti Napster, di mana seluruh jaringan bergantung kepada pelayan pusat, Gnutella tidak boleh di tutup dengan menutup mana-mana nod. Selagi terdapat sekurang-kurangnya dua pengguna, Gnutella kekal wujud.

Panduan mudah mengenai bagaimana Gnutella berfungsi boleh di dapati di GnuFU: Gnutella Untuk Pengguna (Gnutella For Users).

Sambungan dan ciri protokol
---------------------------

Gnutella beroperasi berasaskan protokol banjiran pertanyaan. Versi 0.4 lapuk Gnutella protokol jaringan (*network protocol*) menggunakan lima paket berlainan, seperti

* ping: mencari hos di jaringan
* pong: menjawap ping
* query: carian fail
* query hit: menjayap pertanyaan
* push: permohonan pindah terima (untuk *firewalled servents*)

Yang ini adalah berkenaan pencarian jaringan Gnutella. Pindahan fail ditangani melalui protokol HTTP sedia ada.

Pembangunan Gnutella adalah diketuai oleh Forum Pembangunan Gnutella - GDF (*Gnutella Developer Forum*). Banyak tambahan protokol telah dan akan dimajukan, oleh penjual aturcara dan pemaju Gnutella percuma GDF. Ia termasuk penyaluran pertanyaan bijak (*intelligent query routing*), SHA checksums, pindah terima sejajar (*swarming*), dll. 

Terdapat usaha untuk menyiapkan tambahan protokol ini pada spesifikasi di laman pembangunan Gnutella 0.6. Piawai Gnutella 0.4 walaupun masih merupakan protokol terkini kerana semua tambahan hanya wujud sebagai cadangan, adalah sudah lapuk. Malah ia adalah sukar atau mustahil untuk memaut menggunakan jabat tangan (*handshake*) dengan 0.4. 

Pada Januari 2003 Shareaza mengistiharkan protokol Gnutella2 yang menggunakan UDP dan bukannya protokol jaringan TCP untuk carian, an extensible binary xml-like packet format and termasuk kebanyakan pautan yang disebut di atas. Lakaran spesifikasi yang dibebaskan oleh mereka pada 26 March 2003. Gnutella2 (G2) tidak disokong oleh jaringan Gnutella "lama" -- kecuali untuk Gnucleus -- dan pemaju Gnutella merujuk kepadanya sebagai "MP" (*Protokol Mike*) kerana ia tidak diluluskan oleh GDF.

Pelanggan
---------

Pelanggan popular Gnutella adalah:

* Limewire (Cross-Platform dalam Java), kod sumber terbuka GPL.
* Cabos (Windows, Mac OS 9, Mac OS X)
* gtk-gnutella (Linux, Unix)
* Gnucleus (Windows), sumber terbuka teras dalam C/C++.
* Acquisitionx (Mac OS X), berasaskan teras sumber terbuka LimeWire.
* BearShare (Windows), sumber tertutup.
* Shareaza (Windows), sumber tertutup, juga memaut kepada Gnutella2, EDonkey2000, EMule dan BitTorrent.
* Poisoned (Mac OS X), sumber terbuka, juga memaut kepada FastTrack dan OpenFT

Lihat juga
----------

* Freenet, yang menumpu kepada anonymization dan simpanan tersebar (*distributed storage*).
* servent
* Waste
* Bitzi, katalog fail kandungan terbuka integrated dengan sebahagian pelanggan Gnutella
* GnuFU, Gnutella For Users: A description of the inner workings of the network in User-Friendly Style.

Pautan luar
-----------

* Gnutella protocol development website.
* Gnutella2 homepage Diarkibkan 2005-05-29 di Wayback Machine
* GnuFU: Gnutella For Users - A guide to Gnutella in Userfriendly style.