# Repositorio de software

Un repositorio de software es un lugar de almacenamiento del cual pueden ser recuperados e instalados los paquetes de software en un ordenador.

## Visión general

Muchos editores de software y otras organizaciones mantienen servidores en Internet para este fin, ya sea de forma gratuita o por una tarifa de suscripción. Los repositorios pueden ser únicamente para programas particulares, como CPAN para el lenguaje de programación Perl, o para un sistema operativo completo. Los operadores de estos repositorios suelen ofrecer un sistema de gestión de paquetes, herramientas destinadas a buscar, instalar y manipular los paquetes de software desde los repositorios. Por ejemplo, muchas distribuciones Linux utilizan Advanced Packaging Tool(APT), encontrado comúnmente en distribuciones basadas en Debian, o yum, encontrado en distribuciones basadas en Red Hat. También hay varios sistemas independientes de gestión de paquetes, como pacman, utilizados en Arch Linux y Equo, encontrados en Sabayon Linux.
Los repositorios de software están diseñados para incluir paquetes útiles o aplicaciones de software utilitario, siendo los más importantes aquellos con un diseño libre de malware. Si un equipo está configurado para utilizar una firma digital de un repositorio de algún vendedor de confianza, combinado con un sistema de permisos adecuado, se reduce significativamente la amenaza de malware en estos sistemas. Como consecuencia, muchos sistemas con éstas capacidades no requieren software antivirus ni software anti-malware.
La mayoría de las principales distribuciones de Linux tienen muchos repositorios en todo el mundo que reflejan el repositorio principal.

## Sistema de gestión de paquetes vs. proceso de desarrollo de paquetes

Un sistema de gestión de paquetes es diferente de un proceso de desarrollo paquetes.
Un uso típico de un sistema de gestión de paquetes es facilitar la integración de código de posibles fuentes diferentes a una unidad operativa coherente e independiente. Por lo tanto, un sistema de gestión de paquetes podría ser utilizado para producir una distribución de Linux, posiblemente, una distribución adaptada a una aplicación restringida específica.
Un proceso de desarrollo de paquetes, por el contrario, se utiliza para gestionar el codesarrollo de código y documentación de una colección de funciones o rutinas con un tema común, produciendo de esta manera un conjunto de funciones de software que normalmente no será completa y utilizable por sí mismos. Un buen proceso de desarrollo de paquetes ayudará a los usuarios, conforme a una buena documentación y prácticas de codificación, con la integración de cierto nivel de pruebas unitarias. La tabla más abajo proporciona ejemplos de procesos de desarrollo de paquetes.

## Repositorios seleccionados

La siguiente tabla muestra un par de lenguajes con los repositorios de software contribuido. La columna "Autochecks" describe los controles de rutina realizados.
Muy pocas personas tienen la posibilidad de probar su software en múltiples sistemas operativos con diferentes versiones del código del núcleo y con otros paquetes contribuido que pueden utilizar. Para R, la Red Archivo R Integral (CRAN), realiza pruebas de forma rutinaria. Para ver cuán valioso es esto, supongamos que Sally aporta un paquete A. Solo Sally ejecuta la versión actual del software en una versión de Microsoft Windows y solo se ha probado en ese entorno. A intervalos más o menos regulares, CRAN pone a prueba la contribución de Sally en una docena de combinaciones de sistemas operativos y versiones del software núcleo del lenguaje R. Si uno de ellos genera un error, se pone ese mensaje de error. Con suerte, ese mensaje de error puede ser suficiente para que le permita solucionar el error, incluso si ella no puede replicarlo con el hardware y software que tiene. A continuación, supongamos que John contribuye al repositorio un paquete B que utiliza un paquete A. El paquete B pasa todas las pruebas y se pone a disposición de los usuarios. Más tarde, Sally presenta una versión mejorada de A, que por desgracia, rompe B. Los autochecks hacen posible proporcionar información a John para que pueda solucionar el problema.
Este ejemplo expone a la vez una fortaleza y una debilidad en el sistema de paquetes contribuidos R: CRAN provee este tipo de pruebas automatizadas de paquetes contribuidos, pero los paquetes contribuido a CRAN no necesitan especificar las versiones de otros paquetes contribuidos que utilizan. Existen procedimientos para solicitar versiones específicas de paquetes, pero los contribuyentes no podrían utilizar esos procedimientos.
Más allá de esto, un repositorio como CRAN ejecuta comprobaciones regulares de paquetes contribuidos, en realidad ofrece un extenso conjunto de pruebas para las versiones de desarrollo del núcleo del lenguaje. Si Sally (en el ejemplo anterior) obtiene un mensaje de error que no entiende o cree inapropiado, sobre todo a partir de una versión de desarrollo del lenguaje, ella puede (y a menudo lo hace con R) pedir ayuda al equipo de desarrollo principal para el lenguaje. De esta manera, el repositorio puede contribuir a mejorar la calidad del software núcleo del lenguaje.
| Propósito / de lengua | Proceso de gestión de paquetes | Repositorio | Cómo para instalar | Collaborative Plataforma de desarrollo | Autochecks |
| C++ | Impulso |
| Haskell | Arquitectura común para Construir Aplicacirones y Bibliotecas (CABAL) | Hackage |
| Java | Maven |
| .NET | NuGet | NuGet |
| Node.js | NPM |
| Perl | CPAN |
| PHP | PECL |
| Python | Setuptools | PyPI | pip, EasyInstall, PyPM |
| R | R CMD check process | CRAN | install.packages | R-Forjar | Aproximadamente semanal en 12 plataformas o combinaciones de versión diferente de R (devel, prerel, parcheado, liberación) con hasta 7 sistemas operativos diferentes (diferentes versiones de Linux, Windows y Mac) |
| R | Bioconductor | BiocLite.R |
| Ruby | RubyGems | Ruby Application Archive | RubyForge |
| TeX, LÁTEX | CTAN |
(Partes de esta tabla fueron copiadas de.)

## Gestores de Repositorios

Software para gestionar repositorios (gestores de repositorios) incluyen:
* Apache Archiva @– "software de gestión de repositorio para la construcción del repositorio de artefactos"
* MyGet @– "servicio de entrega continua de alojamiento, 1000 de los repositorios de paquetes NuGet, Bower y NGP"
* JFrog Artifactory @– "gestión de los binarios a lo largo del ciclo desarrollo"
* Sonatype Nexus @– "utilizado por más de 20.000 organizaciones"
* Paquete Drone @– "un repositorio gestor de paquetes de OSGi"