15 nov. 2012

Windows VS Linux VS Mac, quel OS choisir pour le développement web.

Ça faisait un moment que je voulais lancer un sujet trolesque sur mon blog histoire de faire du trafic facile et aussi pour traiter d'un sujet de fond (c'est bien beau de balancer une astuce de temps à autre, mais parler des vrais sujets de sociétés, c'est quand même autre chose).

J'ai conscience de l'aspect hautement polémique d'un tel billet, en effet dans le milieu informatique tout ce qui touche à un choix tourne souvent à la guerre de religion.

Dans la vie on vous demande souvent de faire des choix, parfois de façon consciente et réfléchie et parfois par habitude ou parce que votre entourage vous y contraint un peu il peut arriver que l'arbitraire se retrouve biaisé. Les systèmes d'exploitation n’échappent pas à la règle et il est difficile de se débarrasser de ses habitudes avec le temps, c'est pourquoi j'ai décidé de partager mon opinion sur les 3 systèmes d'exploitation les plus communs sur lesquels vous pouvez être amené a travailler dans le cadre du développement web (il va de soit que je n'oserai vous conseiller quoi que ce soit dans le cadre de tout autre activité y compris l'utilisation personnelle, chacun ses goûts après tout).

Cet article s'adresse surtout au développeur(euse) débutant(e) qui se poserait éventuellement la question, mais même si vous êtes un vétéran sûr de son choix, ça ne coûte rien d'avoir un peu d'ouverture d'esprit.



Windows

Avouer en 2012 qu'on travaille sous Windows, pour un développeur Web c'est un peu la loose quand même. Votre entourage vous imagine probablement un peu comme ce type (en partie dû au fait que le commun des mortels a encore beaucoup de mal à différencier un développeur d'un helpdesk...). Pourtant j'ai encore la nostalgie de mon Pentium 90, son prompt MS-DOS que j'utilisais lancer Sim City, Doom et autres Civilization... mais aussi pour lancer son interface graphique Windows 3.11... Trêve de nostalgie, Windows reste le système d'exploitation le plus utilisé en entreprise aujourd'hui, de par son omniprésence par le passé (ce qui fait qu'à peu près tout le monde connait les rudiments de son utilisation), mais aussi par ses outils de déploiement, sa compatibilité hardware et logicielle, ses mises a jours centralisées... bref un outil standard. Et on sait avec le fordisme que les entreprises affectionnent tout ce qui est standard.

Si vous êtes un développeur .NET/MSSQL, la question ne se pose même pas : vous êtes sur la bonne plateforme. Vos serveurs partageront un environnement similaire et cela réduit grandement les risques d'erreurs lorsque vous passerez votre code en production. Si vous êtes de l'autre cote de la force, plutôt adepte des outils open-source tel que PHP, Python, MySQL, ça va se corser un peu plus. Non pas que ça soit impossible, vous trouverez toujours des solutions (comme WAMP) pour vous créer un environnement de développement clef en main et facilement exploitable, mais il y a fort a parier pour que votre environnement de production soit une machine sous Linux. Si vous choisissez de développer sous Python/Django par exemple, vous pourrez constater qu'il n'est pas toujours aisé d'installer les librairies dépendantes (j'ai souvenir avoir eu des difficultés avec le driver ODBC/Mysql, alors qu'il s'agit de quelque chose de plutôt courant). A cela s'ajoute les joies du système de fichier, qui est insensible à la casse sous Windows, mais pas sous Unix, les problèmes de permissions, le shell Windows (qui est un peu limité une fois qu'on a goûte à autre chose) bref toutes les petites chose qui perturbe votre quotidien et auxquelles vous vous habituez peu à peu.

