\chapter{Le développement} \section{Outils utilisés pour le développement} \subsection{Travail collaboratif} \par Nous avons travaillé ensemble gr{\^a}ce à CVS (Concurrent Versions System). Notre projet a été hébergé chez {\em Sourceforge.net}. Le CVS permet la modification du code du projet en m{\^e}me temps par plusieurs personnes. Les modifications et les mises à jour de chacun des membres du projet sont diffusées instantanément, avec un risque minimisé de conflits lors des modifications du m{\^e}me code. \subsection{Moyens techniques} \par Chacun selon nos préférences, nous avons utilisés des machines sous GNU/Linux ou Microsoft Windows et codé avec Vim. La personne sous Microsoft Windows avait une session graphique sur un serveur GNU/Linux, appartenant a un autre membre du projet, gr{\^a}ce à l'utilisation de VNC (Virtual Network Computing {\em www.realvnc.com}). Cela afin de permettre à l'utilisateur de Microsoft Windows de pouvoir tester la bibliothèque dans les meilleures conditions, car sous Microsoft Windows l'utilisateur n'est pas prévenu des {\em segmentation fault} et autres erreurs système. \section{Programmation} \section{Difficultés rencontrées} \par Nous n'avons pas eu de grosses difficultés à proprement parler. Nous avions juste quelques restrictions, comme le fait de ne pas pouvoir utiliser de pointeurs absolus, car l'espace d'adressage entre les différents processus n'est pas forcément le m{\^e}me. Ils ont seulement ont un segment de mémoire partagée en commun. Il a donc fallu utiliser les différentes {\em id} des espaces de messages {\em msgSpace}, ou encore des {\em pools} pour pouvoir faire en sorte que les processus peuvent bien accéder aux {\em buffers} situés dans la mémoire partagée. \par Le choix des identifiants ne fut pas simple non plus, car il fallait en changer en fonction des différentes implémentations. Par exemple nous pouvions avoir des identifiants du type ``\verb+/tmp/identifiant+'', qui ne marchaient que sur un type de machines. Sur les autres il fallait en avoir un du type ``\verb+/identifiant+''. Cela nous a amener à faire une distinction de cas et générer un identifiant différent selon que l'on soit sur une machine de type {\em HP-UX}, {\em SunOS} ou {\em Linux}. \par Malheureusement le fait de travailler sur plusieurs types de machines n'était pas seulement g{\^e}nant pour les identifiants, mais également pour créer la bibliothèque. En effet, il faut ajouter plus ou moins d'options à la compilation: soit il faut ajouter \verb+-lrt+, dans un cas ou \verb+-lrt -lpthread+ dans l'autre. \par Ces distinctions se font dans les {\em Makefile}, \verb+/src/Makefile+ et \verb+/test/Makefile+. \par Encore une autre difficulté d{\^u}e à Posix, est la projection de fichier ou {\em mapping} avec {\em mmap}. L'offset peut {\^e}tre aligné sur les pages mémoires sur certains systèmes. Or ceci est emb{\^e}tant lorsque l'on veut accéder à un fichier qui commence n'importe où dans le bloc mémoire. Pour remédier à cela, nous {\em mappons} jusqu'à ``juste derrière le buffer''. Nous autorisons le buffer en lecture/écriture et nous déplaçons l'adresse obtenue au début du buffer.