Mircrosoftus defectus

Les tristes défauts organisationnels de Microsoft, et le malheureux impact qui s’en suit : la majorité des utilisateurs de PC de la planète sous-utilisent leur matériel.

Dans l’article suivant:

I Contribute to the Windows Kernel. We Are Slower Than Other Operating Systems. Here Is Why.” (http://blog.zorinaq.com/?e=74)

Un développeur de chez Microsoft nous explique qu’en gros, les choses se passent exactement comme dans toutes les entreprises de software : plutôt mal.

Et que cela explique pourquoi la personne à qui il répond a remarqué que :

…generally acknowledged fact that Windows is slower than Linux when running complex workloads that push network/disk/cpu scheduling to its limit

Je vous laisse lire le tout, c’est édifiant, vous pouvez aussi suivre l’article original sur hackernews lié par l’auteur.

Donc, chez Microsoft, il y a plusieurs défauts : notamment le fait de ne pas pouvoir toucher aux parties du code les plus critique (le noyau, le filesystem…) de manière spontanée, car ça énerve tout le monde. Le boss en premier, puis l’équipe de test derrière. Avec de jolies perles bien scandaleuses telles que:

Our low performance is not an existential threat to the business

Incremental improvements just annoy people

…[if you] tell your lead about how you improved performance of some other component on the system, he’ll just ask you whether you can accelerate your bug glide

La conclusion est donc la suivante : Microsoft est devenue paresseuse. Une entreprise sans motivation, qui peine tout juste à innover suffisamment pour se maintenir à flot.

Elle est tombée dans le confort du bug fixing crunch. Malheureusement, en tant qu’ancien débuggeur chez e-on software de Vue 7 (et suivants), un logiciel en C++ de plusieurs millions de lignes, comme Windows, je ne sais que trop bien comment on tombe la dedans. Sauf que c’est de la facilité, de l’oubli, et de la procrastination. C’est dangereux pour l’entreprise car la stabilité se fait au détriment de la performance dans beaucoup de situations. Et pendant ce temps aucune nouvelle fonction ne se fait adopter, et le code continue de grandir sans aucune nouveauté apparente. Et c’est l’innovation qui apporte du cashflow, et non pas les bugfixs. Il faut trouver un équilibre.

Le deuxième problème que je vois est celui de la loi de Wirth : le software bloat.
http://en.wikipedia.org/wiki/Software_bloat
Traduis par l’article Français de la même page par boufficiel, inflagiciel ou obésiciel. Jolis termes je trouve.

Le résultat, 80% de la planète utilise aujourd’hui un système écrit majoritairement en 1993 et ensuite greffé par dessus de tout un tas de chrome et de laque pour faire briller.
Cela ne posait pas trop de problème jusque vers 2004 environ. Car d’autres OS ont continué a évoluer, et surtout se renouveler, dans leur base, le noyau. Ainsi linux a vu apparaître de superbes modifications, comme les ticks dynamiques, le completely fair scheduler, des optimisations microscopiques mais fréquentes dans divers coins reculés, qui sont dangereuses à accepter mais si la communauté n’en a pas peur, elles se font amortir a l’usage et le futur s’éclaircit.

Voila ce que l’on veut pour windows:
http://www.silicon.fr/linux-200-lignes-de-code-qui-changent-presque-tout-42949.html

On veut aussi PowerTOP, un utilitaire mis au point par Intel pour mesurer les taux de réveils du processeur, quand on a un portable ou une machine sur batterie, optimiser la veille processeur est primordial. Windows par exemple tue la batterie 20% plus vite qu’un autre OS puisque personne ne s’occupe de nettoyer le code chez eux.

http://www.extremetech.com/computing/169055-why-do-windows-pcs-have-such-terrible-battery-life-compared-to-mac-and-ios
“That’s Apple’s OS X delivering almost twice the battery life of Microsoft’s Windows 8, on almost exactly the same hardware. Go figure”
Les journalistes ne le savent pas, mais la durée de la batterie est liée à l’efficacité du système a ne pas se réveiller pour un oui ou pour un non. Ce qui est directement lié au bloat justement. Sans parler de la gestion des context switchs, et de la quantité de bloat qui doit être exécuté à chaque tick noyau.

Parlons ingénierie, j’ai déjà été amené à lire des articles de génie logiciel sur le refactoring, et plusieurs personnes intelligentes ont déjà noté que le but ultime d’un mainteneur, n’est pas de rajouter des lignes de code mais bien au contraire d’en supprimer.

Il y a des milliers d’articles à ce sujet par des personnes qui ont réalisé ce fait simple:
http://blog.codinghorror.com/the-best-code-is-no-code-at-all/
http://mikegrouchy.com/blog/2012/06/write-less-code.html
etc etc etc etc

Le problème : Microsoft, 77 Milliards de dollars de revenus par an, plus de 100.000 employés, n’a PAS compris cette règle, alors que le génie logiciel est leur cœur de métier !
Incroyable, donc la conclusion ici est que l’entreprise la plus riche du monde dans leur domaine, ne sais pas vraiment son travail. Ça fait peur !

Mes recommandations pour Microsoft :

Windows peut être sauvé, après tout, ce n’est pas un si mauvais OS. Sauf qu’il va falloir le nettoyer sérieusement.

– Laisser tomber les problèmes de rétro-compatibilité native, quel intérêt est-ce que ca a ? Il est bien plus propre de fournir des machines virtuelles faisant tourner les versions précédentes de Windows comme partie intégrante des nouvelles version de Windows. La preuve flagrante que pour moi c’est totalement inutile, est que ca ne fonctionne même pas. Avez vous essayer de faire fonctionner Duke Nukem 3D sur un windows récent ? Même un core i7 à 3Ghz ne peut pas le faire marcher correctement alors qu’un pentium 75 de l’époque y arrivait.
Heart of Darkness ? Un jeu français des années 90, il ne marche plus sous aucun NT apparemment parce que le processus explorer vient lui casser son mode graphique. CQFD à mon avis.

– Optimiser sérieusement tout ce qui peut l’être dans le noyau. Surtout les context switch; le scheduler (s’inspirer du Completely Fair Scheduler de linux serait indiqué); l’allocation mémoire sur le tas doit être entièrement recodée et le code de l’ancienne, jeté. Utiliser des algorithmes lock-free partout où cela a du sens, comme l’allocation, ou les opérations de liste de processus, d’ouverture/fermeture de fichiers…

– Jeter NTFS complètement, et adopter un nouveau système léger, efficace et surtout complètement libre pour permettre l’Universal Mass Storage de bien marcher sur toutes les plateformes. Et par pitié ne jamais laisser un gars du marketing ouvrir sa grande bouche pour dire quelque chose du genre “ah ! profitons-en pour mettre des fonctions de reparsing vers le cloud” ou autre imbécillités de la sorte pour suivre le hype et qui ne ferais que rajouter du bloat. Un filesystem doit être le plus légé possible. Sous Unix on a pas 50 coches de permissions à gérer par fichier/dossier, il n’y a que +x+r+w pour user:group:others. Pourquoi sous Windows il faut une GUI énorme avec 50 cases ? Pourtant je pense que le sens commun dirait qu’un Unix standard est plus sécuritaire qu’un Windows standard. Encore un exemple de bloat inutile.

– Rebrander : Laisser tomber la marque Windows, fournissez la compatibilité windows au travers des machines virtuelles (fournies avec les versions pro mettons).

– Jeter la vieille Win32 API complètement à la poubelle. Faire une nouvelle.
Pourquoi faut il environ 20 caractères sous Unix pour lancer un nouveau programme (fork & execv: 2 fonctions)
Alors qu’il en faut 720 avec l’API Windows:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms682512(v=vs.85).aspx
Non mais sérieux ?

– Complètement virer MFC.

– WPF est a discuter, clairement quelqu’un microsoft voulait encore rajouter du chrome et du poid a l’univers Windows et a dit, “regardez Google ils ont une belle techno d’UI basée sur xml, faisons pareil” et WPF est née.
Et puis elle est morte. Et puis en fait non. Lire: http://www.riagenic.com/archives/963 (“The consequences of declaring WPF is dead”), petit cafouillage.
L’idée de base est bonne, c’est une techno propre. A mon avis il faut garder ce genre de choses mais il va falloir travailler à rendre le simple plus simple. Car avec WPF, le simple est devnu compliqué alors que le compliqué d’avant est devenu trivial. Par exemple faire une interface prototype en 3 clicks était possible avec Forms, mais on ne pouvais pas lui appliquer des “skins” ni la redimensionner a souhait, ou avoir un placement automatique des widgets. Avec WPF l’inverse est vrai.

– Refactorer totalement le modèle des formats d’executables a deux vitesse : un avec fenêtre et l’autre en mode console. Ce genre de choses, c’est du bloat inutile. Il faut unifier les sorties console comme cela se passe sous linux. Plus d’inepties du genre OutputDebugString s’il vous plait !

– Arrêter de renommer tous les concepts adoptés pour leur donner la Microsoft touch. Employez les bons termes bon sang. C’est simple, on dirait que Microsoft découvre l’univers de l’informatique 20 ans après tout le monde. Pondent une roue carrée, et ensuite dans le futur essaient de la rendre a bords arrondis en rajoutant du bloat sur les côtés carrés.

– Jeter le registre. Et vite. Pourquoi forcer une base de donnée gérée par le système pour les applications ? C’est du communisme dans le mauvais sens du terme.

– Arreter COM et autres horreurs de bloat qui ne servent qu’a construire un monopole et faire des jolis buzzword qui sonnent technologique, tout en construisant dans le fond une grosse toile d’araignée pour que les développeurs utilisent trop facilement des fonctions qui sortent des frontières de leur système (mettons .net) et deviennent d’un coup dépendants de la plateforme sans s’en rendre compte.

– Jeter Power Shell, c’est aussi du bloat. Il aurait été bien plus judicieux de faire une console flexible avec des implémentations ouvertes aux third parties. De la même manière que zsh peut remplacer bash. Et que rxvt peut remplacer gnome-terminal. L’intégration serrée avec .NET était presque une bonne idée dans le sens de l’unification, si seulement un nouveau langage de shell, affreux qui plus est, n’étais pas apparu avec !

– Visual Studio doit être refait, trop de bloat, trop de lenteur, trop de blocages interminables qui entrainent le système entier avec eux pendant de longues minutes. Et parfois, seulement pour attendre le time-out d’une critical section globale dans le système de rasterization des polices (!! foutage de gueule puissance 8 Microsoft…)
Le compilateur est excellent, il faut le garder, le deboggeur aussi, a garder. Mais intellisense il faut arrêter le massacre, arrêter les idioties liées à l’interface. On en a rien a cirer que ce soit rendu avec WPF en Direct2D, ca bouffe du GPU et ca cause des blocages, personne n’en veut.

– La nouvelle .NET 4.5 est une bonne chose (bonne JIT), a garder, C# aussi c’est presque propre et ca poutre bien, a garder. La standardisation doit être poussée un peu, bien qu’elle soit déjà en bonne voie aujourd’hui.

– Windows RT, encore un exemple de Microsoft dans leur position de copieur avec complexe d’infériorité, ils ont pris les concepts d’android : sandboxing, activités plein écran, permissions par application, tâches empilées… et tentent de rattraper le train sans rien inventer, a part Metro.

– Metro est la seule invention de la part de Microsoft depuis… ouais. Personne ne l’aime malheureusement. A part les designers idéalistes qui trouvent que le skeuomorphisme est une aberration, et que le temps cerveau passé a décrypter des icones unicolores et symboliques est gagné pour d’autres choses “productives”. Ca à l’air beau comme ca, mais le résultat est affreux et contre productif. J’espère de tout mon moi que ce mouvement va vite crever.

Microsoft tombe dans un classique, la peur du refactoring. La peur du changement. Microsoft est dans une bonne position, ils ont un cash flow énorme qui peut leur permettre de se jeter dans un grand cycle de développement comme ce que mes propositions impliquent. Et s’ils ne décident pas rapidement de se jeter a l’eau, ils vont couler doucement emportés par leur monstrueuse agrégat de bloat qu’ils se traînent et qui ne va bientôt plus pouvoir flotter. Car les gens en ont marre.

Voir les grands nombre de régression dans l’user experience, par exemple entre Vista et 7:
http://variableghz.com/2012/01/why-windows-vista-sp1-is-better-than-windows-7/

J’ai l’impression qu’il n’y a pas une personne avec la tête ailleurs que dans les réunions et dans leurs mails pour de temps en temps regarder leur produit, et dire “hey ho…vous faites quoi la ?”.
Ca n’est pas sérieux, en réalité, si on les regardait travailler on penserait surement “oh, des gens sérieux, en costard et tout”, en fait non leur monde corporate est une dystopie, un exemple d’école même.

J’espère secrètement que Microsoft va mourir de sa belle mort, que plus personne n’achètera ce qu’ils font, et qu’ils seront coincés dans leur position par leurs années de corporatisme frileux, et nous seront enfin débarrassés du bâtard a trois tête qui pourrit notre monde. Alors des spins offs démarrés par leurs employés les plus entreprenants pourraient enfin avoir la liberté de nous faire de bonnes surprises, qui sait ?

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s