¿Por qué las bibliotecas se envían por separado en lugar de incluirse con cada programa?

10

Sé por qué esto es bueno en general: soluciones de seguridad más rápidas, empaquetado más fácil, más funciones. Sin embargo, estoy tratando de persuadir a algunos compañeros de trabajo de que no necesitamos agrupar una biblioteca con nuestro programa. No funcionará sin esta biblioteca, pero la biblioteca ha estado estable por un tiempo y lo seguirá siendo en el futuro previsible. No veo ninguna razón para NO separarlo.

¿Qué argumentos podría usar para persuadirlos?


Mi situación específica es esta: estoy trabajando en SymPy , que es una biblioteca de Python de código abierto para matemática simbólica. Una parte central es mpmath , que es una biblioteca para aritmética de punto flotante de previsión múltiple. SymPy no funciona sin mpmath, no hay alternativa. Como tal, se ha incluido con SymPy desde el principio (me dijeron que generalmente había pequeñas incompatibilidades para solucionar cada vez que se importa una nueva versión). También debe tenerse en cuenta que el desarrollador de mpmath solía estar involucrado en el desarrollo de SymPy. Ahora hay un problema en desagregar mpmath, puedes leerlo todo aquí .

Para resumir la discusión allí:

Desagregar:

  • Portar algo más fácil a Python 3 (argumento menor en mi humilde opinión)

  • Empaque más fácil para distribuciones

  • Actualizaciones de funciones (seguridad) más rápidas para los usuarios

  • "Las dependencias de empaque y manejo son problemas difíciles, pero se resuelven. Definitivamente, esta no es un área en la que debamos hacer lo nuestro".

Sigue agrupando:

  • Instalación. Es fácil en Linux, más difícil en Mac y muy difícil en Windows. Falta de acceso a su y otros problemas.

  • Es una parte integral de SymPy, es decir, Sympy no funciona sin él (en absoluto)

  • no hay otro paquete que pueda hacer el trabajo de mpmath

  • "Cuando yo, como usuario, descargo Sympy, espero que simplemente funcione".


Esa es mi situación específica, pero acepto una respuesta que también proporciona una buena respuesta general.

VPeric
fuente
Debe proporcionar más información con su situación específica para obtener una mejor respuesta. Por ejemplo, ¿en qué entorno planea ejecutarlo? ¿Estará expuesto a internet?
tshepang
¿Es su aplicación de código abierto?
Anton Barkovsky
@Anton Sí, es SymPy , una biblioteca de Python de código abierto para matemática simbólica. Estoy trabajando en ello como estudiante de GSoC (divulgación completa :)).
VPeric
@Tshepang La discusión se puede ver en: code.google.com/p/sympy/issues/detail?id=2482
VPeric
@VPeric: Sería muy agradable resumir esa discusión, solo para ahorrar tiempo a aquellos que estén dispuestos a responder su pregunta.
tshepang

Respuestas:

5

Otra respuesta más, pero considero la más importante (solo mi opinión personal), aunque las otras también son buenas respuestas.

Empaquetar la lib por separado permite que la lib se actualice sin la necesidad de actualizar la aplicación. Digamos que hay un error en la biblioteca, en lugar de solo poder actualizar la biblioteca, tendría que actualizar toda la aplicación. Lo que significa que su aplicación necesitaría un aumento de versión sin que su código haya cambiado, solo por la lib.

Patricio
fuente
1
Ese es un punto importante, y es parte de por qué a muchas distribuciones no les gusta tener bibliotecas agrupadas con programas; por ejemplo, Debian tiene la política de no agrupar una biblioteca con un ejecutable o vincular estáticamente una biblioteca a menos que solo pueda ser utilizada por ese programa en particular (o, para el enlace estático, aquellos casos en los que el enlace dinámico no es compatible).
Gilles 'SO- deja de ser malvado'
Al final, este es quizás el punto más importante. También estoy de acuerdo con las otras respuestas, pero tuve que elegir solo una. :)
VPeric
6

