¿Cuál es la diferencia entre construir desde la fuente y usar un paquete de instalación?

46

Me preguntaba: al instalar algo, hay una manera fácil de hacer doble clic en un archivo ejecutable de instalación y, por otro lado, hay una forma de construirlo desde la fuente.

El último, descargar un paquete fuente, es realmente engorroso.

Pero, ¿cuál es la diferencia fundamental entre estos dos métodos?

kwagjj
fuente

Respuestas:

44

Todo el software son programas , que también se denominan paquetes fuente . Por lo tanto, todos los paquetes fuente deben crearse primero para ejecutarse en su sistema.

Los paquetes binarios son uno que ya está construido desde la fuente por alguien con características y parámetros generales proporcionados en el software para que una gran cantidad de usuarios puedan instalarlo y usarlo.

Los paquetes binarios son fáciles de instalar .
Pero es posible que no tenga todas las opciones del paquete ascendente.

Entonces, para instalar desde el código fuente, debe crear el código fuente usted mismo. Eso significa que debe ocuparse de las dependencias usted mismo. También debe conocer todas las características del paquete para poder compilarlo en consecuencia.

Ventajas de instalar desde la fuente:

  • Puede instalar la última versión y siempre puede mantenerse actualizado, ya sea un parche de seguridad o una nueva característica.
  • Le permite recortar las funciones durante la instalación para satisfacer sus necesidades.
  • Del mismo modo, puede agregar algunas características que pueden no proporcionarse en el binario.
  • Instálelo en la ubicación que desee.
  • En el caso de algún software, puede proporcionar su información específica de hardware para una instalación adecuada.

En resumen, la instalación desde la fuente le brinda una gran opción de personalización al mismo tiempo que requiere mucho esfuerzo, mientras que la instalación desde binario es más fácil, pero es posible que no pueda personalizarla como lo desee.

Actualización : Agregar el argumento relacionado con la seguridad en los comentarios a continuación. Sí, es cierto que durante la instalación desde binario no tiene la integridad del código fuente. Pero entonces depende de dónde haya obtenido el binario. Hay muchas fuentes confiables desde donde puede obtener el binario de cualquier proyecto nuevo, lo único negativo es el momento . Puede llevar algún tiempo que el binario de las actualizaciones o incluso un nuevo proyecto aparezca en nuestros repositorios de confianza.

Y, sobre todo, sobre la seguridad del software, me gustaría destacar esta página hilarante en los laboratorios proporcionados por Joe en los comentarios a continuación.

principiante
fuente
44
la fuente también se puede compilar de manera optimizada para su sistema (lo cual ... puede no ser una buena idea, ya que entonces el material compilado es "específico" para el sistema y puede no funcionar en una copia de seguridad ... pero usted tiene el fuente, puede recompilar (si tiene tiempo para eso))
Olivier Dulac
Esto depende de si tiene ese "sistema de respaldo". Si solo está investigando, generalmente no lo hace.
h22
1
Para el hiperparanoide, una ventaja de la instalación desde la fuente es la seguridad y la capacidad de revisar el código si puede o quiere: cuando instala desde la fuente, sabe que tiene un binario de ese código fuente y no un binario con modificaciones desconocidas (suponiendo que confía en la fuente en primer lugar).
LawrenceC
66
@ultrasawblade - ¡Obviamente no eres lo suficientemente paranoico! <G>: consulte cm.bell-labs.com/who/ken/trust.html para obtener el monty completo.
Joe
32

Un archivo fuente contiene el código original tal como lo escribió el desarrollador en el lenguaje que elija (C, C ++, Python, etc.) y es genérico. No es específico de ninguna distribución y, en muchos casos, de ningún sistema operativo.

Un paquete (RPM o DEB, por ejemplo) es el ejecutable binario (o script interpretado, etc.) preparado previamente para su distribución particular. La tarea de preparar la fuente para la compilación (agregar los parches necesarios, etc.), la compilación real, la creación de archivos de configuración específicos de la distribución, la creación de scripts previos y posteriores a la instalación, etc.

En otras palabras, todo el trabajo de burro se ha realizado para usted en un paquete, mientras que tendrá que hacerlo usted mismo si elige instalar desde la fuente.

Es mucho más fácil usar un paquete en casi todos los casos como:

  • Son mucho más fáciles de instalar
  • Están diseñados específicamente para funcionar con su distribución
  • A veces son parcheados por el mantenedor del paquete para corregir errores específicos de la distribución
  • El administrador de paquetes los desinstalará
  • El administrador de paquetes administrará todas las dependencias por usted
  • El administrador de paquetes se encargará de las actualizaciones.
  • No necesita instalar herramientas de desarrollador en su sistema (compiladores, marcas, etc.)

