# YaCy

YaCy (von Yet another Cyberspace, homophon zu englisch ya see) ist eine Suchmaschine, die nach dem Peer-to-Peer-Prinzip – kurz P2P – arbeitet. Dabei gibt es keinen zentralen Server, sondern alle Teilnehmer sind gleichwertig.
Durch die Installation von YaCy wird ein lokaler YaCy-Proxy bereitgestellt. Alle über diesen Proxy abgerufenen Webseiten, sowie durch mitgelieferte Plugins auch andere Daten, werden lokal indexiert und können durch den Nutzer mittels des YaCy Webinterface durchsucht werden. Dieser Index wird nun (optional) redundant auf anderen Peers des globalen YaCy-Netzwerkes verteilt, so dass ein globaler Index entsteht. Eine globale Suche fragt den globalen Index ab, der aus den Peers besteht, die gerade online sind. Durch dieses dezentrale Prinzip ist YaCy resistent gegen Ausfälle.
Der eigene Index (und somit indirekt der globale) lässt sich durch das Losschicken eines eigenen Webcrawlers erweitern. Es können alternativ eigene YaCy-basierte Netzwerke zur Bildung eines gemeinsamen Index konfiguriert werden; als Beispiel sei hier das Sciencenet genannt.
Das Projekt YaCy wurde von Michael Christen im Jahr 2003 gegründet.

## Vorteile und Nachteile
### Vorteile

* Die mit YaCy aufgebaute globale Suchmaschine wäre praktisch ausfallsicher, da immer ein Teil des Netzwerks erreichbar sein wird.
* Die Internetnutzer sind durch YaCy als Suchmaschine unabhängig von Unternehmen, deren Ranking (das diese sich evtl. bezahlen lassen) und deren Zensur.
* Die Software ist Open Source, wurde unter der GNU General Public License veröffentlicht und ist kostenlos.
* Da die Indexierung über den Proxy am jeweiligen Client stattfindet, lassen sich somit Seiten aus dem Deep Web oder nicht öffentlichen Netzen (z. B. i2p) indexieren, die ein Crawler einer öffentlichen Suchmaschine wie z. B. Google nicht erschließen kann.
* YaCy ist nicht zwingend an die Teilnahme am öffentlichen YaCy-Cluster gebunden und kann so z. B. als Suchmaschine in privaten Netzen (z. B. Unternehmen-Intranet) oder als private Suchmaschine über besuchte (und damit indexierte) Seiten genutzt werden.

### Nachteile

* Da YaCy für eine Suchanfrage andere Peers kontaktieren und Suchergebnisse zum Vermeiden von Spam durch Nachladen der Trefferseite verifizieren muss, dauert die Suche länger als bei herkömmlichen Suchmaschinen.
* Sind nur wenige Peers vorhanden, können weniger Ergebnisse gefunden werden als bei großen Suchmaschinen. Auch kann es durch den Ausfall oder die Abschaltung einzelner (großer) Peers zu weiteren Beeinträchtigungen kommen. Mit Freigabe der Version 1.0 Ende November 2011 stieg jedoch durch den steigenden Bekanntheitsgrad die Anzahl der Peers auf ca. 1000, so dass dieser Nachteil aktuell vernachlässigt werden kann.
* Das YaCy-Protokoll funktioniert über einzelne HTTP-Requests, wodurch es eine höhere Latenz aufweist als UDP oder TCP mit dauerhaften Verbindungen.
* Die Suchanfragen werden im durchsuchten Peer zwecks Caching ausschließlich temporär im RAM gespeichert. Die verwendete Hashfunktion für die Codierung der Suchwörter dient vorrangig der Ansteuerung der verteilten Hashtabelle (DHT), und Suchwörter können mit einem Wörterbuch teilweise aufgedeckt werden, um die Suchanfragen im Klartext zu zeigen.
* Die Daten werden nicht verschlüsselt gespeichert oder übertragen.
* Theoretisch könnten Spammer eigene Peers betreiben, die Spam als Ergebnis zurückliefern. Falsche Suchergebnisse werden aber dadurch nicht möglich, da ein Peer durch Nachladen der Ergebnisseiten vor der Anzeige die Treffer verifiziert.

## Das Programm

Das Herzstück der Suchmaschine ist anders als bei anderen Suchmaschinen nicht eine zentrale Seite, sondern ein Computerprogramm, das auf fast allen Betriebssystemen läuft. Die Suche verläuft über eine lokale Webseite, die vom installierten Programm ausgeliefert wird. Die Anzeige der Ergebnisse erfolgt hier wie gewohnt als HTML-Seite.
Gekoppelt mit dem P2P-System läuft ein optional verwendbarer Proxyserver, der automatisch die besuchten Seiten indiziert. Dies findet nicht bei Seiten statt, denen via GET oder POST weitere Daten übergeben werden oder die Cookies oder HTTP-Authentifizierung verwenden (z. B. Seiten in einem Login-Bereich). Somit ist sichergestellt, dass auch wirklich nur öffentlich zugängliche Daten indiziert werden.

