# LXR Cross Referencer

LXR Cross Referencer, plus connu sous le nom de LXR, est un utilitaire général d'indexation de code source et de références croisées qui permet la navigation au sein du code source en utilisant une technologie web avec des liens vers la définition et les usages des identificateurs.

## Historique

LXR est né du besoin d'un outil permettant une vue synthétique sur le noyau Linux au cours de son développement. Un tel outil est d'autant plus nécessaire que la documentation est absente et que le nombre de contributeurs est élevé.
Deux étudiants norvégiens, intéressés par l'architecture de Linux, ont entrepris l'écriture d'un petit utilitaire affichant les fichiers le composant dans un navigateur web et présentant les usages des variables après un simple clic sur le nom. Conscients de l'intérêt de ce logiciel, ils l'ont déposé très tôt (dès 1994?) sur SourceForge.net.
Au cours du temps, des passionnés ont intégré l'équipe de développement pour donner plus de maturité au code, sans que leur nombre dépasse à aucun moment quelques unités. De ce point de vue, LXR est typique de la majorité des projets hébergés sur SourceForge.net mais présente une longévité exceptionnelle parmi les petits projets.
Un des deux créateurs de LXR a exploré de nouvelles techniques, aboutissant à LXRng. Ce développement expérimental n'offre pas toutes les fonctions de la version traditionnelle et s'écarte notablement des principes initiaux de LXR.
Bien qu'aucune communication n'ai été faite autour de l'outil, LXR a fini par être cité dans des articles de journaux informatiques, par exemple Linux Journal. Néanmoins, une recherche sur Internet montre l'ambiguïté existant entre l'outil et son usage pour afficher d'autres logiciels.

## Technologie

LXR est minimaliste et suit le principe du moindre effort.
Le parti pris de minimalisme évite le recours à trop de techniques différentes. Ce faisant, le nombre de dépendances est limité et le logiciel peut fonctionner sous des configurations diverses sans adaptation spéciale.
    Parmi les choix de conception, on peut citer le refus de langage interprété côté client (tel que Java ou JavaScript) ou la conformité stricte à HTML 4.01.
L'application du principe de moindre effort interdit de programmer un outil s'il existe déjà (du moins en tant que logiciel libre).
    Ceci a conduit à employer un navigateur web pour l'affichage (HTML et CSS permettent toutes les fantaisies de mise en page), une base de données relationnelle pour le stockage des définitions et des références croisées et l'utilitaire Exuberant ctags (en) pour l'analyse lexico-syntaxique des fichiers-source.
LXR est écrit en Perl, choix pratique pour des scripts CGI, cependant pas forcément adapté à une analyse lexico-syntaxique.
LXR tente d'être le moins contraignant possible :
* plusieurs choix de bases de données : MySQL, PostgreSQL, SQLite ou Oracle,
* choix pour la recherche en plein texte entre Glimpse (en) et SWISH-E (en),
* choix libre du serveur HTTP du moment qu'il peut exécuter des scripts CGI (des instructions sont données pour Apache, Cherokee, lighttpd, Nginx et thttpd,
* stockage des fichiers-source dans un répertoire réel ou dans un dépôt de système de gestion de version (choix entre CVS, Git, Mercurial et Subversion).

## Utilisation

Après installation du logiciel, tâche qui, sans être triviale, ne réclame pas d'expertise informatique, le code source doit être préparé et LXR configuré pour l'afficher.
    Les différentes versions du code source se présentent comme des sous-répertoires.
    L'autre possibilité est de stocker le code source dans un logiciel de gestion de version.
La seconde phase consiste en l'indexation de ce code (reconnaissance des identificateurs et entrée de leurs emplacements dans une base de données). La réindexation n'est nécessaire que lorsque le code source est modifié ou qu'une nouvelle version est ajoutée.
Il suffit ensuite de lancer un navigateur web avec un URL correspondant au code source pour l'afficher et profiter des hyperliens associés aux identificateurs.

## Possibilités et limites

Le code source peut être écrit dans n'importe quel langage reconnu par Exuberant ctags, mais les analyseurs n'offrent pas tous le même niveau de finesse.
Deux versions d'un même fichier peuvent être comparées côte à côte avec mise en évidence visuelle des différences (grâce à la commande diff émise par LXR).
En sus des hyperliens sous les variables, un formulaire autorise la recherche d'un identificateur saisi par l'utilisateur.
Enfin, pour contourner les insuffisances de la phase d'indexation, il est possible de rechercher une séquence quelconque de caractères (en plein texte) au prix du parcours intégral des fichiers source.
Les limites de LXR sont celles des outils sur lesquels il s'appuie, principalement Exuberant ctags. Mais la première source de difficulté provient essentiellement d'une attribution incorrecte des droits d'accès aux fichiers.
Une autre limite provient du choix de conception de ne pratiquer qu'une analyse statique du code alors que outils pratiquent une analyse sémantique.
Un utilisateur averti peut modifier la présentation de LXR en adaptant les modèles de page (écrits en HTML) et le rendu en retouchant la feuille de style CSS.

## Collections LXR

* LXR lui-même
* Navigation dans le noyau Linux
** Site missinglinkelectronics (utilisant la bifurcation expérimentale LXRng créée par lxr.linux.no)
** Site free-electrons (utilisant une version très ancienne de LXR)
* « Glibc 2.3.2 »
** « D'autres LXRs du même site »
* Mozilla Cross Reference, pour plusieurs projets de Mozilla.org
* « LXR pour Apache HTTPD »
* KDE Cross Reference
* « GNOME Cross Reference »
* « AbiWord Cross Reference »
    Les liens brisés ci-dessus ont été détectés en août 2014.