La guerre des langages de programmation

Les langages de programmation ont historiquement majoritairement été ouverts. Fortran, Cobol, C, C++ ont certes toujours eu des compilateurs propriétaires, mais la syntaxe des langages était gérée par un comité, permettant à n’importe qui de créer son propre compilateur. Le projet de logiciels libres GNU ne s’en n’est d’ailleurs pas privé. Il existe des langages propriétaires tels que Visual Basic de Microsoft (1991) ou Delphi de Borland (1995), mais ils n’ont jamais fait beaucoup d’ombre aux langages de programmation ouverts.

Jusqu’à il y a de ça quelques années.

D’après le TIOBE Program Community Index, Java est désormais le langage de programmation numéro un, suivi par C, C+, Microsoft C# (en pleine ascension) et PHP (en léger déclin). En d’autres termes, Java caracole en tête, Microsoft .NET (Visual Basic, C#, ASP.NET) prend de l’importance alors que les langages ouverts ont tendance à décliner.

Quels sont les enjeux ?

La bagarre entre les différents langages de programmation ressemble à une querelle de clochers, mais l’enjeu est d’importance. Du moins principalement pour un seul acteur : Microsoft.

Sun a certes bénéficié du succès de son langage Java pendant des années, mais uniquement en termes de publicité. Et cette publicité n’a pas été suffisante pour sauver le constructeur du déclin et du rachat par Oracle. Si Java en tant que langage de programmation a été un succès, Java en tant que plateforme a été un échec cuisant qui n’a pas concurrencé la plateforme Windows comme promis. Et il n’est pas devenu le langage de choix sur le Web comme annoncé. L’exemple peut-être le plus humiliant a peut-être été celui de Friendster. Accablé par des problèmes de performances, la compagnie a finalement rétabli la situation en réarchitecturant son site Web… et en migrant de Java à PHP !

Microsoft, par contre, a beaucoup plus à perdre. Car si la « révolution » Java annoncée dans les années 90 n’a pas fourni une alternative à Windows, Java reste un danger potentiel car non lié à Windows. Java est peut-être encore loin de convaincre les gens de remplacer Windows par un autre système d’exploitation, mais Redmond ayant toujours été paranoïaque, il a toujours cherché à lier le langage de programmation à Windows, côté client comme côté serveur. On imagine en effet mal ASP.NET (la technologie Web de Microsoft) fonctionner sur un serveur Linux.

Raisons du changement

Comment se fait-il que les langages ouverts soient en perte de vitesse ? Si je n’ai pas de réponse absolue, une explication possible est que les langages ouverts se focalisent trop sur l’aspect programmation de la logique métier et ont tendance à délaisser toutes les interactions entre le programme et le système d’exploitation. Ils supportent en effet souvent un minimum d’entrées/sorties, en en particulier ne supportent que rarement l’interface graphique.

Un langage tel que C est apparu en 1973 pour supporter le développement d’Unix, à une époque où les terminaux en mode texte étaient de rigueur. Unix étant très centré autour du concept de fichiers, C supporte la gestion des fichiers sans problème. C n’est par contre prévu en standard d’interagir avec l’utilisateur qu’en mode texte. Il en est de même pour C++ ainsi que pour la plupart des langages ouverts (PHP, Perl, etc.)

Des solutions se sont développées pour complémenter ces langages et de permettre de gérer l’interface graphique. En fait, l’interface graphique est tellement complexe qu’il existe souvent deux couches. La première livrée avec l’environnement graphique, particulièrement ardue à programmer (l’API Windows sur Windows, X-Window sur Unix) et une seconde bâtie au-dessus de la première, permettant une programmation plus facile de l’interface utilisateur (Microsoft MFC ou Borland OWL sur Windows, Motif sur Unix). Mais aucun standard ne s’est dégagé.

Une exception notable est le HTML, qui peut être vu comme un langage de description d’interface graphique. C’est peut-être la raison pour laquelle un langage comme PHP a eu du succès sur le Web. Il n’a pas eu besoin de supporter une interface graphique, juste de générer du HTML – chose qu’un développeur peut faire très facilement.

