# RubyGems

RubyGems est un gestionnaire de paquets pour le langage de programmation Ruby qui fournit un format standard pour la distribution de programmes et de bibliothèques Ruby (appelé "gemme"). Il permet de gérer facilement l'installation de gemmes et d'un serveur pour les distribuer. Il a été créé par Chad Fowler, Jim Weirich, David Alan Black, Paul Brannan et Richard Kilmer lors de la RubyConf 2004.
L'interface de RubyGems est un outil en ligne de commande appelé gem qui peut installer et gérer des bibliothèques. Bien qu'il soit possible d'utiliser un dépôt RubyGems privé, celui public est le plus souvent utilisé..
Le dépôt public permet aux utilisateurs de trouver des gemmes, résoudre les dépendances et les installer. RubyGems est fourni avec Ruby à partir de Ruby 1.9.

## Histoire

Le développement de RubyGems a commencé en novembre 2003 et a été rendu public le 14 mars 2004. En 2010, le dépôt public par défaut pour les gemmes est passé de gems.rubyforge.org à rubygems.org, qui est toujours utilisé. Le développement de RubyGems a migré vers GitHub en 2010.
Auparavant, la compatibilité entre RubyGems et Ruby variait. De nombreuses versions de RubyGems étaient presque totalement incompatibles avec de nombreuses versions de Ruby et certaines avaient des fonctionnalités clés inutilisables. Par exemple, Ruby 1.9 était fourni avec RubyGems 1.3.7, mais RubyGems 1.4.x n'était pas compatible avec Ruby 1.9. Cela signifiait que la mise à jour de RubyGems sur Ruby 1.9 n'était pas possible jusqu'à la sortie de RubyGems 1.5.0 en 2011, soit deux ans après la première version stable de Ruby 1.9. Ces problèmes de compatibilité ont conduit à un développement rapide de RubyGems. De nouvelles publications sont apparues toutes les quatre à six semaines. Cela se reflète dans le fait qu'il y a eu 38 versions de 2004 à 2010 et 117 versions de 2011 à 2016. 45 versions ont été publiées en 2013, ce qui est le plus grand nombre de versions en un an pour RubyGems.

## Structure d'une gemme

Chaque gemme contient un nom, une version et une plate-forme. Elles fonctionnent uniquement sur une plate-forme particulière basée sur l'architecture du processeur et le système d'exploitation.
Chaque gemme est composée de :
* Code
* Documentation
* Spécifications de la gemme (Gemspec)
L'organisation du code suit la structure suivante pour une gemme appelée gem_name :
* Le répertoire lib contient le code de la gemme
* Le répertoire test (ou spec) est utilisé pour les tests
* Rakefile est utilisé par Rake afin d'automatiser les tests et générer du code
* README inclut la documentation (RDOC pour la plupart des gemmes)
* Le fichier gemspec contient des informations sur l'auteur, la version, la licence et la finalité de la gemme.

## Problèmes de sécurité

Étant donné que les gemmes exécutent leur propre code dans une application, divers problèmes de sécurité peuvent apparaitre dus à l'installation de gemmes malveillantes. Le créateur d'une telle gemme peut être en mesure de compromettre le système de l'utilisateur.
Un certain nombre de méthodes ont été mises en place pour contrer les menaces de sécurité :
* Signature cryptographique des gemmes depuis RubyGems version 0.8.11. Les commandes gem cert et gem install sont utilisées pour cela.
* De nouveaux modèles de signature tels que X509 et OpenPGP ont été proposés et sont activement discutés parmi les experts Ruby.