Applications: Managed vs Native

Disclaimer: cet article n’engage pas le point de vue de mon employeur ou de Microsoft. Je travaille dans le monde du Services Microsoft, je fais du développement .NET/C# et C++, des audits, de la formation ; je contribue en C/C++ à Windows, mais je ne fais pas de Java. Question de principes.

Les années 2000 ont vu l’explosion des langages dit “Managed” comme Java ou NET. Leurs caractéristiques sont les suivantes:

  • Productivité accrue
  • Compilation du code en un langage intermédiaire (bytecode ou MSIL) avec des méta-data
  • Langage dérivé de C++
  • Environnement d’exécution securisé sous forme de machine virtuelle qui emet du code à la volée (JIT ou Just In Time Compilation) à partir du bytecode ou du MSIL quelque soit l’architecture matérielle, l’OS ou le processeur
  • Suppression automatique de la mémoire allouée (Garbage Collector)
  • Framework (super boite à outils) qui contient des packages pour coder l’accès aux données, les Web Services, les structures de données, la crypto, la sécurité, l’UI, le support XML, JSON, etc.

Ces systèmes “managed” existent depuis 20 ans environ et ont bati leur réputation en dénigrant les langages traditionnels à base de compilation native qui ciblent une architecture matérielle ou processeur ou OS distinct.

L’application “Managed” est par nature “safe et secure” car le code ne peut être modifié par une main extérieure. La langage contient des exceptions et le code est déterministe et le code intermédiaire généré contient des met-data et checksum qui assurent que le code généré est sécurisé.

Comparé au code C++ qui était pointé du doigt (car code majoritairement utilisé par les développeurs dans les années 90-2000) qui permettait d’être attaqué par buffer overflow, etc. Le message était le suivant: C++ est unsafe et unsecure. Venez faire du Java/.NET à la place.

Pour bien charger la mule, on ne parle plus de code compilé ou code C/C++ mais de code “Unmanaged”. C’est une escroquerie intellectuelle. On n’est pas ici pour se raconter des histoires: C’est complètement faux de dire qu’un code C/C++ est unsafe et unsecure. L’OS est fait avec ! le Shell, etc.

Ces systèmes Managed ont expliqué qu’il n’y aurait jamais de virus fait avec. Avec le recul, on s’aperçoit qu’il n’y a jamais eu autant de logiciels malveillants faits avec ses technologies car très faciles à utiliser pour coder de la socket bas niveau par exemple, faire des outils d’attaque DOS.

Revenons au comparatif de fonctionnalités pour un code “Unmanaged”:

  • Compilation du code C++ en assembleur optimisé (code pour pipelines parallèles et code vectorisé, support des instructions étendues pour les processeurs Intel ou AMD) => “Power and Performance”
  • Support des APIs de l’OS hôte : accès illimité aux API du système d’exploitation
  • Gestion automatique de la mémoire en C++ Moderne (C++11) via les smart pointers
  • Code syntaxiquement compatible à 90% avec Java ou C# en C++ Moderne

La vérité du terrain: Regardons la liste des applications que nous faisons tourner au quotidien sur nos PC par exemple:

  • Windows, Linux: OS en C/C++.
  • Suite Office: Word, Excel, Outlook, PowerPoint : C/C++
  • Outils: 7zip, Adobe reader, Chrome, VLC : C/C++

Bref, les vrais logiciels sont faits en C/C++. Pourquoi ? Parce que c’est rapide, fiable et que l’expérience utilisateur est maximum. Je fais une action, le logiciel répond immédiatement.

N’avez vous jamais eu la frustration de clicker dans une application et d’attendre 3 secondes avant que cela répondent…. ?

Le monde du mobile a revu l’essence du monde Unmanaged car les devices ont un petit processeur, peu de mémoire et peu de stockage. Et là, l’utilisateur veut de la performance et du répondant. Une application qui met 30 secondes à se lancer est swappée rapidement. Le mobile a besoin de traiter les images de la caméra, par exemple, il lui faut du natif ! Pas le choix…

