Ruby on Rails : une bibliothèque de codes est retirée suite à une erreur de licence,
qui entraîne le chaos pour un demi-million de projets

Mercredi, Bastien Nocera, le responsable d'une bibliothèque logicielle appelée shared-mime-info, a informé Daniel Mendler, responsable d'une bibliothèque Ruby appelée mimemagic, qui incorpore le code de Nocera, qu'il voyait mimemagic sous une licence logicielle incompatible. La bibliothèque shared-mime-info est sous licence GPLv2 et mimemagic était listé comme un projet sous licence MIT.

Notons que Ruby on Rails, ou Rails, est un framework qui épouse le modèle-vue-contrôleur (MVC) pour les applications web côté serveur écrit en Ruby sous la licence MIT. Il fournit des structures par défaut pour une base de données, un service web et des pages web. Rails encourage et facilite l'utilisation de standards web tels que JSON ou XML pour le transfert de données et HTML, CSS et JavaScript pour l'interface utilisateur. Outre le MVC, Rails met l'accent sur l'utilisation d'autres modèles et paradigmes d'ingénierie logicielle bien connus, notamment la convention sur la configuration (CoC), le modèle Don't repeat yourself (DRY) et le modèle d'enregistrement actif.

Nom : ruby.PNG
Affichages : 10193
Taille : 4,1 Ko

L'émergence de Ruby on Rails en 2005 a grandement influencé le développement d'applications Web, grâce à des fonctionnalités innovantes telles que la création et la migration transparentes des tables de base de données et l'échafaudage des vues, qui permettent un développement rapide des applications. L'influence de Ruby on Rails sur d'autres frameworks Web est encore manifeste aujourd'hui, puisque de nombreux frameworks dans d'autres langages empruntent ses idées, notamment Django en Python, Catalyst en Perl, Laravel, CakePHP et Yii en PHP, Grails en Groovy, Phoenix en Elixir, Play en Scala et Sails.js en Node.js. Parmi les sites connus qui utilisent Ruby on Rails figurent Airbnb, Crunchbase, Bloomberg et Dribbble.

Dans sa note d’information, Bastien Nocera a indiqué que « l'utilisation d'un fichier GPL en tant que source fait de l'ensemble de votre base de code une œuvre dérivée, ce qui la rend entièrement sous licence GPL. Je pense donc qu'il est important que ce problème soit corrigé avant que quelqu'un ne l'utilise dans une base de code MIT pure ou dans une application à code fermé ». « Vous devrez également réinsérer de toute urgence l'en-tête GPL dans le fichier XML shared-mime-info. L'outil utilisé pour fusionner les traductions l'a supprimé des tarballs de la version, mais il est visible dans la version .in du même fichier », a-t-il ajouté.

Mendler a remercié Nocera de l'avoir informé et a rapidement placé la dernière version, 0.4.0, et la version 0.3.6 sous GPLv2, et a retiré les versions précédentes de la distribution sur RubyGems.org, le registre de paquets utilisé par les développeurs Ruby. Il a ensuite archivé le dépôt GitHub de mimemagic, ce qui signifie qu'il n'est plus activement développé.

Cela a eu pour effet malheureux de casser le célèbre framework de développement web Ruby on Rails, qui inclut mimemagic 0.3.5 comme dépendance. Cela affecte également 172 autres paquets qui, ensemble, touchent 577148 dépôts de logiciels différents. Tous ces projets ne sont pas immédiatement affectés, bien que toute sorte de processus de construction qui tente de récupérer une version retirée de mimemagic à partir de RubyGems.org échouera à moins que la mise en cache des dépendances n'ait été implémentée.

Les projets logiciels qui incorporent mimemagic doivent maintenant considérer les implications de l'incorporation de code sous licence GPLv2, ce qui peut ne pas être applicable dans certains cas. Si cela est légalement et pratiquement viable, ils peuvent passer à la version 0.3.6 ou 0.4.0 de la bibliothèque, mais cela ne se fera pas sans effort.

Il y'a quelques années, un développeur du nom de Jared Friedman déconseillait l’utilisation de ce framework pour les nouvelles entreprises. Pour lui, ce framework a connu son heure de gloire et est maintenant sur le déclin. Il serait donc judicieux pour les nouvelles entreprises de ne pas investir dans une technologie qui est en baisse, mais plutôt de se tourner vers celles qui sont en forte progression. Pour mieux étayer ses propos, Jared a effectué un comparatif entre les frameworks Ruby on Rails, Django et Node.js avec l’outil Google Trends.

