FatELF, binarios universales para Linux
Como bien indican en Phoronix, una de las características más interesantes de Mac OS X es la existencia de los binarios universales. Este tipo de archivos permiten que un simple archivo binario pueda ejecutarse indistintamente tanto en Macs basados en PowerPC como en los nuevos Macs basados en micros x86 de Intel.
Pues bien, algo así está intentando hacer Ryan Gordon, un programador que se ha dedicado durante años a importar juegos a Linux y que ahora está tratando de sacar adelante su proyecto, llamado FatELF. El objetivo: que los binarios universales puedan entrar a formar parte de Linux.
Este formato permite que varios binarios compilados para distintas arquitecturas puedan ser combinados para dar como resultado un único archivo binario -de mayor tamaño, claro está- que permitiría ejecutar esa aplicación tanto en arquitecturas x86 como en x86_64 e incluso otras como PowerPC, MIPS, y un largo etcétera.
Por ahora Ryan Gordon ha logrado establecer la especificación y documentación de este formato de ficheros, y además ha liberado parches para el kernel de Linux y para paquetes como binutils o gdb. Faltan parches para module-init-tools, glibc, y elfutils, y uno de los objetivos es dar soporte a otras plataformas no Linux, de modo que no sólo binarios de este sistema operativo formen parte de los binarios universales, sino que otras plataformas como FreeBSD -y otros *BSD- o Solaris formaran parte de ese proyecto.
No estoy seguro del impacto que estos binarios podrían tener en el tiempo de ejecución y respuesta de las aplicaciones -así a bote pronto imagino que algo de retardo sí que pueden imponer- pero puede que las ventajas compensen. ¿Qué opináis?


















