Vais-je tromper mon Mac avec Windows 10 ? (Windows Subsystem for Linux)

A la manière d’un bon artisan, chaque développeur et développeuse se crée au fil des années des habitudes et préférences vis-à-vis de ses outils de travail.

Comme beaucoup à OCTO, je travaille sur un Macbook Pro depuis plusieurs années. La flexibilité du système, l’implémentation native du Bash, sa certification POSIX, sa simplicité et sa stabilité à toute épreuve ne m’ont pas donné envie d’opter pour une machine sous Linux ou Windows jusque là.

Cependant, il est important pour un développeur d’être averti des nouvelles options qui s’offrent à lui au fil des évolutions techniques et des choix proposés par les grands noms de l’informatique. Et Microsoft en fait partie.

 

Windows 10 peut-il offrir un environnement de travail comparable à celui que j’ai sur mon Mac ?

Mais pourquoi changer ?

La sortie de la génération de Macbook Pro mi 2016 déçoit :

Après 500 jours sans mise à jour hardware, quid des nouveautés ? Malheureusement, pas grand chose, hormis de notables régressions :

  • Un nouveau clavier qui est loin de faire l’unanimité,
  • Un trackpad trop grand,
  • Une “Touchbar” peu utile, voire gênante pour les professionnels,
  • Une connectique famélique (4 ports USB-c seulement),
  • Et Jean Passe (un ami).

De plus, la machine semble présenter des problèmes structurels.

« Ceci est une révolution »

Côté software, Apple n’a quasiment pas fait évoluer son système depuis plusieurs années, pourtant celui-ci a ses défauts, notamment côté fiabilité, comme nous l’a prouvé l’update d’Avril 2018 en occasionnant des pannes.

Pour expliquer cette baisse d’intérêt d’Apple pour le Mac, il faut garder en tête que celui-ci  ne représente que 10% du marché d’Apple, contre 75% pour l’univers iOS (iPhone/iPad).

Depuis 2016, Apple donne donc priorité aux équipes iOS, quitte à élaguer l’équipe Mac de ses développeurs, phénomène très bien expliqué dans cet article.

C’est ce constat qui m’a donné envie de regarder un peu ce qui se passait dans le monde Microsoft, son concurrent historique.

Et il s’en passe des choses chez Microsoft depuis 2016 !

Quid de Microsoft ?

Fin 2017, quelques semaines après la sortie du dernier Macbook Pro, Microsoft renforce une fonctionnalité présente dans Windows 10 depuis 2016 : le WSL (Windows Linux Subsystem).

Késako ? Il est désormais possible sous Windows 10 de monter une couche de compatibilité Linux.

En d’autres mots : du Bash sur Windows, sans virtualisation ni dual-boot.

Comme l’a été la sortie de l’éditeur de texte Visual Studio Code, la mise en open source du framework web .Net et le rachat de GitHub en 2018, cette fonctionnalité est une nouvelle ouverture de Microsoft à l’open source et au monde Linux depuis l’arrivée de Satya Nadella aux commandes de Microsoft en 2014.

 

Satya Nadella, prononçant une voyelle

 

Alors, est-ce que la solution proposée par Microsoft peut vraiment séduire un développeur sur macOS comme moi ? Nous allons voir !

 

Windows 10 et WSL (Windows Subsystem for Linux)

Va Windows 10, sur un malentendu, ça peut passer !

 

C’est parti pour du sous-système Linux sur Windows !

 

La machine utilisée pour ce test est une tour PC (i5 4970k, 8 go Ram avec un SSD). Une version récente de Windows 10 y est installée (Avril 2018).

On va donc tenter de reproduire un environnement semblable à ce que j’ai sur mon Mac :

Rspec, Capybara pour les tests unitaires côté Rails

Installation du WSL

Il existe une solution via l’interface graphique pour installer le sous-système, mais Microsoft propose depuis peu une ligne de commande pour activer la fonctionnalité en PowerShell (l’invite de commande de Windows) :

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

Une fois la commande réalisée, rendez-vous dans le Microsoft Store.

On va utiliser ce store pour installer une distribution Linux soutenue par Microsoft !

A ce jour, Microsoft propose 5 distributions Linux :

On va jouer la sécurité en prenant Ubuntu 16, première distribution supporter par le WSL de Microsoft.

 

L’application est PEGI 3. Ne laissez pas votre enfant en bas âge installer le sous-système Linux tout seul ! #tousresponsables

 

Voilà, le sous-système est créé.

 

Pour le terminal, j’ai choisi le logiciel Hyper, un terminal basé sur Electron (NodeJs). Il jouit d’une excellente réputation sur Windows, et est facile à paramétrer.
Pour lancer Bash par défaut sur Hyper, il suffit de modifier le fichier de configuration hyper.js et d’y ajouter cette ligne :