## Weitere Funktionen

* YaCy bietet allen Nutzern der Proxyfunktion die Möglichkeit, Peers über die Domain PEERNAME.yacy bzw. PEERHASH.yacy zu erreichen. Unter www.PEERNAME.yacy kann der Nutzer eine Homepage hinterlegen, unter share.PEERNAME.yacy liegt ein Fileshare, und unter PEERNAME.yacy ist die normale Schnittstelle erreichbar. Weitere Subdomains kann der Benutzer selber anlegen, indem er einen Ordner mit dem Subdomain-Namen erstellt. Es handelt sich also um eine Art dynamisches DNS.
* Unabhängig von der .yacy-Domain bietet YaCy Platz für eine Homepage und einen Fileshare, den man mit der aktuellen IP oder einem dynamischen DNS-Namen verlinken kann, auch für Nutzer, die YaCy nicht verwenden.
* YaCy hat eine eingebaute Nachrichtenfunktion, mit der man Textnachrichten (mit Wikicode zur Formatierung) und je nach Einstellung des Empfängers auch Dateien versenden kann.
* YaCy hat ein Wiki und einen Blog integriert.
* Es gibt eine Lesezeichenverwaltung, in dem öffentlich einsehbare und private Lesezeichen angelegt werden können.
* Es gibt die Möglichkeit, für einzelne Bereiche definierte Blacklists anzulegen.
* Es existiert ein OpenSearch-Interface. Jeder Peer stellt diesen unter http://<peer-address>:<peer-port>/opensearchdescription.xml zur Verfügung, beispielsweise http://search.yacy.net/opensearchdescription.xml

## Technik

Das Programm basiert auf einem Webserver, der zugleich ein Caching-Proxy ist. Über den Webserver kann man auf die Benutzerschnittstelle zugreifen, um zu suchen oder den eigenen Peer zu verwalten. Der Proxy teilt seinen Code mit dem Crawler, das heißt alle besuchten Seiten, die nicht personalisiert sind, werden automatisch im Index erfasst. YaCy verwendet ab Version 1.04.9097 Apache Solr. Weiterhin bietet das YaCy-Netz eigene YaCy-Domains, die über den Proxy verfügbar sind.

### Indexverteilung

Anders als bei Datei-Tauschbörsen muss das Ergebnis bei einer P2P-Suchmaschine sofort verfügbar sein. Um das zu gewährleisten, nutzt YaCy eine verteilte Hashtabelle (DHT, von engl. distributed hash table). Das heißt, dass alle erfassten URLs und Wörter an die Peers geschickt werden, deren Peerhash zum entsprechenden Wordhash oder Urlhash passt. Bei einer Suche funktioniert es genau andersherum: Es wird nur auf Peers gesucht, die ihrem Hash nach URLs für das Wort kennen können.
Dadurch muss nur ein Bruchteil der Peers bei der Suche kontaktiert werden, um trotzdem gute Ergebnisse zu bekommen.

### Peertypen

YaCy unterscheidet vier verschiedene Arten von Peers:

#### Virgin

    Diese Peers kann man nicht finden, da ein Virgin-Peer keinerlei Kontakt zum Netz hat. Daher sieht man nur selber, wenn der Peer Virgin ist.

#### Junior

    Der Peer ist hinter einer Firewall. Andere können ihn als Junior oder potentiellen Peer sehen, sie erkennen allerdings nur, wann er sich das letzte Mal gemeldet hat, und haben keinerlei Möglichkeiten festzustellen, ob er noch online ist.

#### Senior

    Ein Senior kann von außen erreicht werden und ist ein vollwertiges Mitglied des YaCy-Netzes.

#### Principal

    Wie Senior, nur wird zusätzlich eine „Seedlist“ hochgeladen, die andere Peers zum Bootstrapping benutzen können.

### Protokoll

Das Protokoll von YaCy besteht aus Text-Servlets, die der eingebaute Webserver unter /yacy/servletname.html bereitstellt. Andere Peers übermitteln via GET-Parametern Daten und bekommen einen einfachen Text als Antwort; das genaue Format ist bei den Servlets unterschiedlich.

### Bootstrapping

Beim Bootstrapping versucht YaCy, das Netz mit den anderen Peers zu finden. Dazu wird zunächst nach einer Seedliste gesucht. In superseed.txt wird zunächst die URL einer Seedliste, die ein YaCy-Peer regelmäßig hochlädt, ausgesucht und diese dann heruntergeladen. In der seeds.txt stehen die Referenzen anderer Peers, sodass Kontakt zum YaCy-Netz aufgenommen werden kann. Beim nächsten Start kann aus den bekannten Seeds gebootstrapt werden, und die Seedlisten sind nur nötig, wenn viele Referenzen nicht mehr gültig sind.