Le gîte et le couvert pour StockFish

Développement contributif open source de StockFish (SF) avec versions gérées par Git

En matière de développement open source de moteurs de jeu d’Echecs de très haut niveau (> 3000 ELO), StockFish (SF) inaugure le développement contributif ouvert à toute personne intéressée par la programmation échiquéenne, c-a-d le code source en langage informatique.

Ce développement collaboratif est basé sur le logiciel gratuit de versions Git (un terme de l’argot anglais peu recommandable inspiré avec une certaine ironie par son auteur Linus Torvalds connu comme créateur du système d’exploitation Linux).

En pratique, l’utilisateur de StockFish ayant téléchargé l’exécutable Windows trouvera également dans l’archive zippée le répertoire src du code source. Il n’a donc pas besoin d’installer le système de versions Git qui sert à cloner c-a-d lire, écrire, réserver, créer une branche, créer une version...

Cet article s’adresse aux personnes voulant aller plus loin que récupérer le code source. Car le code source de StockFish peut avoir évolué par rapport à l’archive zippée de l’exécutable. Il permettra aux contributeurs d’évolution du logiciel StockFish de partager leurs découvertes et améliorations.

Attention, l’apprentissage d’un logiciel de versions nécessite un investissement initial peu importe le système de versions. Par exemple dans la spip-zone (pour partager ou accéder aux développements SPIP), on utilise Subversion SVN. On retrouvera des concepts plus ou moins analogues dans Git. Cependant si c’est le premier logiciel de versions que l’on utilise, il faudra prendre le temps de lire la documentation car on s’insère dans un système de développement à plusieurs personnes. Il ne s’agit pas de tout casser. Il n’y a aucun risque tant que l’on ne fait pas d’écriture. C’est le cas avec l’opération de clonage qui consiste à lire le dépôt Git où on trouvera la dernière version du code source.

Télécharger Git

Télécharger la dernière version Git 1.8.1.2 pour Windows.

Git-1.8.1.2-preview20130201.exe 15 008 KB