On ouvre Hyper et hop ! Bash is in da place !

On se retrouve avec toutes les commandes d’Ubuntu.

Commence alors l’installation de tous les outils nécessaires à mes projets web via apt-get :

Git, Node, Ruby, RVM.

J’installe un projet Ruby On Rails sur la machine et, après quelques minutes, j’obtiens le graal du développeur Rails : un Bundle install qui passe.

J’ai déjà eu des soucis à l’installation de certaines Gem Ruby sur MacOS (coucou LibV8 et  Nokogiri). Ces mêmes problèmes sont rares sur Linux. Sur ce sous-système, c’est comme sur un “vrai” Linux. Donc pas de souci particulier  !

Installation de PostgreSQL

 

J’ouvre facilement le projet avec Atom sur Windows 10, alors que le projet a été cloné avec Git du côté Linux (WSL). L’arborescence de fichiers est parfaitement partagée entre les deux systèmes :

 

 

Je configure mes bases de données de tests, je souffre alors de quelques freezes du WSL qui m’obligent à quitter Hyper de force (ça tourne mal).

Les performances

Nous allons lancer une partie des tests unitaires présents sur le projet Rails pour vérifier le niveau de performance.Avant d’analyser les résultats, il faut savoir que la machine PC possède un processeur comparable au i7 4870HQ de mon Macbook Pro Retina de 2015.

Benchmark par cpuboss.com

 

Sa puissance brute est quasiment identique mais le PC ne possède pas la fonctionnalité d’hyper Threading de l’i7 du Macbook.

Pour que le test soit équitable, je vais forcer le Macbook à 1 thread, pareil sur le PC. Les deux machines sont équipés d’un SSD haut de gamme, celui du Mac est cependant plus performant.

 

Lançons les tests !

 

Et là… c’est la douche froide

La différence de performance est anormalement colossale :

Le Macbook a réalisé le jeu de test en 31 secondes, contre 138 pour le PC.

 

Des soucis de performance sur WSL ?

 

Pas tout à fait, la lecture de fichiers dans le sous dossier /mnt/… est lente car ce sont ces sous-dossiers qui sont lus à la fois par le WSL et le système de fichiers de Windows.

Malheureusement, cette même double-gestion cause des baisses de performance non-négligeables.

La lenteur de la gestion de fichier sur le WSL serait dûe à la protection en temps réel offerte par Windows Defender (activé par défaut).

Lors de notre séance de tests sous Rspec-Rails, très gourmande en requête I/O sur le SSD, nous voyons même le processus Anti-malware de Windows Defender “chiper” la première place devant Ruby !

 

Supprimons cette protection dans les paramètres de Windows Defender :

 

 

Je vous déconseille cependant de désactiver cette fonctionnalité, particulièrement efficace pour protéger votre machine de logiciels malveillants.

Revenons à nos moutons numériques et relançons les tests :

Enfin, les performances sont comparables à celles de mon Macbook Pro (en jaune dans le graphique), les quelques secondes perdues peuvent s’expliquer par un SSD plus performant sur la machine d’Apple :

 

 

Verdict ?

Ce que je retiens de cette expérience, c’est que Microsoft prend la bonne voie. Cette solution semble promise à un avenir radieux !

Lors de mes essais, seuls deux points faibles sont venus atténuer mon enthousiasme :

Premièrement, en choisissant le WSL, on accepte de “jongler” entre deux mondes : celui du terminal Linux et l’interface graphique de Windows.

Il faut le reconnaître, Microsoft a fait un travail remarquable. L’installation est facile et la configuration d’un Bash digne de ce nom est très rapide. Mais je ne peux qu’imaginer les  problèmes de configuration que cela doit impliquer sur des stacks plus complexes qu’une simple application Rails.

Deuxièmement, les freezes pardi !

En quelques jours, j’ai eu plus de freezes de mon terminal que pendant plusieurs années sur mon Mac. La solution est très jeune (2016) et s’améliore à chaque mise à jour, mais sa stabilité n’est pas encore au niveau de ses ambitions.

Cependant le WSL reste pour moi une bonne surprise.

Il y a quelques années, coder sur Windows pour un développeur habitué à Linux ou Mac revenait à se résoudre à utiliser des outils comme Cygwin/Babun, solution loin d’être sexy. De plus, coder sur Windows c’était apprendre une gestion différente des variables d’environnements, de gestion de droit, etc….

Aujourd’hui, Microsoft offre une solution beaucoup moins contraignante qu’un environnement Windows, sans l’installation parfois chaotique d’une machine Linux. En 10 minutes, on peut avoir accès à un (vrai) Bash Linux et y installer ses outils préférés facilement.