Sin embargo, a veces la versión empaquetada es una versión antigua o, lo que es peor, no hay una versión empaquetada; en cuyo caso su única opción es compilarse. Si lo hace, debe considerar lo siguiente:

  • Deberá instalar todas las herramientas de desarrollador en su sistema
  • Usted será responsable de verificar una actualización y volver a compilar
  • Deberá asegurarse de que todas las dependencias estén instaladas, incluidos los devpaquetes; podría haber muchas de ellas.
  • Es posible que deba depurar problemas si no funciona como se esperaba en su distribución

Si está dispuesto a hacer un esfuerzo adicional, compilar desde la fuente puede brindarle los beneficios de:

  • Acceso a la última versión disponible.
  • La opción de optimizar el proceso de compilación para rendimiento / estabilidad
  • ¡Disfrute!

Tenga en cuenta que, si bien los paquetes precompilados de algunas distribuciones proporcionan ejecutables binarios que están listos para instalar y ejecutar (RPM y DEB son ejemplos), otras distribuciones proporcionan paquetes que simplemente automatizan el proceso de compilación.

Gentoo ebuildses un ejemplo de esto: el paquete es básicamente instrucciones para el administrador de paquetes que describen cómo compilar e instalar el ejecutable. Esto tiene muchas de las ventajas de los administradores de paquetes tradicionales (actualizaciones automáticas, desinstalación, etc.) al tiempo que permite al usuario optimizar el proceso de compilación a su gusto.

Arch Linux tiene un sistema de empaquetado donde los paquetes principales son binarios, mientras que muchos paquetes adicionales se compilan en el sistema utilizando PKGBUILDarchivos.

garethTheRed
fuente
19

Además de las otras respuestas, me gustaría agregar algo:

Si decide compilar un programa usted mismo, debe pensar que compilar no es algo que hace solo una vez. Probablemente necesitará suscribirse a la lista de correo de desarrollo de las aplicaciones que decidió compilar y mantenerse actualizado con las nuevas versiones y, especialmente, las actualizaciones de seguridad.

Cada vez que se actualice la aplicación, tendrá que volver a compilar la nueva versión, así que tenga en cuenta que tendrá que dedicar algo de su tiempo cada semana.

Si no puede permitirse eso, es mejor dejar que el encargado del paquete haga ese trabajo por usted.

Daniel
fuente
6

La construcción desde la fuente permite especificar la arquitectura de su máquina exactamente. Las nuevas CPU tienen instrucciones adicionales que los compiladores sí entienden, exprimiendo un poco de rendimiento. Los paquetes de preconstrucción generalmente cuentan con la CPU más arcaica que todavía se usa comúnmente.

Esto es sobre todo importante para aplicaciones críticas de proyecto que usan mucho la CPU, como herramientas de tubería bioinformática, por ejemplo, o herramientas de modelado geofísico. Dicho software se ejecuta en un entorno muy controlado, no cuenta con control de acceso por sí solo, por lo que rara vez tiene errores de seguridad tan urgentes que deben corregirse en días u horas. Casi nunca necesita ejecutarse en una máquina diferente con una arquitectura inicialmente desconocida.

Sí, lo sé, las computadoras son muy, muy rápidas ahora y cualquier esfuerzo o acción que realice es muy, muy costoso, pero al tercer día de estar y esperar a que su programa se complete (esta es la situación de la que estoy hablando) tales verdades comienza a parecer cuestionable.

De manera diferente, las aplicaciones como los navegadores y similares deberían utilizarse mejor desde el repositorio del mantenedor (y no desde algunos paquetes precompilados descargados), ya que es muy importante mantenerlos actualizados.

h22
fuente
Donde tales ajustes para explotar su CPU al máximo hacen la diferencia (esto es relevante solo en algunos códigos muy especializados; el dicho es que el 95% del tiempo se gasta en el 5% del código, por lo que la optimización del otro 95% no hace una diferencia notable; y la mayoría de los programas actuales están esperando el 99% del tiempo a que el usuario tome una decisión de todos modos), los programas ofrecen diferentes códigos para activar dependiendo de la CPU al inicio.
vonbrand
0

Una forma de obtener lo mejor de ambos mundos (software actualizado, instalación / desinstalación simple, incorporar la mayoría de los ajustes y adaptaciones de distribución, puede optimizar los requisitos locales), mientras que los costos (debe mantenerse actualizado, tenga cuidado con los errores y parches de última hora, siga el desarrollo, usted está solo con respecto a las correcciones de errores y las incompatibilidades entre versiones) no se puede mitigar (mucho), es construir sus propios paquetes, comenzando con los paquetes fuente de su distribución. Sí, es más trabajo que solo construir e instalar.

vonbrand
fuente
1
Parece una respuesta interesante ("lo mejor de ambos mundos"), pero no puedo entender lo que quiere decir aquí: "es construir sus propios paquetes, comenzando con los paquetes fuente de su distribución". ¿Te importaría volver a redactar / explicar?
Jan Żankowski