Je ne pense pas que Windows soit la plateforme la plus appropriée pour un développeur Web open-source. Il est certes possible de s'en sortir, j'ai moi-même débuté comme ça. Mais en regardant en arrière, j'ai passé beaucoup de temps à régler des problèmes futiles par soucis de compatibilité. Je dirais que la solution idéal si vous vous trouvez obligé de l'utiliser (ou si vous avez peur que le changement soit trop brutal), consiste a s’intéresser aux machines virtuelles comme VirtualBox (un PC dans votre PC). Sur cette machine, vous pourrez installer un système Linux, le faire communiquer avec Windows, et ainsi profiter du meilleur des deux mondes. Bon maintenant dans le monde réel, faire communiquer Windows et Linux n'est pas si évident, même si ça s'est amélioré et que ça va dans la bonne direction. Je reviendrai sur les VM Linux dans le prochain chapitre.

Comme j'ai été un peu dur avec ce pauvre Windows, je lui concéderai deux avantages dans mon travail quotidien :
  • HeidiSQL : le meilleur outil de gestion de base de données à mon gout. Une interface très propre et bien pensée. Quitte a être coincé sous Windows, ça serait dommage de se priver. Malheureusement il n'existe sur aucune autre plateforme et je n'ai jamais vraiment trouvé d’équivalent.
  • Photoshop : (c'est valable pour Mac aussi...), si vous êtes amené a faire un peu de découpe pour des éléments frontend, c'est toujours agréable d'avoir l'outil approprié sous la main.

Linux

Quand on vient de l'univers précédent  Linux peut faire peur : des lignes de commandes ésotériques, une interface austère, des choses compliquées car différentes... Et pourtant, si l'on prends le temps de l'apprivoiser, il s’avère simple (logique) et fiable. Je me souviens de mes débuts, où je développais mes sites sous WAMP et j'uploadais tous mes fichiers sur un FTP et si un problème surgissait une fois en ligne je maudissais le sysadmin, quelques années plus tard me voici en train administrer une batterie de serveurs RHEL... J'ai appris sur le tas, lorsque ma société m'a promis d'embaucher un administrateur système/base de données mais que finalement le réalisme budgétaire m'a contraint à me documenter sur le sujet. Maintenant je suis loin d’être un administrateur confirmé, mais j'en sais suffisamment pour avoir quelque chose qui marche à peu près en production.

Lorsque l'on parle de Linux, on en vient très vite à un nouveau problème : quelle distribution choisir ? J'esquiverai le sujet en disant que ça dépend des goûts  et si vous êtes débutant je vous conseillerai d'essayer de vous faire la main avec Debian ou Centos (sans interface graphique). Pourquoi ne pas ajouter d'interface graphique me direz-vous ? Par soucis de minimalisme principalement, l'objectif d'un serveur Web est de proposer une application en ligne accessible via un browser, et c'est déjà suffisamment compliqué comme ça.

J'en reviens aux machines virtuelles tel que Virtualbox, il s'agit de l'environnement idéal pour expérimenter et faire des erreurs sans impacter votre machine hôte  Dans le pire des cas vous pouvez recréer une nouvelle machine en quelques clics. Je ne m’étendrais pas plus longtemps sur ce sujet, il mériterai un billet a lui tout seul.

Si vous vous sentez de sauter le pas, installez donc une distribution avec interface graphique tel que Ubuntu ou Linux Mint. Je pense que beaucoup de développeurs open-source confirmés choisissent cette option quand ils le peuvent (traduire : quand leur employeur ne leur impose pas Windows). Ainsi vous pourrez développer sur un environnement identique sinon proche de votre serveur de production. A titre professionnel je n'ai pas vraiment la liberté de choisir pour l'instant, et sur ma machine personnelle je pense que Steam et ses promotions me manqueraient trop pour l'instant (cela pourrait changer avec la récente Beta).

Maintenant si vous vous demandez pourquoi les hébergements de type Linux sont plus populaire, cela vient justement du minimalisme, qui fait qu'avec très peu de ressource vous pouvez faire tourner toutes les couches d'une application (sauf si on parle de Java bien sur, petit tacle au passage). Le fait de fonctionner avec le strict minimum aide aussi à la stabilité du système : moins d'applications = moins de complexité = moins de risque de conflits et de crash. De plus avec l’essor du "cloud" (je n'aime pas trop ce gros mot...), vous pouvez louer une machine virtualisée pour un coût très faible (dans les cas extrêmes vous pouvez faire tourner un serveur complet sous Debian avec 64 Mo de ram). Ajoutez à cela l'absence de coût de licence pour les technologies open-source, et je pense que vous pourrez comprendre pourquoi l'offre est actuellement supérieure.