10 commentaires sur “Vais-je tromper mon Mac avec Windows 10 ? (Windows Subsystem for Linux)”

  • Et pourquoi pas un linux natif? Au moins les perfs sont là. Encore faut-il pouvoir s'intégrer au SI des entreprises et c'est là où le bas blesse bien souvent.. Mais si plus de devs choisissaient cette solution on aurait progressivement une meilleure acceptation dans les grandes entreprises qui ne voient que par Microsoft.. Certes c'est une croisade mais éthiquement (et dans la pratique) elle en vaut la peine..
  • Attention en Xenial quand j'utilise GIT les permissions sur les fichiers ne sont pas forcement respectees lors d'un git checkout et ca m'a casse des gros build.
  • Quitte à aller voir ailleurs, pourquoi par vers Linux ? Bash natif, performances élevées, et Jean Passe (apparemment tu le connais aussi).
  • en 10 minutes tu as une distro GNU/linux installée ..
  • L'article traite du WLS juste par curiosité, Linux est bien entendu une super solution pour le dév web !
  • @Yanik Git ne préserve pas les permissions sur les fichiers, dans tout les cas. La seule chose que Git préserve est le bit d'exécution (`chmod +x`). Donc les permissions sont à régler dans le script de ta CI/CD, sinon tu risques de te retrouver avec des permissions différentes sur les différents environnements.
  • "La flexibilité du système, l’implémentation native du Bash, sa certification POSIX, sa simplicité et sa stabilité à toute épreuve ne m’ont pas donné envie d’opter pour une machine sous Linux" C'est moi ou quelque chose cloche dans cette phrase... :)
  • Je pense que les gens ne réfléchisse pas trop dans les commentaires. "Pourquoi pas que linux bla bli bla". Je suis développeur symfony, mes postes de travail son sous win 10 et nous avons des serveurs locaux sous debian qui execute le code. Les postes de travail deviennent donc juste des terminaux. Et quand nous devons embarquer du boulot en déplacement, et bien nous utilisons l'environnement windows qui dans ce domaine d'application ne change finallement pas grand chose., bref on s'adapte très bien surtout avec des outils comme docker ultra mature maintenant, mais on pourrait faire mieux en restant dans le même environnement, même commande du bash, etc. c'est clairement mieux je suis d'accord et j'en rêve. C'est la que le windows subsystem est juste ultra prometteur! Mais pourquoi ai je donc besoin d'un windows ou d'un mac, c'est vrai, un développeur ça ne fait que pisser de la ligne de code toute la journée...Ah tu fais un peu de video, bah n'utilise pas premiere pro, réapprend tout sur un soft pourri et 10 fois moins complet...Photoshop,illustrator ???? Mais qu'est ce que tu t'en branles utilise donc gimp, personne ne l'utilise en entreprise mais ce n'est pas grave, sinon utilise wine ça va ramer, mais tu t'en branles t'es développeur, c'est trop fun....Tu veux faire une pose et te défouler sur le dernier jeu à la mode exploitant ta putain de carte graphique? Mais putain mais joue au solitaire, c'est topissime! La suite office de microsoft ? Utilise openoffice il fait le job,c'est excessivement laid et tu ne l'aimes pas du tout tellement c'est mal foutu. Mais tu es développeur tu n'as pas a préférer la suite office de microsoft, d'ailleurs ca n’écrit pas un développeur...Bref avec windows subsystem, windows devient un véritable couteau suisse de dingue. Encore quelques soucis à résoudre mais j'ai été moi aussi impressionné a quel point cela fonctionne bien, en revanche je n'ai eu aucun freeze pendant mes tests. Le point le plus problématique pour moi sont les accès disque encore trop lents, mais c'est vraiment prometteur. De mon point de vu, c'est exactement ce qu'il manquait à windows..
  • Bonjour Je m'intéresse aussi à WSL qui me semble être un bon compromis quand on a essentiellement accès à écosystème Windows corporate. Est-il possible d'utiliser Docker Linux sous WSL ? J'ai vu quelques tutoriaux pour que Docker sous WSL exploite l'agent Docker sous Windows. Pas encore eu l'occasion d'essayer. Quelqu'un a-t-il une expérience/tutoriaux à partager ? Merci ;-)
  • Pour des utilisateurs contraint au niveau corporate à l'écosysteme Windows, WSL constitue une bonne surprise. C'est clairement en évolution. Quelqu'un a une expérience et un feddback pour faire fonctionner : - VSCode depuis WSL ? - Docker sous WSL. J'ai vu des tutoriaux pour que Docker WSL s'appuie sur les services Docker Windows (ouverture des ports). Pas encore essayé. Un feedback ou tutorial à conseiller ?
    1. Laisser un commentaire

      Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *


      Ce formulaire est protégé par Google Recaptcha