Además de las ventajas que mencionaste (seguridad, empaque, características), puedo pensar en algo más:

  • Alguien que encontraría la funcionalidad útil para otro programa no necesitaría hacer el trabajo de dividirla. Eso es si ella incluso sabe si la funcionalidad existe en su proyecto en forma de biblioteca en primer lugar. Esto depende de qué tan bien esté diseñado ... si su proyecto es lo suficientemente modular.

  • En el caso de que esto sea útil para otros proyectos, esto reduciría el tamaño del uso del disco en general (por ejemplo, solo una copia del código).

  • Esto mejoraría la calidad de su código, forzándolo a realizar algunas refactorizaciones (muy necesarias). Como en el primer punto anterior, esto también depende de la calidad de su código.

  • Aumentar el número de usuarios de la biblioteca (si está dividida) ayudaría a hacerla más genérica, lo que probablemente también mejorará su calidad.

tshepang
fuente
1
Todos los buenos puntos. Supongo que podría leerse como "a prueba de futuro": pocos de sus puntos se aplican actualmente (mpmath se usa solo en un par de otros proyectos en este momento), pero es fácil ver que cada uno de sus puntos gana valor para cada nuevo proyecto usando mpmath.
VPeric
4

Si bien las ventajas son obvias, la facilidad de implementación parece ser el argumento principal para enviar la biblioteca junto con el programa en su caso.

Aquí hay algunos argumentos más en contra de la agrupación:

  • En Linux, el trabajo del responsable de la distribución es garantizar que su biblioteca funcione bien con sus dependencias. En cualquier caso, la mayoría de los usuarios descargarán la biblioteca utilizando el administrador de paquetes de la distribución. A aquellos que usan troncales generalmente no les importará perder tiempo configurando la biblioteca de todos modos.

  • En Windows y Mac OS, los administradores de paquetes de Python como pip generalmente se usan de todos modos, ya que instalar bibliotecas a mano es engorroso.

  • Incluso ha habido argumentos sobre la implementación dura en el motor de aplicaciones de Google, pero no todos los marcos web se ejecutan en él. ¡Muchos incluso requieren portabilidad, el espacio en disco para las bibliotecas es limitado y, después de todo, es el alojamiento de aplicaciones web! Es poco probable que la aplicación web use matemáticas simbólicas.

  • Nadie le impide mostrar mensajes de error limpios si la dependencia no está disponible o tiene una versión incorrecta.

  • La gente a menudo lo odia cuando el programa se considera más inteligente que ellos. Deje que los usuarios se encarguen de su propio sistema.

Anton Barkovsky
fuente
¿Puedes explicar el último punto? No puedo decir si es un argumento a favor o en contra de la agrupación.
tshepang
3
Lo entiendo en contra de la agrupación: los usuarios quieren instalar lo que quieren, no tener que forzarles una versión en particular.
VPeric
3

La forma correcta de manejar desagrupados en un paquete de instalación de Windows sería realizar la prueba previa a la existencia de la biblioteca y, si no está presente, ofrecer instalarlo desde el paquete de biblioteca que incluye en el paquete de instalación del software. Estoy bastante seguro de que la mayoría de las aplicaciones GTK que tienen puertos de Windows hacen algo en este sentido: sé que pidgin lo hace.

Shadur
fuente
3

Un tamaño no tiene que adaptarse a todos.

Para las distribuciones de origen, si agrupa, los empaquetadores en muchas distribuciones (al menos de las herencias de Debian y Fedora) tendrán que hacer un trabajo adicional para deshabilitar o eliminar la agrupación, ya que las políticas de paquetes para esas plataformas prohíben o al menos desaconsejan la agrupación. Por lo tanto, al agrupar crea más trabajo para su flujo descendente con muy pocos beneficios. ¿Podría ese argumento tener algo de peso?

Las distribuciones binarias (si las proporciona) podrían ir en cualquier dirección; la agrupación probablemente tenga sentido para aquellos, ya que no los utilizan aguas abajo.

Pero no hay ninguna razón por la que no pueda tomar la decisión y el paquete opuestos para los instaladores de Windows y Mac.

Michael Ekstrand
fuente
1
Si bien estoy de acuerdo en general, crea una carga adicional (por pequeña que sea) que significa que probablemente nadie respaldaría esta solución.
VPeric
2

Agrupar vs. depender es un viejo debate en el mundo del empaque. Este documento habla sobre estas dos escuelas de pensamiento: http://www.aosabook.org/en/packaging.html

Éric Araujo
fuente
2
Esta fue una lectura interesante, pero habla más sobre los detalles de implementación y varios detalles de Python que sobre la filosofía general.
VPeric