Les solutions de Microsoft telles que Visual Basic ont certes proposé d’entrée leur solution, elles sont restés sur des marchés de niche, peut-être parce que Visual Basic est resté un langage limité pendant très longtemps.

Java contre Microsoft .NET

Lancé en 1995, Java a offert dés le début un langage de programmation beaucoup plus complet, permettant dés le début de programmer une interface graphique de la même manière quelle que soit la plateforme. Si la promesse du « Write Once, Deploy Everywhere » ne s’est pas avérée 100% exacte, Java reste un langage beaucoup plus portable que ses prédécesseurs.

Microsoft a finalement lancé sa réplique à Java avec .NET, lancé en 2002. Avec Microsoft .NET, Visual Basic est devenu un langage orienté objet, C++ est devenu complètement propriétaire en devenant C# (prononcer « C Sharp »), et ASP (le langage de développement de sites Web) est devenu ASP.NET. Comme Java, le code .NET est compilé en pseudo-code qui doit être interprété sur la machine cible. Un programme Java nécessite d’installer le JRE (Java Runtime Environment) pour s’exécuter, un programme .NET demande d’installer le .NET Framework. Et Java comme .NET offrent tous deux une pléthore de librairies pour programmer l’interface graphique, communiquer par TCP/IP, accéder aux bases de données, etc.

Si les langages de Sun et de Microsoft ont beaucoup de similarités, les deux approches ont par contre été radicalement différentes. Outre le fait que Java ait 7 ans d’avances sur .NET, il est possible que certaines de ces différences aient bénéficié à Java – encore que si c’est le cas je n’ai aucune idée dans quelle mesure.

Java a tout de suite suivi un modèle d’intégration horizontal alors que Microsoft a suivi un modèle d’intégration vertical – ironique quand on sait que Sun a toujours préféré le modèle vertical et Microsoft le modèle horizontal. Mais il faut se rappeler que le logiciel n’est pas considéré comme stratégique pour Sun autant qu’il l’est pour Microsoft. Si bien que Sun n’a pas désiré être présent partout, et pour Java s’est appuyé sur de nombreuses entreprises et organisations tierces. 16 ans après son lancement, le SDK de Java ne contient toujours pas d’éditeur de code – juste un compilateur et quelques outils de base en mode texte. Sun a en effet laissé le soin à d’autres de développer les environnements de développement (Eclipse), les serveurs d’Applications (IBM WebSphere, Oracle Weblogic, Tomcat, JBoss) et autres outils. Sun a même laissé d’autres compagnies créer leurs propres JVM (comme IBM). Microsoft, par contre, aime contrôler sans partage la plateforme logicielle. Si le géant de Redmond encourage le développement d’applications basées sur .NET, l’environnement .NET et outils associés doivent être des produits Microsoft, souvent dérivés de produits existants : l’environnement de développement de .NET, Visual Studio, est une adaptation de Visual Basic et de Visual C++. Le serveur d’application est Microsoft IIS. Le SGBD préféré est MS SQL Server. Et le système d’exploitation est sans surprise Windows. Il est possible que le modèle horizontal de Java ait joué en sa faveur, car il a favorisé la création d’un écosystème autour du langage. Par exemple, lorsqu’IBM ou Oracle poussent leur serveur d’application (respectivement WebSphere et Weblogic), ils poussent Java. Promouvoir la technologie .NET reviendrait à favoriser l’ennemi. Java a même permit la création de plusieurs logiciels libres, comme l’environnement de développement Eclipse ou les serveurs d’application JBoss ou Tomcat.

Autre différence entre Java et Microsoft : le prix. Java a dés le début été gratuit, permettant à n’importe quel développeur de télécharger sans frais le SDK et d’apprendre Java. Microsoft, par contre, a toujours fait payer ses langages de développement, étant donné que c’était historiquement sa seule manière de gagner sa croute (le tout premier programme de Microsoft a en effet été MS Basic). Par la suite, Visual Basic ou Visual C++ ont toujours été payant. Même si les revenus directs de Visual Studio sont certainement très faibles pour Microsoft, les vieux réflexes ont la vie dure. Pour développer sur .NET, Visual Studio commençant à $550. Depuis 2005 cependant, il existe une version gratuite, Visual Studio Express, même si elle reste fort limitée et dédiée aux amateurs et étudiants. Il est possible que Microsoft se soit rendu compte qu’il était utile de permettre aux gens de se mettre à .NET sans avoir à débourser de l’argent était une bonne idée.

