Restez à jour avec Mono, MonoDevelop et MonoGame sous Linux

Utiliser un environnement de développement .Net/Mono à jour sous Windows ou Mac OSX est relativement facile, sous Windows on a directement le Framework .Net proposé par Microsoft et sous Mac OSX il y a des paquets officiels pour Mono. Cependant sous Linux c’est différent.. Effectivement le projet Mono est très mal vue pour des raisons plus ou moins discutables et un des plus gros reproche que l’on puisse faire à certaines distributions populaires est de ne pas proposer de paquet à jour. Par exemple sur la dernière version beta d’Ubuntu, Mono est encore en version 2.10 et MonoDevelop en 3.x. Il faut aussi voir que certains utilisateurs ne mettent pas à jour leurs système (Le cas des LTS par exemple) et les ancienne distributions là aussi ne se mettent pas à jour. Pour MonoDevelop c’est la même chose, sous Windows et Mac OSX, il y a des paquets officiels, mais pas sous Linux où il faut se contenter des paquets par défaut qui sont encore une fois peut à jour (voir totalement vieux…). Heureusement certaines distributions telles que Mageia, Arch Linux ou Gentoo proposent des versions à jour via les canaux de mise à jour stable ou testing.

J’ai constaté que beaucoup de développeurs de la communauté .Net/Mono sous Linux utilisaient Ubuntu ou un dérivé d’Ubuntu (j’utilise moi même souvent une Kubuntu). Ainsi je vais vous proposer quelques pistes pour rester un maximum à jour avec votre environnement de développement afin de pouvoir profiter des dernière innovations de Mono et MonoDevelop.

1. La mise à jour de Mono

1.1 Mise à jour sous Ubuntu (PPA)

La première chose à faire est de regarder quelle version de Mono est installée sur votre système pour cela ouvrez un terminal et tapez la commande suivante :

yann@fenixis:~$ mono --version
Mono JIT compiler version 3.0.7 (tarball Wed Mar 20 11:53:53 UTC 2013)
Copyright (C) 2002-2012 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
        TLS:           __thread
        SIGSEGV:       altstack
        Notifications: epoll
        Architecture:  amd64
        Disabled:      none
        Misc:          softdebug 
        LLVM:          supported, not enabled.
        GC:            Included Boehm (with typed GC and Parallel Mark)

Mise à jour du 19/11/2013 : Un nouveau dépôt est disponible et permet d’avoir Mono 3.2 et MonoDevelop 4.2 en une seule ligne de commande. Il vous faudra (u)buntu 13.04 minimum et 14.04 maximum (on est large jusqu’à la prochaine mise à jour).

sudo add-apt-repository ppa:inizan-yannick/mono
sudo apt-get update
sudo apt-get install monodevelop

Autre dépot ((u)buntu inférieur à 13.10)

A l’heure où j’écris cet article la dernière version stable de Mono est la 3.2.3 et comme vous pouvez le constater sur mon retour console je suis en 3.0.7. Par défaut sur Ubuntu c’est la version 2.10.x qui est proposée. Vous pouvez mettre à jour votre version via le dépôt PPA suivant :

sudo add-apt-repository ppa:borgdylan/ppa
sudo apt-get update && sudo apt-get dist-upgrade

Une fois à jour vous serez enfin sur la branche 3.x et vous pourrez utiliser les dernières fonctionnalités de .Net 4.5 comme par exemple la programmation asynchrone. Vous aurez aussi de meilleurs performances car le runtime Mono gagne en maturité à chaque nouvelle version majeur.

1.2 Mise à jour par les sources

La mise à jour par les sources à l’avantage de vous donner la dernière version, cependant il faut connaître un peu l’environnement car il y des paquets de développement obligatoires à avoir. Pour compiler les sources c’est assez simple, rendez vous sur la page github du projet Mono et suivez les instructions du fichier README.

2. Mise à jour de MonoDevelop 4.x

MonoDevelop est le seul environnement de développement intégré pour faire du C# sous Linux. Il s’améliore lui aussi de version en version et je dois admettre que la version 4.x est devenue agréable à utiliser. Elle est beaucoup plus stable et les outils qui viennent avec sont redoutablement efficaces. Pour MonoDevelop il n’y a pas de paquets magiques alors il faut compiler les sources. Rassurez vous ce n’est pas une tâche complexe, vous trouverez toutes les informations nécessaires sur la page github du projet. Je vous recommande de configurer le script de construction pour que l’installation se fasse dans /opt, cela vous permettra d’avoir la dernière version et la version des dépôts en même temps.

# Récupération des sources et des modules
git clone https://github.com/mono/monodevelop.git
cd monodevelop
git submodule update --init

