Korben, roi d’internet, logo bébé avec des lunettes en mode thug life Korben, roi d’internet, logo bébé avec des lunettes en mode thug life

Korben Upgrade your mind

11 lignes de codes qui disparaissent et ce sont des centaines de projets open source qui sont mis à mal

Aujourd’hui, je vais vous parler de Azer Koçulu.

Azer est un développeur passionné d’open source qui depuis des années publie des modules pour NPM, un gestionnaire de paquets utilisé par les projets Javascript pour installer des dépendances.

Et dernièrement, il a sorti un module baptisé Kik, qui vous vous en doutez, a attiré l’attention des avocats de la société Kik du logiciel de messagerie du même nom. Suite à un premier contact, Azer a refusé de supprimer son module et les avocats de Kik ont déposé une plainte pour violation de marque.

Suite a cette plainte, NPM a donc décidé de supprimer le module Kik de Azer, ce qui l’a vraiment, mais alors vraiment énervé. Azer a donc décidé de retirer de NPM ses 250 modules. Violent quoi..

« Cette situation m’a fait réaliser que NPM était un terrain privé où les sociétés ont plus de pouvoir que les gens, et si je fais de l’open source, c’est pour donner du pouvoir aux gens. » (Azer Koçulu)

Là où ça se complique, c’est que l’un de ses modules baptisé Left-pad est massivement utilisé dans des tas de projets comme Node, Babel…etc.

Left-pad, c’est 11 petites lignes :

module.exports = leftpad;

function leftpad (str, len, ch) {
str = String(str);

var i = -1;

if (!ch && ch !== 0) ch = ‘ ‘;

len = len – str.length;

while (++i < len) {
str = ch + str;
}

return str;
}

En retirant left-pad du dépôt, toutes ces applications se sont foiré à l’installation, ne trouvant pas la dépendance. Et quelle dépendance, car rien que le mois dernier, left-pad a été téléchargé plus de 2,4 millions de fois. Je vous laisse imaginer le chaos parmi la communauté Javascript.

gif-keyboard-16616115139082968343

Laurie Voss, le CTO et co-fondateur de NPM a donc pris la décision historique de dé-dépublier (restaurer quoi…) left-pad 0.0.3 afin que les applications que tout le monde continue à s’installer et à fonctionner.

Left-Pad sur NPM est donc maintenu par une nouvelle personne, Azer a publié un article sur Medium pour s’expliquer et mis son code sur GitHub pour ceux qui en auraient besoin.

Cette situation est intéressante car elle montre que l’application bête et méchante du copyright peut parfois avoir des effets de bord conséquents. A mon sens, NPM aurait du tenir tête aux avocats de Kik. (Edit : depuis mon article, le CEO de Kik a publié sa version des faits, qui montre que Azer n’est pas non plus un mec arrangeant. A lire ici.)

On constate aussi que pas mal de projets open source sont soutenus par une poignée de personnes et reposent sur des bouts de codes charnières qu’il est ensuite compliqué de retirer. Ce n’est pas pour rien que tout ceci s’appelle des « dépendances » et on voit là concrètement l’importance vitale de ces dépendances. Le monde de l’open source manque peut être encore un peu d’alternatives, de forks…etc. Je repense au problème avec OpenSSL en 2014, qui a donné trop tardivement le jour à LibreSSL.

En attendant, si votre code ne fonctionne pas même avec le retour de left-pad, faites un

npm cache clear

pour nettoyer le cache de npm et récupérer la version restaurée.

Source