Une autre différence de philosophie majeure entre Java et .NET concerne les fonctionnalités. Si la première version de Java a dés le début supporté la programmation de l’interface graphique, de nombreux autres fonctionnalités ont été ajoutée dans les années qui ont suivi. L’accès aux bases de données (JDBC) a été lancé en 1997. Le modèle de composants serveurs (Enterprise JavaBeans) a été lancé en 1999. Etc. Microsoft .NET a par contre dés le début été fournit avec de très nombreuses fonctionnalités. Un cours en ligne d’introduction à .NET de 2003 qui dure 6 heures ne couvre pas la programmation .NET même (Visual Basic, C# ou ASP.NET). Le cours survole quelques nouveautés présentes dans Visual Basic, mais recommande à maintes reprises d’acheter des livres pour approfondir tel ou tel sujet. De fait, il existe des livres entiers sur des aspects de .NET tels que le Remoting (accéder à du code distant). Autant dire que .NET ne s’apprend pas en 5 minutes.

Quelle évolution ?

De manière naturelle, les langages les plus populaires ont tous un marché où ils sont le plus ancrés. C et C++, à l’instar du Cobol ou du Fortran, sont plus utilisés pour des applications existantes que pour des nouvelles applications, et sont donc de plus en plus concurrencés par des applications Java ou .NET. Ces deux langages ont bien évidemment tenté de s’attaquer aux sites Web, mais avec peu de succès. PHP reste en effet le leader avec 76% des sites Web qui utilisent un langage de programmation – loin devant ASP.NET (22%) et Java (4%).

La bonne et mauvaise nouvelle pour Microsoft est que si .NET s’en tire plutôt bien, ce n’est pas suffisant pour lier l’informatique à Windows. Si plusieurs sites Web destinés à des clients d’entreprise n’acceptent qu’Internet Explorer (en général créés par des compagnies tout-Microsoft), les sites Web destinés au grand public n’ont quasiment jamais cette limitation. La bonne nouvelle pour Redmond est que même si Java triomphe les clients ne vont pas remplacer Windows par MacOS X ou Linux pour autant.

Peut-on voir de nouveaux langages de programmation se hisser parmi le top 5 ? S’il existe une pléthore de nouveaux langages, il faudra autre chose qu’être plus facile à programmer pour gagner en popularité. Maîtriser un nouveau langage prend en effet du temps. L’arrivée d’une nouvelle plateforme aide toujours. Cobol a grandi avec les mainframes, C a avec Unix, C++ avec Unix/Windows, PHP avec le Web. Et la plateforme mobile d’Apple iOS redonne un souffle à Objective-C qui était tombé dans l’oubli. Par contre, aucune autre nouvelle plateforme en vue.

Certains langages de programmation tels que Java et .NET ont cependant réussi à se faire une place au soleil sans nouvelle plateforme, mais ils ont bénéficié d’avancées alors inédites pour l’époque (garbage collector, code portable, etc.) ainsi que de la puissance marketing de Sun et de Microsoft. Pour qu’un nouveau langage devienne populaire, il faudra qu’il soit radicalement novateur.

Explore posts in the same categories: Evolution

2 commentaires sur “La guerre des langages de programmation”

  1. alefebvre Says:

    Très bon tour d’horizon. En particulier, je suis tout à fait d’accord avec le constat suivant : Cobol a grandi avec les mainframes, C a avec Unix, C++ avec Unix/Windows, PHP avec le Web. Et la plateforme mobile d’Apple iOS redonne un souffle à Objective-C qui était tombé dans l’oubli.
    C’est historique, pour qu’un langage trouve sa place, il lui faut un écosystème qui lui soit propre !


  2. […] sur l’évolution et la situation actuelle des langages de programmation : « La guerre des langages de programmation« . Cet article est un très bon tour d’horizon sur le sujet qui reste une des […]


Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s


%d blogueurs aiment cette page :