Quel est le bilan des systèmes du “Managed” depuis 2000 ?

Java a sorti son épingle du jeu et est massivement utilisé sur les systèmes Linux comme Red Hat. De la guerre .NET/Java, il est clair que Microsoft n’a pas su gagné le combat. D’une part en interne, Microsoft a une relation schizophrène avec .NET, Microsoft propose la technologie mais ne fait pas ses logiciels avec. Microsoft fait 95% de ses logiciels en C/C++ avec la stack C++ Moderne.

Vous allez me dire oui mais pour les entreprises ? OK, dans le monde du Services, les sociétés Gold Partners font du .NET. Mais les systèmes d’informations faits en NET sont rares comparés aux SI Java. Les entreprises réservent leurs applications d’entrée gamme aux technologies Windows et .NET mais dès qu’il faut attaquer le coeur de métier, aller sur les gros serveurs Linux ou Unux, Java est utilisé. Microsoft a du mal à se faire une place dans les grosses sociétés pour le SI stratégique. OK on vend des WS en .NET, un peu de SQL Server à droite à gauche, du SharePoint, mais ça reste de taille moyenne en général. Microsoft est le choix des petits et moyens systèmes. Oui, cela fait des milliers de clients mais de petites structures. Quelques appz clients lourds mais pas de SI stratégiques… Microsoft perse dans les entreprises avec Windows Server, Active Directory, la suite Office, la messagerie mais à l’époque du Web, le discours du développement Microsoft est très flou. On nous parle de .NET Framework 5.0, de .NET Core 3.0 Preview 6 , de .NET Standard 2.2, c’est très flou et assez compliqué…Dans le monde des services public, Java est utilisé massivement. Dans les banques, c’est 50/50 avantage Java.

Avec le cloud, la donne change un peu… On peut héberger pleins de petits serveurs et la guerre n’est plus Java./NET mais Web/JS vs le reste du monde.

Dossier .NET Core 3 pour Programmez de Juin 2019

La communauté des NET Azure Rangers contribue activement au dossier NET Core 3 de programmez de Juin 2019. En théorie, on partirait sur les bases suivantes:

  • Hamza : C# 8
  • Jean-Pierre : Support WinForms et WPF
  • Cédric M. : EF Core
  • Christophe P : ASP.NET Core
  • Christophe P : XAML Islands

Les NET Azure Rangers participent aussi sur 2 autres articles:

  • Laurent G. : Serverless
  • Jean-Nicolas B. : SQL Server, les indexes

A suivre…

Anniversaire de Cédric Michel

Happy B, Cédric…

void hb()
{
    std::vector<std::string> Rangers = {
        "[MVP Developer Technologies] Anthony Giretti <anthony.giretti@gmail.com>",
        "[MVP Azure] Cédric GEORGEOT <cgeorgeot@e-novatic.fr>",
        "Cédric TUMELAIRE <tumelaire@gmail.com>",
        "Eva Delord <eva.delord@gmail.com>",
        "François Merand <fmerand@hotmail.fr>",
        "Jean Noel GERARD <jeannoel.gerard@prymarys.com>",
        "Jean - Baptiste Bron <diveandbytes@gmail.com>",
        "Keelan CLECH <keelan.clech@gmail.com>",
        "Michel Foucault <mmarsu@gmail.com>",
        "Alexis Delee <alexisdelee@protonmail.com>",
        "[MVP FoxProx] Frédéric Steczycki <frederic@steczycki.net>",
        "Guilhem Mares <g.mares@live.fr>",
        "Jean - Nicolas Berger <jnberger@sqlserver.fr>",
        "Jean - Remy Durafour <jr.durafour + dotnetrangers@gmail.com>",
        "[MVP Azure] Laurent Grangeau <laurent.Grangeau@gmail.com>",
        "Louis GERARD <contact@lgerard.com>",
        "Jean - Pierre Gervasoni <jean.pierre.gervasoni@gmail.com>",
        "Hamza Azzouz <hamza_azzouz@outlook.com>",
        "Alain Metge <alain.metge@hotmail.fr>",
        "Cédric Michel <cedric.michel@outlook.be>",
        "[MVP Azure] Cédric Leblond <c.leblond@libertysurf.fr >",
        "[MVP Azure] Cédric Derue <cedric.derue@gmail.com>",
        "[MVP Developer Technologies] Christophe Pichaud <christophepichaud@hotmail.com>"
        };

    std::for_each(Rangers.begin(), Rangers.end(), [](const std::string& ranger) {
        std::cout << "Happy B. une fois, Cédric Michel from " << ranger << std::endl;
    });
}