Réponses notables

  1. Alors, je ne vais pas dire que je suis content, mais c’est une question que je me suis souvent posé et à laquelle je n’ai jamais obtenu de réponse nul part.
    A utiliser des bibliothèques, ressources partagées, ou n’importe quoi d’autres qui n’est pas hébergé en local, on prend le risque de s’exposer à un défaut de service le jour où cette ressource disparait.

    J’ai des projets web où je me suis tjs dis que le jour où ce truc n’est plus dispo, bah le site tombe à l’eau complet…

  2. Ce qui est fou c’est qu’autant de projets se basent sur un seul et même paquet et qu’il n’y ait, semble-t-il, pas d’alternative.
    Le système de dépendance est vraiment extra mais c’est tout de même dangereux (une partie de son code est maintenue par quelqu’un d’autre), on en a la preuve maintenant.

  3. Pourquoi node aurais t-il du resister à kilt, pourquoi ne pas renommer sont extension !

    Franchement il veux la jouer lutte des classes?

  4. J’ai pas trouvé d’explications plus avancés que la déception fasse à l’absence de soutien qu’il espérait de la communauté.

    Dès fois on ne réalise pas à quel point il y a des développeurs qui se cassent les pieds à maintenir du code bénévolement et qu’ils en faut peu pour qu’il pète un cable.
    Surement que changer de nom auraient eu pour conséquence de devoir refactoriser tout son code et avec ça son lot de tickets ,de travail, et de mécontents supplémentaires.
    Donc il a dut décidé de lâcher ses modules.

    Après je spécule, mais je m’occupe de quelques parties de projet libre et dès fois je pense aux ravages que je pourrais faire en un commit et de pourquoi je me casse les pieds tout ça sans jamais recevoir le moindre remerciements.
    A sa place , ça m’aurait sacrément fait chier de devoir revoir mon code tout ça pour faire plaisir à une entreprise.
    Les dévs de projets libre ont bien plus de pouvoir que beaucoup le pensent et on ne réalisent pas à quel point ils n’en abusent pas.

  5. C’est vrai que c’est un peu bête de ne pas avoir vérifier avant. Mais je ne trouve pas que module et locigiel soit le même domaine d’application même si l’un découle de l’autre. Donc pour reprendre une analogie en dev, on est dans deux espaces de nom différent. Il ne devrait pas y avoir conflit.

    A sa place, je n’aurais pas changé de nom non plus. Je pense plus à une question de “je viens pas t’emmerder sur ton terrain pourquoi toi tu viens m’emmerder” qu’à une lutte des classes.

    Si un “Darkiron” devenait célèbre et deposer une marque sur ce pseudo, tu accepterais de changer ?

  6. fofo says:

    franchement je comprends pas bien ces dépendances.

    leftpad prend 5 sec à coder, (au pire c’est open-source tu copies/colles avec un comm sur la source)

    Pourquoi générer un dépendance inutile ? C’est suicidaire :

    • Le jour où la source n’existe plus ou génère une régression…
    • La source devient malveillante (hack, vente)
    • C’est une inclusion de code externe (XSS)

    ça me fait penser aux idiots qui incluent une balise script jquery direct vers le site jquery :

    • Si un jour jquery.com se fait hacker, c’est des milliers de sites qui pètent,
    • Quand jquery rame, tout le web rame, (quand ça rame pas, ça fait des latences inutiles)

    il suffit de télécharger en local (sur le serveur), tu maitrises les upgrades, peux auditer le code, et n’upgrade que quand nécessaire.

  7. En général les CDN optimisent le chargement des scripts. Réponse plus rapide et si le script est déjà chargé en cache, ça évite à d’autre site de renvoyer le contenu.

    Pour autant je suis d’accord avec toi, quand un script prend 3 minutes de plus à copier > coller, pourquoi risquer la sécurité et le maintien de son application …

    Je vois moyennement ce qu’on bien pu faire les développeurs dans la galère - NPM installe les scripts dans node_modules, il suffit de rajouter le répertoire avec le projet et ça marche très bien. Perso c’est que je fais - si les gens veulent mettre à jour, libre à eux - mais la base fonctionnera toujours.

Continuer la discussion sur Korben Communauté

10 commentaires supplémentaires dans les réponses

Participants

Découvrez un article au hasard