Sistema de gestión de paquetes

Un sistema de gestión de paquetes, también conocido como gestor de paquetes, es una colección de herramientas que sirven para automatizar el proceso de instalación, actualización, configuración y eliminación de paquetes de software. El término se usa comúnmente para referirse a los gestores de paquetes en sistemas Unix-like, especialmente GNU/Linux, ya que se apoyan considerablemente en estos sistemas de gestión de paquetes.
Los sistemas de gestión de paquetes son herramientas que facilitan la instalación, actualización y eliminación de software en su sistema operativo.​
En estos sistemas, el software se distribuye en forma de paquetes, frecuentemente encapsulado en un solo fichero. Estos paquetes incluyen otra información importante, además del software mismo, como pueden ser el nombre completo, una descripción de su funcionalidad, el número de versión, el distribuidor del software, la suma de verificación y una lista de otros paquetes requeridos para el correcto funcionamiento del software. Esta metainformación se introduce normalmente en una base de datos de paquetes local.
Las diferencias principales entre un sistema de gestión de paquetes y un instalador son las siguientes:
Los sistemas de gestión de paquetes tienen la tarea de organizar todos los paquetes instalados en el sistema y se encargan de mantener su usabilidad. Esto se consigue combinando las siguientes técnicas:
Muchos de los sistemas de gestión de paquetes ampliamente utilizados utilizan backends simples para instalar los paquetes. Por ejemplo, YUM utiliza RPM como backend y APT utiliza dpkg.
En los sistemas donde las aplicaciones comparten trozos de instrucciones, como en la mayor parte de las distribuciones de GNU/Linux, la resolución de dependencias al instalar y desinstalar software se convierte en una necesidad. Algunos de los sistemas de gestión de paquetes más avanzados tienen la capacidad de desinstalar los paquetes recursivamente o en cascada, de forma que se eliminan todos los paquetes que dependen del paquete a desinstalar y todos los paquetes de los que el paquete a desinstalar depende, respectivamente.
Es común que un administrador instale software que no está disponible en los repositorios provistos. Algunos ejemplos pueden ser una nueva versión de una aplicación que todavía no está disponible en la distribución o una alternativa distinta de la elegida por la distribución. Si este software adicional solo se distribuye en forma de código fuente, la instalación requerirá la compilación del código. Sin embargo, la instalación de este software adicional en el sistema ocasionará que el estado del sistema y la base de datos del gestor de paquetes no estén sincronizados, por lo que el administrador deberá tomar medidas adicionales para asegurar que el sistema de gestión de paquetes se mantenga al día, puesto que este no es capaz de hacerlo automáticamente.
Hay herramientas que se encargan de asegurar que los paquetes compilados localmente están integrados con el sistema de gestión de paquetes. En distribuciones basadas en paquetes .deb y .rpm, al igual que en Slackware, encontramos checkinstall. Para los sistemas basados en recetas como son Gentoo Linux o algunos sistemas híbridos como Arch GNU/Linux, es común escribir la receta en primer lugar, ya que ésta se encargará de asegurar que el paquete se incluye en la base de datos.
alien es un programa que convierte entre los diferentes formatos de paquetes de GNU/Linux. Soporta la conversión entre Linux Standard Base, RPM, deb, Stampede (.slp) y paquetes de Slackware (.tgz).
Otra problemática aparte de la actualización de software es la actualización de ficheros de configuración. Ya que los sistemas de gestión de paquetes surgieron como extensiones para las utilidades de archivado, normalmente solo son capaces de sobrescribir o retener los ficheros de configuración, en lugar de poder aplicarles reglas de modificación. Sin embargo, hay excepciones, que normalmente se aplica al proceso de configuración del núcleo, ya que si estos son incorrectos pueden ocasionar fallos al reiniciar el sistema, pudiendo incluso hacer que el sistema no arranque. Estos problemas pueden ocasionarse cuando el formato de los ficheros de configuración cambia. Por ejemplo, cuando el antiguo fichero de configuración no deshabilita nuevas opciones que deberían ser deshabilitadas. Algunos sistemas de gestión de paquetes, como el dpkg de Debian, permiten configurar el software durante la instalación. En cualquier otra situación es preferible instalar los paquetes con la configuración por defecto y sobrescribirla posteriormente. Por ejemplo, en la instalación de un paquete en un gran número de computadoras (dpkg también soporta este tipo de instalación preconfigurada).
El software normalmente se pone a disposición de los usuarios en los repositorios, con el fin de proporcionar a los usuarios de un sencillo control sobre los diferentes tipos de software que van a instalar en su sistema y, en ocasiones, debido a razones legales o conveniencias por parte de los distribuidores.
Cuando un usuario interactúa con el gestor de paquetes para realizar una actualización, este suele mostrar una lista de las tareas a realizar (normalmente la lista de paquetes a actualizar y, posiblemente, también los números de versión) y también es probable que permita realizar una actualización completa o bien seleccionar los paquetes que se desea actualizar. Algunos gestores de paquetes permiten indicar los paquetes que no se desea actualizar nunca o solamente cuando estos corrigen errores importantes en la versión anterior. A este proceso se lo suele denominar version pinning. Por ejemplo, yum permite esto mediante la sintaxis exclude=openoffice*, pacman con IgnorePkg=openoffice (en ambos casos para evitar la actualización de OpenOffice), mientras que las herramientas de Debian poseen una sintaxis más compleja y potente.
Por la naturaleza del software libre, los paquetes bajo licencias compatibles y similares están disponibles para usarlo en varios sistemas operativos. Estos paquetes pueden ser fácilmente combinados y distribuidos usando "packaging systems" configurables para manejar los diferentes cambios del software y administrar las dependencias y los conflictos específicos de una versión. Algunos "packaging systems" de software libre son ellos mismos liberados como software libre.
Los siguientes sistemas unifican la gestión de paquetes para muchas o todas las distribuciones de GNU/Linux y otras variantes de Unix basándose también en el concepto de ficheros-receta:
En la actualidad, una gran variedad de sistemas de gestión de paquetes es usada por algunos sistemas operativos propietarios para tratar con la instalación tanto de paquetes propietarios como libres.
Algunos sistemas de gestión de paquetes no forman parte nativa del sistema operativo, como pueden ser fink en Mac OS X o el entorno Unix-like de Cygwin (para Windows). Algunos lenguajes de programación interpretados tienen su propio sistema de gestión de paquetes para manejar módulos del lenguaje, como pasa con los lenguajes de programación Perl (ver CPAN) o PHP (ver PEAR) o Ruby ( RubyGems ). Otros programas pueden venir con su propio sistema para gestionar módulos.