De la fragilité des applications JavaScript

De très nombreuses applications Web, serveur ou client, sont écrites en JavaScript, alors que ce langage de programmation avait été conçu à l’origine pour écrire des miniscripts pour des pages Web.

Il n’est donc pas du tout adapté à des applications d’envergure, de plusieurs centaines de milliers de lignes de code, à tel point que Microsoft a inventé TypeScript pour tenter d’améliorer la situation.

Car malgré ses très nombreux défauts, JavaScript est devenu un standard, et des moteurs JavaScript sont disponibles sur presque toutes les plateformes et tous les navigateurs Web. Un de ses avantages théoriques est donc de pouvoir écrire la partie serveur comme la partie client d’une application dans un seul et même langage.

Un incident récent vient d’illustrer une autre fragilité occasionnée par le code spaghetti JavaScript de nombreuses applications d’envergure.

La plupart des applications JavaScript utilisent des ‘paquets’ de code open source, en simplifiant des librairies de code et des métadonnées pour les installer. Ces paquets sont eux-mêmes programmés à l’aide d’autres paquets, ce qui abouti à des dépendances considérables dans le code.

Dans le cas des applications node.js, le gestionnaire de paquets, qui permet d’automatiser le téléchargement, la mise à jour, la configuration, et la suppression de paquets d’un ordinateur est NPM, qui appartient à une entreprise privée, NPM Inc, dirigée par Isaac Z. Schlueter.

Dans un article sur medium, Azer Koçulu explique pourquoi il a fini par retirer tous ses modules – plus de 250 – de NPM pour les entreposer sur GitHub.

Un avocat l’avait prié de renommer son packet ‘Kik’, parce que kik est aussi le nom d’une application mobile de messagerie. Il refusait, mais l’avocat contactait Schlueter, qui au lieu de protéger Koçulu, a unilatéralement décidé d’accéder à la demande de l’avocat et changé la propriété du module, sans demander la permission à Koçulu.

Mais parmi tous ces modules, l’un est très populaire : il s’agit d’une fonction triviale de onze lignes de code qui ajoute des espacements à gauche d’une chaîne de caractères.

Le paquet a été téléchargé 2,5 millions de fois le mois dernier.

Comme le paquet n’était plus sur NPM, de nombreux paquets dépendants n’ont pu être construits, et l’installation de très nombreux projets a échoué, y compris des projets de la plus grande envergure comme Node.js et Babel.

Pour éviter que les catastrophes s’enchaînent, Laurie Voss, la directrice technique de NPM, a unilatéralement décidé de republier left-pad sur NPM. Une décision dont la légalité est plus qu’incertaine, et qui risque d’inciter d’autres programmeurs à retirer leurs paquets de NPM.