Parce que je pourrais continuer longtemps, je vais essayer de résumer ce que j’apprécie sur cette plateforme :
  • La communauté : quand vous êtes débutant, il y a des tonnes de tutoriels en ligne et en quand un problème survient, une simple recherche Google sur le message d'erreur vous dépannera dans 95% des cas (de toute façon vous êtes débutant, vous ferez donc les mêmes erreurs que tout le monde et les forums sont là pour ça). La communauté du libre est très partageuse par nature, cela ne vous demandera que d'aller vous documenter sur les différents blogs, forums, newsletters...
  • Les gestionnaires de paquets : (yum, apt...) Lorsque vous voulez installer un service ou une librairie, il est souvent inutiles d'aller la télécharger sur un site particulier. A la place le gestionnaire de paquets vous permet de récupérer de façon centralisée la dernière version de votre programme, et s'occupera de sa mise a jour (ce qui réduit les risques de failles sur votre serveur). Apres c'est à double tranchant, dans la mesure où le gestionnaire vous proposera peut être une vieille version de votre programme, dans ce cas, il vous faudra passer par des sources extérieures télécharger un RPM ou au pire des cas compiler a partir des sources.
Et je conclurai avec ce que j'aime moins:
  • La courbe d'apprentissage : je ne vous mentirez pas, c'est toujours dur de sortir de sa zone de confort, mais au final ça paye toujours. Ajouter que vous avez des connaissances en administration système sur votre CV en fera sans doute plus pour vous dans votre carrière de développeur que dire que vous aimez le cyclisme et l’équitation (je n'ai rien contre nos amis les vélos et les équidés). On dit que le désir d’amélioration continue fait la différence entre un développeur et un bon développeur.
  • Les fichiers de configuration et de logs situés ou nommés différemment en fonction des distributions.
  • Les cas particuliers : Quand vous suivez un tutoriel pour installer une librairie ou mettre en place un service, si vous êtes aussi chanceux que moi, il y aura forcement à un moment donnée quelque chose qui ne passera pas comme prévu et qui vous fera dériver sur un problème plus complexe. Exemple: Je veux installer le module xyz-apache pour mon serveur web, mais ce dernier requiert la librairie Perl-bidule-machin-1.4 minimum, or mon système utilise Perl 1.2, ce qui fait que je vais devoir me débrouiller pour upgrader Perl sans casser les dépendances du système (j'invente complètement .. aucun des exemples précédents n'existe vraiment)... Bref, on commence toujours par un truc simple et on finit par recompiler le Kernel avec des options bizarres en suivant les instructions sur un thread de newsletter obscur datant de 2003 (pro-tip: une fois que ça marche, faites vous un joli fichier README en listant toutes les étapes pour être capable de le refaire dans 6 mois).

Mac

Ah, l’église d'Apple du St Steve... Gros sujet à polémique, tant ses utilisateurs les plus fervents ont un comportement proche des témoins de Jéhovah. A titre personnel j'ai acquis un MacBook pro et j’apprécie l'objet : une batterie qui tient bien la route ainsi qu'un trackpad agréable à l'utilisation. Ne vous inquiétez pas, je ne vais pas vous faire le coup de l'utilisateur Windows convertis qui s’aperçoit qu'il n’était pas dans le droit chemin et prêche désormais son entourage (ce sont les pires, comme les anciens fumeurs...).

Je ne m’étendrais pas ici sur les qualités esthétiques ou ergonomiques de ces machines et je me parlerai plutôt de son système d'exploitation et son utilisation au quotidien pour un développeur.

Mac OS est basé sur Unix, ce qui fait que le système de fichier (même si il est différent)  reste très proche de ce que vous retrouverez sur vos serveurs. Une fois la console ouverte vous avez le plaisir de constater que la plupart des ressources nécessaires au développement sont déjà là : serveur Apache, PHP, Python, git... Bref Apple aime les développeurs (en plus les MacBook pro semblent améliorer la créativité, en particulier lorsqu'ils sont utilisés dans un environnement public servant des boissons caféinées vendues à prix d'or).

Tout n'est pas rose non plus, comme je disais Mac OS est basé sur Unix, mais il y a des différences notables. Je listerai ici les problèmes que j'ai pu constater lors de ma courte expérience (j'utilise cette machine depuis moins d'un an seulement) :

  • Pour avoir Make sur votre Mac, il vous faudra installer XCode, qui est un gigantesque package contenant certainement plus que ce dont vous avez besoin.
  • L'absence de touche "Home" et "End" sur le clavier du MBP devient problématique dans VIM et fait perdre beaucoup de temps a faire défiler le curseur (apparemment on peut s'en sortir avec un script...)
  • La configuration du serveur Apache intégré s’avère plus ardue que sur un serveur de production (après ça doit venir de moi, mais je n'ai pas vraiment trouvé ça intuitif, et je ne m'en serais sans doute pas sortis sans tutoriel).
  • Pas de gestionnaire de paquet natif, pour moi c'est un gros point négatif  ça oblige à récupérer les versions un peu partout sur Internet et ça fait perdre du temps pour les mises a jour.