# Construction
./autogen.sh
./configure --prefix=/opt/monodevelop
# Remplacez le chiffre 4 par le nombre de coeurs logiques de votre CPU
make -j4 
sudo make install

Si la commande configure échoue c’est qu’il vous manque un paquet (Gnome-sharp, gtk-sharp2-dev) alors prenez le temps de regarder ce qui manque et faites une recherche dans votre gestionnaire de paquet pour l’installer. Il est probable que vous ayez à installer mono-gmcs et gnome-sharp2.

MonoDevelop 4 sur KDE
MonoDevelop 4 sur KDE

Pour lancer l’EDI tapez la commande suivante

mono /opt/monodevelop/lib/monodevelop/bin/MonoDevelop.exe

Si vous utilisez KDE comme bureau vous serez victime d’un bug lié au thème oxygen-gtk et vous ne verrez pas votre code dans l’éditeur. C’est un bug déjà rapporté sur le gestionnaire de bug de KDE,  il est possible de contourner ce problème en lançant MonoDevelop comme suis :

OXYGEN_DISABLE_INNER_SHADOWS_HACK=1 mono /opt/monodevelop/lib/monodevelop/bin/MonoDevelop.exe

Vous avez désormais la dernière version de MonoDevelop ! Avouez que le look est beaucoup plus agréable que cette vielle version 2 hein 😉

3. Et pour finir MonoGame

Le Framework MonoGame bouge beaucoup et il est préférable de garder une version à jour pour ses développements. Encore une fois il n’y a pas de paquet tout prêt mais la compilation des sources est vraiment facile. De plus sous Linux on a maintenant le choix entre la version OpenTK ou SDL2. Je vous recommande vivement la version SDL2 pour les raisons suivantes :

  • Pas de problèmes d’affichage (plein écran, résolution, etc…) ;
  • La gestion des pad est fantastique ;
  • On peut lire des vidéo en ogv via Theora# ;
  • On peut lire des musiques et des sons au format wav et ogg sans passer par des xnb ;
  • SDL2 à l’avantage d’être beaucoup plus à jour que OpenTK ;

Cependant il faudra passer par la case compilation des sources de SDL2, SDL2_image et SDL2_mixer et copier les fichiers libSDL2-2.0.so.0 SDL2_image-2.0.so.0 et SDL2_mixer.2.0.so.0 à côté de votre exécutable, sans oublier de copier les fichiers SDL2#.config et Theora#.config. C’est un mal pour un bien croyez moi, une fois que cela est fait vous aurez une version de MonoGame qui fonctionne vraiment sous Linux. D’ailleurs un tas de jeux l’utilise déjà, je citerais FEZ par exemple. Au passage je recommande cette version pour tout vos projets Desktop car avec une seule et même solution vous travaillez en réalité pour 3 plateformes (Linux, Windows et Mac OSX).

Contenu dossier avec l'exécutable
Contenu dossier avec l’exécutable

3.1 MonoGame standard (OpenTK)

git clone https://github.com/mono/MonoGame.git
cd MonoGame
git checkout develop
git pull origin develop
git submodule update --init

Ensuite ouvez la solution MonoGame.Framework.Linux.sln avec MonoDevelop et compilez le projet en mode Release. Les fichiers dll se trouveront dans bin/Linux/Release. N’oubliez pas le fichier opentk.dll.config, il determine le mapping des bibliothèques OpenAL et OpenGL que OpenTK utilise.

3.2 MonoGame SDL2

git clone https://github.com/flibitijibibo/MonoGame.git MonoGameSDL2
cd MonoGameSDL2
git submodule update --init

Là c’est la même chose sauf qu’il faut ouvrir la solution MonoGame.Framework.SDL2.sln, les fichiers DLL se trouverons dans bin/SDL2/Release. N’oubliez pas de récupérer aussi les fichiers SDL2#.config et Theora#.config, ils sont obligatoires car il définissent le chemin des bibliothèques natives à appeler.

Pour le moment la version SDL2 est sur un dépôt à part (c’est un fork) mais sachez qu’il y a actuellement une pull request visant à amener ce port dans la branche officielle de MonoGame. D’ici quelques semaines ça devrait être effectif.

4. Conclusion

Vous voilà totalement à jour normalement, ces opérations ne sont pas à faire tous les jours mais à chaque fois qu’un gros changement aura lieu dans un de ces projets. Être à jour vous permet de profiter de la stabilité et des dernières avancés. Pensez aussi à jeter un œil aux différents forums de discutions en plus des logs de commit afin d’être encore plus à jour sur les choses qui vont arriver prochainement. Enfin voici quelques liens pour finir, à consulter tous les jours (bon ok peut être pas 😉 ).