¿Cuál es la diferencia entre un archivo binario y una biblioteca?

11

Estoy tratando de entender el estándar de jerarquía del sistema de archivos. He buscado binarios y bibliotecas, y como lo entiendo actualmente:

Los archivos binarios son archivos de código legible por computadora en formato binario, que controlan la CPU y el procesador directamente con bits.

Las bibliotecas son funciones que pueden usar varios programas, por conveniencia, como cuando necesita un módulo en Javascript de PHP.

¿Es correcto este entendimiento? Si es así, ¿por qué seguimos separando bibliotecas y binarios? Algunas bibliotecas son binarios, ¿verdad? Y algunos binarios (cat, less, date, rm, cp, etc.) se usan y reutilizan como si fueran bibliotecas ... ¿Puede alguien ayudarme a explicar la diferencia y ayudarme a encontrar mejores definiciones para estas dos palabras? Gracias.

houallet
fuente

Respuestas:

10

Su comprensión es mayormente correcta, pero hay un par de cosas adicionales a considerar:

  1. 'binario' se refiere a algo que no es legible para los humanos. Esto generalmente se refiere al código de máquina, pero muchos otros archivos también son archivos binarios en este sentido, siendo la mayoría de los formatos multimedia un buen ejemplo. Sin embargo, el FHS tiene un uso más específico para el término.
  2. Las bibliotecas pueden ser código binario. De hecho, la mayoría de las cosas /libserán bibliotecas compiladas en código máquina.
  3. Si bien cosas como las que catse usan en el script de shell como las llamadas al código en las bibliotecas, no son bibliotecas en el sentido de FHS porque pueden ejecutarse por sí mismas.

Como resultado de estos puntos, la terminología más común entre las personas que no escriben documentos estándar es:

  • Archivos de objetos: estos son códigos de máquina compilados de forma nativa, pero es posible que ni siquiera se ejecuten o se puedan llamar. Por lo general, tienen una .oextensión a menos que caigan en una de las otras categorías, y casi nunca se ven en la mayoría de los sistemas, excepto cuando se construye software. Los he enumerado aquí porque son importantes para comprender algunas cosas a continuación.

  • Archivos ejecutables: son archivos que consisten principalmente en código autónomo que se puede ejecutar directamente. Pueden ser archivos de objetos con formato especial que el kernel puede cargar directamente (cosas como cat, bashy pythonson todo este tipo de ejecutables), o son interpretados por algún programa intermediario que en sí mismo es un ejecutable (Minecraft pydoc, y cowsayson todos ejemplos de este tipo de ejecutable). Los ejecutables del primer tipo casi nunca tienen una extensión de archivo en los sistemas UNIX, mientras que los ejecutables del segundo tipo pueden o no. Esto es lo que la FHS se refiere como 'binarios'. Se pueden ejecutar desde otros ejecutables, pero requieren llamar a funciones especiales para invocarlos ( fork()y exec()en C y C ++, cosas fuera delsubprocess módulo en Python, etc.) y se ejecuta como un proceso separado.

  • Bibliotecas: son archivos que contienen código reutilizable que puede ser invocado por otra biblioteca o un ejecutable. El código en las bibliotecas se invoca (principalmente) directamente por otro código una vez que se carga la biblioteca (referido como 'vinculación' cuando se habla de código compilado), y se ejecuta en el mismo proceso que el código que lo llama. Hay tres tipos genéricos de bibliotecas:

    1. Bibliotecas estáticas: son la variedad original. Consisten en un archivo de almacenamiento (generalmente formato AR) con una gran cantidad de archivos de objetos dentro, uno para cada función en la biblioteca. Los archivos de objetos se vinculan al ejecutable que los usa, por lo que un ejecutable que usa solo bibliotecas estáticas es esencialmente 100% independiente de cualquier otro código. En los sistemas UNIX, generalmente tienen una .aextensión. El concepto de bibliotecas estáticas no existe realmente fuera de los lenguajes de programación compilados.
    2. Bibliotecas dinámicas: son el tipo de biblioteca más común que se usa hoy en día. Una biblioteca dinámica es un archivo de objeto especial, generalmente con una .soextensión en UNIX ( .dlles el estándar en Windows), que los ejecutables que lo usan cargan en tiempo de ejecución. La mayoría de lo que encontrará en /liblos sistemas de producción son bibliotecas dinámicas.
    3. Módulos: es el equivalente de una biblioteca dinámica para un lenguaje interpretado. El manejo es un poco diferente al de un lenguaje compilado y, a diferencia de un lenguaje compilado, es posible que un archivo sea tanto un módulo como un ejecutable (consulte http.serverla biblioteca estándar de Python para ver un ejemplo).
Austin Hemmelgarn
fuente
Sin olvidar los archivos de script, que son un caso especial de ejecutables, ya que dependen de un ejecutable binario ( bash, python) para ejecutarse. Además, los scripts en /libpueden ser utilizados por otros scripts; compara los módulos de Python.
Murphy
1
Eso cae bajo 'interpretado por algún programa intermediario . Tow of the examples I listed for that (pydoc' y cowsay) son scripts.
Austin Hemmelgarn
Aclaración al n. ° 3: los módulos son bits de código cargables que se utilizan para ampliar la funcionalidad. Los módulos Apache / php son un buen ejemplo para su parte de scripts interpretados, pero los módulos del kernel también cuentan ... También agregaría un punto para cubrir los lenguajes interpretados en su mayoría humanos como scripts para los varios shells, php, perl, etc. por FHS iría en un directorio / bin o / sbin ya que son programas ejecutables
ivanivan
Los módulos como extensiones suelen denominarse complementos. La elección de nomenclatura de Apache se basó en el antiguo estándar UNIX de llamar a los módulos de controladores de kernel, y eso ahora se ha convertido en una terminología común con los servidores web (debido a la comercialización), pero ese es un caso extraño en comparación con la mayoría de los otros softwares, que casi universalmente usan 'plugin' 'o' extensión 'cuando se refiere a eso.
Austin Hemmelgarn