par exemple dans C:\Users\Chess\Documents\StockFish\Git{Setup

Ce nom de répertoire est donné à titre d’exemple et peut être adapté à votre profil utilisateur Windows.

Il a été choisi de placer sous StockFish tout ce qui concerne StockFish.

Installer Git

Créer avec le gestionnaire de fichiers de Windows le répertoire

C:\Users\Chess\Documents\StockFish\Git{Prog

C’est une habitude intéressante de bien séparer le répertoire d’installation Git\Setup de celui du programme installé Git\Prog comme cela on gère efficacement où se trouve l’installateur et ce qu’il installe.

Lancer l’installation en cliquant sur

C:\Users\Chess\Documents\StockFish\Git{Setup}Git-1.8.1.2-preview20130201.exe

On indiquera comme répertoire cible d’installation :

C:\Users\Chess\Documents\StockFish\Git{Prog

L’installation peut se faire pour l’utilisateur courant (il n’est pas nécessaire d’installer Git pour tous les utilisateurs de Windows).

On gardera toutes les options par défaut :

1. Adjusting your PATH environment
[x] Use Git Bash only
This is the most conservative choice if you are concerned about the stability of your system.
Your PATH will not be modified.
 
[ ] Run Git from the Windows Command Prompt
This option is considered safe and no conflicts with other tools are known.
Only Git will be added to your PATH.
Use this option if you want to use Git from a Cygwin Prompt (make sure to NOT have Cygwin’s Git installed).
 
[ ] Run Git and included Unix tools from the Windows Command Prompt
Both Git and its accompanying Unix tools will be added to your PATH.
Warning : This will override Windows tools like find.exe and sort.exe.
Select this option only if you understand the implications.
 
2. Checkout Windows-style, commit Unix-style line endings
[x] Git will convert LF to CRLF when checking out text files.
When committing text files, CRLF will be converted to LF.
For cross-platform projects, this is the recommended setting on Windows
("core.autocrlf" is set to "true").
 
[ ] Checkout as-is, commit Unix-style line endings.
Git will not perform any converson when checking out text files.
When committing text files, CRLF will be converted to LF.
For cross-platform prjects, this is the recommended setting on Unix
("core.autocrlf" is set to "input").
 
[ ] Checkout as-is, commit as-is
Git will not perform any conversions when checking out or committing text files.
Choosing this option is not recommended for cross-platform projects
("core.autocrlf" is set to "false").

Format Windows vs. Unix des fins de ligne du code source

  • Sous Windows, chaque fin de ligne dans un fichier texte (.txt) se termine par CR + LF (Carriage Return + Line Feed).
  • Sous Unix ou Linux, on utilise comme fin de ligne uniquement LF.

Les éditeurs de texte pour le développement comme le freeware Notepad++ sont capables de convertir un fichier texte Unix en fichier texte Windows et réciproquement.

En ouvrant avec Notepad++ le fichier texte du code source de StockFish venant de l’exe zippé :

C:\Users\Chess\Documents\StockFish\stockfish-3-win\src{timeman.cpp

puis celui issu de Git :

C:\Users\Chess\Documents\StockFish\Source\src{timeman.cpp
(attention ce fichier code source ne sera disponible que lorsqu’on aura cloné avec Git le projet StockFish dans un des chapitres suivants.)

on constate avec le menu de NotePad++ > Edit > EOL (End Of Line) Conversion >

  • Unix format est grisé pour l’archive de l’exe zippé (le fichier est déjà au format Unix)
  • Windows format est grisé dans le code source issu de Git (le fichier est déjà au format Windows).

Cela veut dire que Git avec l’option cochée par défaut a converti LF (Unix) en CRLF (Windows) dans chaque fichier texte du code source.

Ce n’est pas le cas pour le code source fourni dans l’archive zippée de l’exe alors que cette archive est normalement prévue pour Windows.

Essayer d’ouvir le fichier Unix issu de l’archive de l’exe zippé

C:\Users\Chess\Documents\StockFish\stockfish-3-win\src{timeman.cpp

avec le blocnote (NotePad.exe) en standard dans les accessoires de Windows. Le texte sera incompréhensible car il n’y a pas de fin de lignes. Toutes les lignes sont concaténées. Le texte sera réparti en une seule ligne géante qui peut faire planter le compilateur.

Maintenant ouvrer le fichier Windows issu de Git

C:\Users\Chess\Documents\StockFish\Source\src{timeman.cpp

toujours avec le blocnote de Windows et cette fois-ci le texte sera lisible avec chaque fin de ligne attendue en général avant la 80ème colonne.

En conclusion en local sur le disque dur, Git transforme le code source en fichiers Windows.

Une fois modifiés, si on veut les partager (commit) dans le dépôt Git du projet StockFish, Git fera automatiquement la conversion inverse de Windows à Unix selon l’option choisie par défaut.

Derrière un pare-feu

Dans le cas où le PC sous Windows est protégé par un pare-feu (firewall tel que Norton), il faut soit stopper le pare-feu soit autoriser l’exécutable suivant pour qu’il passe la barrière du pare-feu :

C:\Users\Chess\Documents\StockFish\Git\Prog\libexec\git-core{git-remote-https.exe

Cloner le dépôt Git de StockFish

Comme pour les moteurs d’échecs avec le Chess GUI Arena, le système de version Git peut avoir plusieurs GUI tels que le freeware SourceTree qui présente une fenêtre graphique des branches dans l’arbre des versions.

Pour l’instant on n’utilisera le Git Gui fourni en standard avec le Git installé.

Si C:\Users\Chess\Documents\StockFish{Source existe déjà, effacer le avec le gestionnaire de fichiers de Windows.

Dans le gestionnaire de fichiers de Windows, cliquer avec le bouton droit le répertoire

C:\Users\Chess\Documents\StockFish

Cliquer sur le menu contextuel "Git Gui" du gestionnaire de fichiers de Windows. Cela signifie que Git a bien été installé.

Deuxième menu "Cloner un dépôt existant"

Emplacement source : https://github.com/mcostalba/Stockfish.git
Répertoire cible : C:\Users\Chess\Documents\StockFish{Source
[x] Copie complète (plus lent, sauvegarde redondante)

Cliquer sur "Cloner"

Que trouve-t’on dans le nouveau répertoire Source ainsi créé par Git ?

C:\Users\Chess\Documents\StockFish{Source{Readme.md

Un fichier texte d’aide et de présentation au format markdown (.md) qui ressemble à du SPIP. La conversion du .md en HTML est lisible sur le site GitHub d’hébergement et de gestion du projet SF (StockFish) géré par Marco Costalba.

Le répertoire src contenant le code source de StockFish au format texte pour Windows.

Dans le cas où vous avez paramétré le gestionnaire de fichiers de Windows pour voir les fichiers et répertoires cachés (Tools > Folder Options > 2nd tab "View" > Show hidden files and folders), il y a un répertoire caché .git qui est une véritable arborescence pour le système de gestions de versions de fichiers de Git. N’y faite aucune modification ou opération manuelle. Git s’en chargera.

Première conclusion temporaire : bon appétit !

Quelque soit le système de versions de fichiers tel que Git, cela demande un investissement important pour comprendre au moins le premier puis chercher les correspondences si on en connait déjà un.

Une fois l’introduction de Wikipédia lue, il faudra investir un temps certain dans la lecture du livre en anglais (indispensable même si certains chapitres sont facultatifs) en s’aidant éventuellement de la traduction française. C’est le prix d’un développement contributif open source.

On verra plus tard les choix d’implémentation qu’en on fait l’équipe de StockFish c-a-d le choix des tags et autres consignes de branches des versions pour s’intégrer dans leur équipe.

Au terme de l’installation de Git, on a cloné le projet StockFish en local sur le disque dur c-a-d on a lu le code source dans l’espace partagé Internet du projet StockFish et on l’a copié au format Windows sur le disque dur local. On a abordé la notion de développement cross-platform (en local au format Windows et dans le dépôt Git en ligne au format Unix).

Selon l’analogie de la réservation d’hôtel, on n’a pas fait de réservation (checkout dans le sens du dépôt Git en ligne vers le disque dur en local) en vue de modifier un fichier source et empêcher les autres de le modifier tant que le fichier n’est pas libéré (checkin dans le sens du disque dur en local vers le dépôt Git en ligne). On n’a pas écrit dans le dépôt comme le ferait un commit.

Car pour faire une modification valide du code source, il faut d’abord savoir le compiler en code exécutable puis tenter de se l’approprier c-a-d de le comprendre.

Posté le 8 mai 2013 par Matt