Aucun des problèmes que j'ai cité n'est incontournable, en tapant les bons mots clefs dans Google vous trouverez une solution, mais je trouve dommage d’être confronté à tant de contraintes pour des choses extrêmement simple à effectuer sur un système Linux. Autre point négatif, le virage que prends Mac OS vers une solution cloud, et la forte incitation a utiliser l'Apple store pour gérer ses applications. Je sais que c'est un peu hypocrite de ma part de critiquer l'Apple store alors que je suis un fervent utilisateur de Steam, mais le processus de validation obscur d'Apple pour décider des applications disponibles, les conditions d'utilisation encore moins compréhensible font qu'il est légitime de s’inquiéter de ce virage, qui prend la direction opposé à la philosophie du logiciel libre. Voila, j'avais promis de ne pas troller mais c'est difficile sur un tel sujet. Maintenant, je comprends aussi pourquoi la plupart des développeurs travaillant dans une startup "cool" ont choisi un MacBook pro comme outil de travail, niveau hardware c'est une bonne machine, et en y passant le temps ont peut se confectionner un environnement de développement efficace (même si c'est plus contraignant à mon gout).


Voila qui conclu ce long billet, encore une fois il s'agit de mon opinion personnelle et ce dans le cadre du développement web. Il faut de tout pour faire un monde, je pense qu'on prend vite des habitudes et qu'il est difficile d'en changer par la suite, pourtant il est toujours intéressant d'essayer autre chose parfois, histoire de se faire une opinion plutôt que lire ce que d'autres écrivent sur Internet.

3 commentaires:

  1. yop, pour vim je te conseil les touche 0 _ et $ pour aller respectivement au début de la ligne, au début de la ligne mais après les espaces et à la fin de la ligne, touches qui devraient remplacer avantageusement home et end. (bien que j'ignore ou elles sont placées sur un clavier mac)

    RépondreSupprimer
  2. Seblez03:00

    HeidiSQL fonctionne très bien sous Linux avec wine ;)

    Sous OSX, je ne suis pas allé jusqu'à tester la possibilité d'un trio "macports / wine / HeidiSQL" ou "Homebrew / wine / HeidiSQL", par contre il existe SequelPro qui fait plutôt bien le job aussi.

    RépondreSupprimer
  3. nicod_07:49

    Retour d'expérience très ouvert, merci.

    Le point qui me fait apprécier Linux : le choix de l'environnement graphique (Gnome, Unity, Cinnamon, KDE) et la personnalisation à l'extrême : ça ressemble à du tuning de nerds pour certains, j'y vois plutôt la possibilité d'adapter l'environnement à ses habitudes (productivité).

    Et 100% d'accord pour HeidiSQL, c'est le meilleur GUI Mysql que je connaise, je le fais tourner sous Wine.

    RépondreSupprimer

Merci pour votre participation constructive