# YaCy

YaCy (pour Yet Another Cyberspace, homophone anglais de ya see (vous voyez)) est un moteur de recherche libre fonctionnant selon le principe d'un réseau pair à pair. Ce logiciel est développé en Java et était installé, fin 2006, sur des centaines d'ordinateurs appelés YaCy-peers ou postes-YaCy (600 actifs quotidiennement en juin 2014). YaCy est par exemple utilisé par l'Université Johannes Gutenberg de Mayence.
Un réseau YaCy est caractérisé par une architecture distribuée (non centralisée). Tous les nœuds (pairs) YaCy sont équivalents et il n'existe pas de serveur principal.
Sur chaque poste, YaCy tourne soit en mode robot d'indexation ou en mode proxy. Chaque poste-YaCy lance des robots d'indexation qui analysent les pages trouvées. Les résultats sont enregistrés dans une banque de données distribuée (index).
L'accès au moteur de recherche se fait par l'intermédiaire d'un serveur Web local qui présente un champ pour y introduire les mots clefs et fournit les résultats sous forme d'une page web habituelle.
Le projet YaCy a été fondé en 2003 par Michael Christen. Le logiciel est délivré sous licence libre GNU GPL.

## Le programme

Le cœur du moteur de recherche YaCy n'est pas, comme pour d'autres moteurs de recherche, un serveur central, mais un logiciel qui fonctionne sur presque tous les systèmes d'exploitation. La recherche s'effectue sur une page web locale, délivrée par le logiciel installé. L'affichage des résultats se présente également sous la forme d’une page web.
Un serveur proxy est couplé au système P2P : il est utilisable en option et indique automatiquement les pages visitées. Cette information n'est pas stockée par les sites visités, qui peuvent récupérer des informations supplémentaires via GET ou POST ou qui utilisent des cookies ou l'identification HTTP (par exemple pour les pages protégées par mot de passe). De cette manière, il est assuré que seules des données ouvertement accessibles à tous sont indiquées.

## Fonctionnalités avancées

* YaCy offre à tous les utilisateurs de l'option proxy la possibilité d'atteindre des postes sous le domaine PEERNAME.yacy respectivement PEERHASH.yacyh. L'utilisateur peut définir une page d'accueil sous www.PEERNAME.yacy; un système de partage de fichiers est accessible sous share.PEERNAME.yacy et l'interface habituelle sous PEERNAME.yacy. Il peut définir lui-même d'autres sous-domaines dans lesquels il crée un nouveau dossier avec le nom du sous-domaine. Il s'agit aussi d'une sorte de DNS dynamique.
* YaCy offre également un espace pour une page d'accueil et pour l'échange de fichiers aux utilisateurs qui ne se servent pas de YaCy, indépendamment du .yacy-Domain. On peut le lier à l'adresse IP actuelle ou un nom de domaine dynamique.
* YaCy possède une fonctionnalité qui sert à envoyer des messages texte (formatés en wikitexte) et, selon les réglages du récepteur, à envoyer des données.
* YaCy intègre un wiki et un blog.
* La gestion des marque-pages permet de créer des marque-pages privés ou visibles publiquement.
* Il est possible de définir des listes noires pour des domaines particuliers.
* Il existe une interface OpenSearch disponible sous http://<peer-address>:<peer-port>/opensearchdescription.xml, par exemple http://search.yacy.net/opensearchdescription.xml.

## Architecture

Le moteur de recherche YaCy est fondé sur quatre éléments:

### Crawler

    Un robot de recherche qui navigue de page web en page web en analysant leur contenu.

### Indexer

    Crée un index de mots inversé (RWI en anglais). Chaque mot dans l'index possède sa liste d'URLs pertinentes et des informations quant à leur ranking. Les mots sont hachés avant d'être stockés.

### Interface Recherche et Administration

    Conçue comme une interface web fournie par une servlet HTTP locale avec un conteneur de servlets.

### Stockage des données

    Stockage de la base de données de l'index de mots inversé en utilisant une table de hachage distribuée.

## Caractéristiques techniques

Le programme est fondé sur un serveur web qui fonctionne comme un proxy-cache. L'interface utilisateur est accessible via le serveur web ; on peut y effectuer des recherches ou administrer son poste. Le proxy transmet son code au crawler, ce qui signifie que toutes les pages visitées non personnalisées sont automatiquement ajoutées à l'index. YaCy se sert d'Apache Solr depuis la version 1.04.9097. En outre, le réseau YaCy offre quelques domaines accessibles via le proxy.

### Distribution de l'index

À la différence de lors de l'échange de données, les résultats d'un moteur de recherche P2P doivent être disponibles immédiatement. Afin de le garantir, YaCy utilise une table de hachage distribuée. Cela signifie que tous les mots et les URLs stockés sont envoyés aux postes dont la valeur de hachage va avec la valeur de hachage correspondante du mot ou de l'URL. Lors d'une recherche, cela se passe dans l'autre sens: on ne recherche que chez les postes qui peuvent, d'après l'URL, connaître leur valeur de hachage pour ce mot. Ainsi, seule une fraction des postes est contactée lors de la recherche, afin d'obtenir des résultats malgré tout satisfaisants.

### Types de postes

YaCy différencie quatre types de postes:

#### Virgin

    Un poste Virgin n'a aucun contact d'aucune sorte avec le réseau et n'est donc pas repérable. On est donc le seul à pouvoir savoir que son poste est Virgin.