Selon lui, Ruby a besoin d’un sponsor pour booster ses performances à l’instar de JavaScript qui a connu un fort attrait depuis l’implémentation du compilateur à la volée par Google. PHP a connu également des améliorations significatives avec l’investissement effectué par Facebook, ce qui a contribué à attirer les développeurs vers cette plateforme. Twitter qui a adopté Rails lors de ses débuts en 2006 aurait pu corriger l’interpréteur de Ruby qui est assez lent et constitue un gros handicap pour Rails. Mais ce réseau social a préféré réécrire sa plateforme dans un langage encore plus performant.

Des projets tels qu'une application web gérée par le ministère britannique des Affaires, de l'Énergie et de la Stratégie industrielle, le SDK Ruby pour le CMS FileStack et l'application d'images Danbooru basée sur Rails réfléchissent à des solutions de contournement pour une situation qui rappelle l'incident de 2016 où un développeur avait cassé des milliers de projets en 11 lignes de code JavaScript. Malheureusement, l'une de ces dépendances était left-pad. Voici, ci-dessous le code en question.

Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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;
}
Il remplace le côté gauche des chaînes de caractères par des zéros ou des espaces. Et des milliers de projets, dont Node et Babel, en dépendaient. Les programmeurs se sont retrouvés un matin face à des constructions et des installations défaillantes. Étant donné que mimemagic est principalement une base de données de mappages de données de type mime, l'équipe Rails étudie des options de remplacement, y compris libmagic sous licence BSD à 2 clauses ou une traduction Ruby des données mime. Sergey Alekseev, fondateur du fabricant d'applications Shopify ASoft, a demandé à Mendler de maintenir le dépôt mimemagic actif afin de permettre aux autres projets concernés d’étudier les différentes options.

Mais Mendler n'était pas d'accord, déclarant : « la dépendance Rails est certainement celle qui a le plus d'impact. Il est préférable que nous trouvions une solution qui fonctionne pour Rails et qui soit approuvée par l'équipe Rails ». Paul Berg, un consultant en licences open source, a déclaré à dans un courriel que, bien qu'il s'agisse d'une situation difficile, les développeurs concernés semblent bien la gérer. « Depuis que les responsables de la bibliothèque mimemagic ont découvert qu'elle contenait du code GPL, ils sont passés à une licence GPL, a-t-il déclaré. Ce qui est admirable, c'est qu'ils ont réagi une fois que le problème a été remarqué, plutôt que de garder le silence et de laisser le problème persister. »

« Cela pose cependant un problème majeur pour Rails, a déclaré Berg. Rails est largement utilisé sous la licence MIT, qui est une licence permissive. Puisque tant d'applications sont créées à l'aide de Rails en supposant que ces applications ne sont pas sous copyleft sous la GPL, il est probable qu'un grand nombre de ces applications ne respectent pas les termes de la GPL puisqu'elles n'ont pas été déployées en tenant compte de ces termes. »


Berg a déclaré que mimemagic pourrait essayer de remplacer les parties du code sous GPL et conserver sa licence MIT. Une autre option, dit-il, serait que Rails remplace complètement mimemagic, en supposant qu'un remplacement approprié existe. « Quoi qu'il en soit, la résolution de ce problème va probablement représenter une quantité de travail non négligeable avec un temps limité. Étant donné la nature critique de Rails pour l'industrie en raison de sa popularité », a-t-il déclaré. « Je n'envie pas leur situation difficile ».

« Cela illustre pourquoi il est si important d'être diligent dans l'énumération de toutes les dépendances et du code réutilisé chaque fois qu'ils sont introduits et de travailler pour s'assurer que la licence de ces dépendances est compatible avec votre objectif ».

Et vous ?

Avez-vous une expérience avec Ruby on Rails ?

Quel est votre avis sur l'état de ce framework face à la concurrence ?

Voir aussi :

RubyMine 2020.3 est disponible avec de nouvelles fonctionnalités pour Ruby 3.0 et Rails, la prise en charge du staging Git et des améliorations pour le débogueur et l'expérience utilisateur

Ruby 2.7 est disponible en version stable, avec l'ajout du filtrage par motif, d'une nouvelle méthode pour compacter le tas et plusieurs améliorations de performance non négligeables

Classement des langages de programmation : Python est désormais aussi populaire que Java selon l'index RedMonk, TypeScript continue son ascension dans le Top 10

Quels sont les meilleurs langages de programmation pour développer une application mobile ? Petit tour d'horizon sur les plus populaires

Un développeur estime que Ruby on Rails est dépassé et conseille aux entreprises de se tourner vers Node.js, partagez-vous ce point de vue ?