¿Es Linux binary universal para todo tipo de distribuciones?

15

Sucede que instalo el simulador modelo sim VHDL en Linux. El manual dice que solo es compatible con RedHat o Suse, pero solo intenté instalarlo en Ubuntu. Y podría instalarlo sin ningún problema.

ingrese la descripción de la imagen aquí

  • ¿Es Linux binary universal para todo tipo de distribución? Quiero decir, si hago un programa de distribución A, ¿puedo estar seguro de que se ejecutará en Linux?
  • ¿Por qué la mayoría del proveedor del programa comercial dice que el programa se ejecuta en una distribución específica? (principalmente Redhat y Suse, no ubuntu)
prosseek
fuente

Respuestas:

15

Estas son dos preguntas:

¿Es un binario de Linux universal para todas las distribuciones?

Depende:

  • Si el programa no usa nada fuera del kernel de Linux, será universal excepto por la pregunta de 32 o 64 bits. Un "hello world" de Linux (un programa minimalista que simplemente imprime "hello world" en una ventana de terminal) probablemente podría ser independiente de la distribución.
  • Si el programa está utilizando una biblioteca o servicio que no sea del núcleo (que es la mayor parte de Linux, el núcleo es bastante pequeño), existen diferencias en las bibliotecas que se incluyen, las versiones de estas bibliotecas y dónde se encuentran. Entonces, en este caso (el más común) las distribuciones no son iguales.

¿Por qué muchos programas comerciales dicen que solo funcionan en una o algunas distribuciones?

Debido a que hay una gran cantidad de distribuciones de Linux , y nadie quiere probar su programa en todas ellas.

Un proveedor comercial normalmente dirá que solo admite las distribuciones en las que ha probado su software. Puede o no funcionar en otras distribuciones, desde la perspectiva del proveedor, el punto es que no puede quejarse si no funciona en una distribución que no admiten.

Las distribuciones seleccionadas para la prueba dependen de lo que el vendedor espera que sus clientes estén usando. Los programas comerciales / profesionales comúnmente eligen distribuciones empresariales, posiblemente a través de un razonamiento similar a "las personas que pagaron por su sistema operativo tienen más probabilidades de pagar por nuestro software", posiblemente simplemente contando las distribuciones utilizadas por sus clientes existentes.

Vea también Mark Shuttleworth (el tipo que es la razón por la que tenemos un Ubuntu en primer lugar) sobre compatibilidad binaria entre Ubuntu y Debian : Debian es el pariente de distribución más cercano de Ubuntu.

jg-faustus
fuente
2

Tanto RedHat como SUSE tienen una larga tradición de Linux empresarial y lograron que esos paquetes sean producidos y probados para ellos. A medida que pase el tiempo, habrá más ejemplos de paquetes que han sido probados para funcionar en Ubuntu. De hecho, muchos de estos paquetes desde el año pasado están probados para funcionar con Ubuntu. A medida que Canonical llegue a acuerdos con más proveedores, habrá más paquetes certificados por Ubuntu.

Para su primera pregunta: si desea crear un programa que se ejecute en todas las distribuciones, cree un ejecutable estático (en comparación con dinámico). Un statically-linkedejecutable no depende de las bibliotecas del sistema, por lo tanto, puede funcionar entre distribuciones, siempre que la arquitectura (como Intel / AMD) sea la misma.

Aquí hay un programa,

int main(void)
{ 
  printf("Hello, World!\n");
  return 0;
}

Vamos a compilar como de costumbre

$ gcc helloworld.c -o helloworld
$ ./helloworld
Hello, World!
$ ldd helloworld
    libc.so.6 => /lib/libc.so.6 (0x00007f3cc3481000)
...
$ 
$ gcc helloworld.c -static -o helloworld_static
$ ./helloworld
Hello, World!
$ ldd helloworld_static
    not a dynamic executable
$ 

Entonces, ¿qué puedes hacer con ese programa VHDL? Obtenga el archivo .rpm y conviértalo a .deb usando alien . Luego, instale. Si funcionó, estás bien. Si no funciona, use lddpara averiguar qué archivo de biblioteca falta. En el peor de los casos, cree una máquina virtual para esas otras distribuciones de Linux y ejecute el programa allí.

usuario4124
fuente
1

En segundo lugar, respondo jg-faustus, pero también debes tener cuidado con el formato del paquete. Incluso si los ejecutables son portátiles y todas las bibliotecas necesarias están presentes, las diferentes distribuciones colocan los archivos en diferentes lugares y usan diferentes herramientas para administrar los paquetes instalados. Si el proveedor empaqueta su producto como un paquete RPM, deberá usar un paquete como ' alien 'para convertirlo e instalarlo bajo una distribución basada en DEB como Ubuntu.

Si distribuyen su software como código fuente, entonces también puede compilarlo usted mismo, en ese momento el ejecutable se adaptará a su sistema específico (pero el administrador de paquetes de ubuntu no lo sabrá).

Robots imaginarios
fuente