#### Junior

    Le poste est derrière un pare-feu. Les autres peuvent le voir en tant que poste Junior ou comme peer potentiel. Cependant, ils ne peuvent connaître que l'heure de sa dernière connexion et n'ont aucun moyen de savoir s'il est toujours en ligne.

#### Senior

    Un poste Senior peut être atteint de l'extérieur et est un membre à part entière du réseau YaCy.

#### Principal

    C'est un poste Senior qui de plus envoie une "seedlist" que les autres postes peuvent utiliser à des fins d'amorçage.

### Protocole

Le protocole YaCy consiste en des servlets texte que le serveur web intégré met à disposition sous /yacy/servletname.html. Les autres postes lui transmettent des données via les paramètres GET: ils reçoivent en réponse un simple texte, dont le format exact diffère selon les servlets.

### Amorçage

À l'amorçage, YaCy essaie de trouver d'autres postes du réseau. Pour cela, il cherche tout d'abord dans le fichier superseed.txt une seedlist à télécharger: les URLs de seedlists chargées par d'autres postes s'y trouvent. Puis il obtient via le fichier seeds.txt les références à d'autres postes, et ainsi le contact du réseau YaCy peut être entrepris. Au prochain démarrage, YaCy peut être amorcé par les seeds connues. Les seedlists sont alors utiles uniquement lorsque de nombreuses références ne sont plus correctes.

## Avantages et inconvénients
### Avantages

* Les résultats des recherches ne peuvent pas être censurés ou biaisés pour des raisons publicitaires puisqu'il n'y a pas de serveur central.
* Le moteur de recherche offre une plus grande fiabilité (du moins théoriquement) car une partie du réseau YaCy sera toujours accessible si certains postes ne fonctionnent pas.
* Le logiciel est un logiciel libre et publié sous la licence publique générale GNU. Il est de plus gratuit.
* Il n'y a pas d'annonces publicitaires gérées par un système centralisé puisque le moteur n'appartient pas à une entreprise.
* De par sa conception, YaCy peut être utilisé afin d'indexer le « web caché », y compris Tor, I2P ou encore Freenet.
* Il est possible d'atteindre un degré élevé de confidentialité.
* Le protocole YaCy utilise des requêtes HTTP, préservant la transparence et l'accessibilité tout en aidant au diagnostic et à la recherche des sources de problèmes. À l'aide d'outils de compression tels que gzip, les performances peuvent être améliorées jusqu'à quasiment atteindre le niveau de celles des protocoles binaires (tels que TCP et UDP).
* Soutien intégré pour OpenSearch.

### Inconvénients

* Lors d'une recherche, YaCy doit contacter d'autres postes et recharger la page d'accueil afin de bloquer le spam. Une recherche va donc prendre plus de temps qu'avec un moteur de recherche conventionnel.
* Puisqu'il n'y a pas de serveur central et que le réseau YaCy est ouvert à tous, des postes malveillants seraient en principe capables d'introduire des résultats de recherche inexacts, commercialement biaisés ou du spam. Malgré cela, aucun résultat de recherche affiché chez l'utilisateur ne peut être "faux" en théorie puisque tous les résultats sont vérifiés en téléchargeant chaque page appartenant à l'ensemble des résultats et en vérifiant que les mots recherchés existent réellement dans la page. Cependant, YaCy utilise une chaîne User-Agent pour s'identifier, ce qui signifie qu'un serveur web pourrait renvoyer à un crawler YaCy un contenu différent de celui renvoyé à un visiteur normal.
* Si seuls quelques postes sont accessibles, le nombre de résultats sera moindre que par le biais d'une recherche sur un gros moteur de recherche. L'arrêt ou la défaillance de quelques postes importants peuvent en outre mener à des perturbations plus importantes encore.
* Pour des raisons de cache, les requêtes sont sauvegardées temporairement dans la RAM des postes dans lesquelles elles sont effectuées. La fonction de hachage utilisée pour coder les mots de la requête est avant tout utilisée pour gérer la table de hachage distribuée, et les mots-clés peuvent être découverts en partie à l'aide d'un dictionnaire afin de montrer les requêtes en clair.
* Le protocole YaCy utilise des requêtes HTTP, or celles-ci peuvent être plus lentes que celles utilisées par des protocoles non-textuels (binaires) si elles ne sont pas compressées.
* YaCy ne comprend aucune fonctionnalité de traversée de NAT, ce qui empêche le logiciel d'être utilisé à une échelle aussi large qu'il le pourrait, puisque la possibilité de configurer le routeur local, quand elle existe, requiert une certaine expertise pour fonctionner correctement.
* Le classement des sites par pertinence est effectué du côté client (les utilisateurs sont encouragés à installer leur propre serveur YaCy, utiliser un serveur local étant nécessaire pour profiter au mieux des potentialités de YaCy). Les algorithmes de classement, bien qu'aisément personnalisables, ne voient pas leur charge de travail distribuée et sont limités à l'usage de l'index de mots de YaCy et à toute analyse qui pourrait être faite sur l'objet qu'on cherche à classer. C'est pourquoi des algorithmes de classement plus complexes, tels que ceux utilisés par Google et analysant le rang en fonction d'une variétés de facteurs contextuels développés durant le parcours du contenu, ne sont pour le moment pas réalisables avec YaCy, ce qui limite la possibilité pour la plupart des utilisateurs de trouver du contenu plus pertinent.