Retour d’expérience sur C++ & Containers

Pour le compte d’un Gold Partner, j’ai passé un an ou presque sur une vitrine pour Azure. Il s’agissait de mettre en œuvre un cache NoSQL pour des applications ASP.NET MVC.

L’histoire commence avec la récupération de sources C++, le code d’une base de données non terminée sur laquelle je devais voir si on pouvait en tirer quelque chose… Apres quelques tentatives d’incursion dans la bête, j’en arrive a la conclusion que le code est spaghetti et cochon et que y a rien a reprendre si ce n’est le moteur de stockage. Or il se trouve que c’est une lib open-source nommée OpenLDAP-LMDB. C’est une lib Linux qui est en fait un filesystem en mémoire…

Je décide de porter cette lib sous Windows sous forme de DLL.

Ensuite, mon patron veut que l’on fasse bonne figure auprès de Microsoft car on est à la ramasse sur Azure… On réfléchie et on décide qu’on va faire des containers Windows et exposer le service de stockage comme une base NoSQL en tant que concurrent direct de DocumentDB, MongoDB, etc.

En 6 mois, je développe le service C++ Windows qui contient le web server, le service Web REST API JSON qui sert le cache, le binding .NET P/Invoke sur la DLL C et la structure de container et sa registry sur Azure. Je fais quelques articles pour Programmez sur le sujet et voilà, nous avons redoré notre blason auprès de Microsoft. Nous sommes Azure compatible.

Cette expérience C++ Docker sous Azure et très enrichissante. Pour mon patron, avec un CIR et surtout pour moi en connaissance Azure… La prochaine étape consiste à pousser cela sur le Market Place Azure.

Pour la petite histoire j’ai migré le service C++ REST SDK en C# NET avec System.Web. Ça marche aussi. Ca consomme plus de mémoire, c’est pas du C++ mais c’est aussi robuste… 😊.

Prochaine étape, migration sous .Net Core et container Linux. Stay tuned.

 

MVP Summit 2019

Le MVP Summit s’est tenu à Redmond, Seattle, WA, USA sur le campus de Microsoft.

Les informations de cette conférence sont confidentielles et font l’objet d’un NDA donc nous ne pouvons rien partager par contre les informations sont presque déjà toutes présentes sur les blogs Microsoft… Il faut fouiller et lire entre les lignes dans les blogs suivants :

  • Microsoft .NET Core et .NETFx
  • Azure
  • Visual Studio 2019
  • Visual C++

MVP SUMMIT 2019

Download image: HERE

 

Examens de C++ pour l’ESGI

Pour l’ESGI, je donne des cours de “Modern C++” à des élèves en 4ème année Génie Logiciel. Il y a deux groupes de 32 élèves.

Voici les examens de cet hiver:

EXAM AL2 : https://christophepichaud.home.blog/2019/01/12/examen-c-pour-mes-etudiants-esgi-4eme-annee-al2/

EXAM AL1 : https://christophepichaud.home.blog/2019/01/12/examen-c-pour-mes-etudiants-esgi-4eme-annee-al1/