Por lo que he leido en su web, no es mas que coger los binarios especificos de cada arquitectura y juntarlos en un fichero que lleva en la cabecera información acerca de qué arquitecturas estan incluidas en ese fichero.
Por lo que a nivel del programador el ahorro en el codigo es nulo (ya que tiene que seguir programando para cada arquitectura) y a nivel de usuario se ahorra tener que elegir el paquete correspondiente a su arquitectura (a costa de, segun dicen en su propia web, muchas veces multiplicar el tamaño del fichero original tantas veces como arquitecturas se añadan, por lo que tardamos bastante mas en descargarlo).
La idea no es mala pero no lo veo demasiado útil, además, los gestores de paquetes ya nos eligen los paquetes específicos de nuestra arquitectura y rara vez nos descargamos algo que no sea mediante el gestor.
Bueno, parece algo asi como las aplicaciones portables de windows. no estaria mal, seria otra opcion, es lo bueno de linux….
Todo ayuda, pero como dice GoRaXaN, no le veo demasiada utilidad, sobre todo para los programadores.
Lo interesante seria poder hacer una libreria de 64, que funcionase ella por su cuenta en un sistema a 32(con sus limitaciones). No se programas, por lo que a lo mejor es una tonteria
Me parece muy bien, desde el punto de vista del usuario, sobre todo el que no tiene internet, o una internet de baja velocidad (en América Latina esto es normal) y tiene que bajarse programas en un cybercafé u otra PC que no es la suya y no tiene tantos conocimientos de su arquitectura. Además de la distribución de programas en soportes ópticos, como es habitual en revistas para Windows y MAC… incluso en esta alternativa es donde yo veo la mayor potencialidad.
Saludos, MB
Todo lo que sea multiplataforma es bueno porque facilita las cosas y beneficia mucho a los usuarios que pueden acceder a un catálogo más variado de software.
¡Saludos!
Pues yo no le veo mucho sentido. Quizás para x86 y x86_64, pero para el resto de arquitecturas no tiene sentido porque casi nadie de a pie las usa. Y en mac tenía sentido los binarios universales porque estaban llevando a cabo una transición de una arquitectura a otra, además de que su sistema de distribución no es como en linux que en la mayoría de los casos se usan sistemas de repositorios.
Lo de los binarios universales ya lo habia escuchado o.O (es más hasta con instaladores universales, que te instalaban paquetes sin necesidad del deb o de un rpm… muy al estilo de como instalas programas es Windows)
Ahora, la idea es buena… y de hecho algo así medio ocurre con Songbird o Firefox… que ya vienen pre-compilados o algo así tengo entendido… en sí, traen su propio ejecutable que ya solo tu corres.
Ahora, la idea de tener un compromido que tenga cada binario en cada plataforma que exista, es un arma de doble filo.
En mi caso, yo propondria un formato universal usando a medias la idea de los pre-compilados… claro, con diferencias rotundas… mmm… me imagino algo como…
Digamos que dejamos que el programador siga programando y compilando en su arquitectura favorita, pero que en vez de usar un compilador regular, use un compilador especial para portabilidad.
Ese compilador, despues de convertir en binario el archivo, separa (por medio de una base de datos) cada instrucción que es especifica de una arquitectura y deja lo demás marcado como universal. Digamos que usamos como una especie de metadatos en un puzzle para resolver el problema más tarde.
Ya luego, en la computadora del usuario, cuando este intente ejecutar el binario, lo primero que hara el sistema, es verificar si es un binario universal. Si lo es, buscara un archivo oculto que le diga si ha sido compilado ya… si no esta, llama entonces a un modulo y le manda al binario para traducción (Si no es de la arquitectura propia)
Entonces, el modulo toma al binario, y si es de la misma arquitectura local, solo lo ensambla… de no ser así, busca todas las instrucciones marcadas con el metadata y las traduce a la arquitectura local (via una base de datos universal, incluso aqui, podria incluirse en el archivo esas piesas del codigo fuente para hacerlo más fácil) para luego ensamblar de nuevo el archivo con las intrucciones traducidas, pero como un archivo oculto que será llamado la proxima vez que el usuario intente ejecutar el binario universal.
XDDD
Ahora, quien sabe si todo eso sea remotamente posible =9… pero seria mi acercamiento a la solución.
Me parece interesante, es obvio que el tamaño de los archivos se incrementara, pero esto no es tan relevante siempre y cuando el rendimiento de dichos binarios sea ágil, lo cual dependerá del ingenio del señor Gordon.
Me parece una buena idea ya que no da problems en un paquete especifico para cada arquitetura que sino un usuario normal puede descargar sim ploblemas el archivo, lo malo es que es doble trabajo para desarrolldores pero si hubiera librerias conjuntas , tambien es un buen ahrro
@Kadai, con lenguajes de alto nivel eso es posible, pero no es lo mismo entrarle con C o assembler a PowerPC que a x86.
@anonimo2
Que mal entonces que no se pueda con los otros (assembler) como dices… sin embargo, estoy seguro que de una manera u otra algo ha de ser posible hacer ^^
Es solo buscarle maneras diferentes de hacer las mismas cosas… ya en algun momento algo ocurrira que permita que eso pase y que las barreras fisicas se pasen.
Falto mencionar que asi los programas andan mas LENTO…
@juancarlospaco: No tienen por qué ir más lento, cuanto mucho perderas algunos milisegundos, y 4 o 5 ciclos de CPU (eso es muy poco, tu CPU de doble núcleo hace hace mas de 5.200.000.000 ciclos por segundo) mientras se detecta que tipo de universal es y dónde está los datos para la arquitectura deseada
@Kadai seria posible hacerlo, realmente es un reto tecnico porque deberan dise~ar estandares y nadie se pone deacuerdo en eso (principalmente en assembler, entre intel y AT&T tienen un churro y nunca lo arreglaron), pero si es posible, lo unico que no veo a nadie trabajando en eso a la clara y con muchos deseos de triunfar en la creacion de binarios estandares para linux, bsd, windows (OS X peleo eso hace tiempo, pero creo que la motivacion fue que apple piensa dropear la PowerPC y quedarse con intel 100%, no se pero creo que en el OS X 10.7 dejaran de dar soporte a PowerPC por completo y probablemente suelten eso de universal binaries porque solo se concentraran en x86)
Pues a mi me parece perfecto pues acabaria con la barrera de los programas echos para arquitecturas y sistemas de 64 bits, la cual hoy aun sigue un poquito rezagada.
Desearia mas informacion sobre todo esto, buena la info, gracias muylinux
como dicen, talvez esto solo sea mas viable entre modos de 32 y 64 bit en una misma arquitectura, ya qe es la mejor solucion para quienes no sepan si corren un So a 32 o 64… talvez el tiempo de ejecucion del FATElf no sea tan pobre, pero eso si, sera un paquete duro de descargar…
Saludos!
JaD!
Yo más que un binario multiarquitectura lo que desearía serían binarios estáticos(como el de opera), que los instalas y no te pide ninguna dependencia, y aunque serán más pesados en tamaño, el usuario seguro que lo agradece.
Además eso te da la posibilidad de instalar la versión del paquete que te de la gana, en la distro que te de la gana(ya sea estable o no).
¿Nadie ha echado en falta versiones nuevas de ciertos paquetes en distros estables? Y por un par de paquetes no vas a actualizar a una inestable.
Además de permitir la instalación directa, porque cuando te encuentras un programa empaquetado en rpm y utilizas una distro basada en Debian y viceversa, para un usuario novato es un problema que el empaquetado universal podría solucionar… idem tema dependencias…
Saludos, MB
Yo estoy de acuerdo con anónimo y MagoBlanco, lo que hace falta en GNU/Linux son instaladores estándares que funcionen en cualquier distro y que estén enlazados estáticamente, así se podría instalar cualquier versión de un programa en cualquier distro sin problemas. Por ejemplo, para yo instalar amarok 1.4 en Mandriva 2009.1 fue un tremendo problema porque el gestor de paquetes lo reconoce como un programa obsoleto y he tenido que dejar de actualiar la distro para no tener problemas.
Creo que el tema anda un poco desviado, un paquete universal no es lo mismo que binarios universales, los binarios tratan con la arquitectura del computador y los paquetes no bajan a ese nivel, sino que dependen mas de linux, es decir, si tienes una distro que use RPM en PowerPC y otro en x86, el mismi RPM funcionara porque es la distro que se encarga del trato con la arquitectura, en cambio un grep concurrente no funciona igual porque este binario si depende de la arquitectura.
Otra desventaja de paquetes universales es que el codigo fuente, es decir el que muchos paquetes de linux sean open source perderia sentido, nadie se molestaria en buscar el codigo, entonces si nadie busca el codigo ni lo utiliza cual es la diferencia de que el codigo sea cerrado? Que unos cuantos lo busquen significa que la mayoria de las personas no es participe de las filosofias detras dle codigo abierto.
Yo creo que lo del binario universal está muy interesante en cierto sentido. Es parecido a un programa en Java, pero habiéndolo desarrollado para distintas arquitecturas. La ventaja de un único ejecutable no es útil para un sistema de repositorios o para programas que sueles descargarte a veces. Es útil para empresas de videojuegos (por ejemplo) que tras una instalación, tienen un ejecutable que se encarga de todo para que un usuario sin conocimientos pueda usarlo inmediatamente. Es útil también para llevar en un pendrive tu firefox y ejecutarlo en “cualquier” PC como si fuese una aplicación java, manteniendo tus perfiles, marcadores, etc.
Sobre la velocidad, no sé cómo lo habrán diseñado, pero lo más lógico parece ser un lanzador del resto de los binarios. Ese lanzador determina la plataforma y luego lanza el binario correspondiente. Estos binarios, por lo que dice la noticia, parecen estar encapsulados en el lanzador, aunque bien podrían estar en una subcarpeta bin. De ser un mero lanzador universal, sólo tardaría un poco más (casi inapreciable) en el lanzamiento de la aplicación. Una vez lanzada, sería igual de rápida.
@anonimo:
Lo del binario estático va contra la filosofía de GNU/Linux. Todas las dependencias nos ahorran mucho espacio. Ahora que tenemos discos duros enormes, eso se puede notar poco, pero las dependencias las gestionan aplicaciones de forma automática. No tenemos que pelearnos con ellas, así no le veo mucha utilidad salvo para pequeñas aplicaciones puntuales de “usar y tirar” en las que al venir fuera de los repositorios, un único uso no merece la búsqueda de dependencias a mano.
@Anónimo:
Vale que aumenta el tamaño de los paquetes, pero para muchos programas sueltos estaría bien,y siempre se podría tener como algo opcional en la web del programa en cuestión, no?
Alguien tiene idea de si es muy complicado compilar binarios estáticos? Es decir, se necesita que el código esté hecho de alguna forma? o bastaría con poner alguna/as opción/es en el compilador?
@Anonimo eso depende del codigo, a veces para acelerar C algunos desarrolladores (incluido) bajamos a Assembler y hay si dicho programa estara lock in en una arquitectura, pero a veces esto n oes necesario.
Estoy deacuerdo con lo que dices, lo unico que casi estoy 100% seguro de que el binario estatico n ova en contra de la filosofia e GNU y/o Linux sino en contra de las de UNIX.
[...] MuyLinux Leer más: binario universal, ELF, FatELF, gnu/linux, Mac OS X Enviar a Twitter Compartir en [...]
[...] proyecto FatELF que pretendía llevar el concepto de binarios universales a Linux parece haber sido abandonado antes de llegar a algún puerto. Así lo ha declarado su creador, que [...]
[...] d'abord pour voir si les distributions décident de parier pour l'inclure d'une série. Une voie : MuyLinux Posted by Vickie J. Denton at 3:20 [...]