BSD frente a Linux 4

Esto es sólo una traducción, yo no soy el autor.

Artículo original en:
http://www.over-yonder.net/~fullermd/rants/bsd4linux/04

Los Ports

Luego está la segunda categoría, los addons. En el mundo BSD, esto se suele llamar el sistema de ports. El nombre tiene su razón de ser.

Antes, cuando se quería ejecutar un programa lo primero que había que hacer era compilarlo. Y muchas veces antes de poder compilarlo, tendrías que trastear un poco. El sistema requeriría diferentes archivos header. A veces, incluso habría que reescribir partes desde cero, por alho que no ha funcionado en tu sistema.

En otras palabras, habría que hacer un “port” a tu SO y/o tu sistema específico. Lo que se intenta con el sistema de ports es hacer todo eso por tí. También automatiza la compilación e instalación, y proporciona servicios de enpaquetamiento (para cosas como ‘desinstalación’) que no se ven en el nombre.

Pero como pasa con muchas cosas, ha sobrepasado su nombre y se ha convertido en la bestia que es hoy. La actual colección de ports de FreeBSD cuenta con cerca de 10.000 paquetes (este número, por supuesto, será mayor rápidamente porque esa es la naturaleza del desarrollo de software). La característica más evidente de los ports es que compila las cosas siempre desde las fuentes (sources), en lugar de instalar los binarios precompilados. Esto, al parecer, es otra de las diferencias evidentes que la gente de Linux que se pasa a BSD no comprende. Que se compile de las fuentes sólo es un efecto secundario, no es el propósito principal o la diferencia principal. De hecho hay paquetes binarios disponibles, esos paquetes binarios se construyen desde el árbol (tree) de ports.

Es verdad que la mayoría de los usuarios Linux instalan paquetes binarios y que la mayoría de usuarios BSD instalan compilando desde las fuentes. En parte, se debe a las herramientas proporcionadas. El sistema de ports está diseñado en torno al concepto de compilar desde las fuentes, con la capacidad de hacer e instalar paquetes binarios que son algo así como una idea de último momento, mientras que sistemas de empaquetamiento Linux como RPM, dpkg y otros están diseñados en torno al concepto de la instalación de un paquete binario, con la compilación desde las fuentes en el último momento. Algo de esto es histórico, el empaquetamiento de binarios no es un tema predominante históricamente en los sistemas Unix, como he mencionado antes. El enpaquetamiento en sí es algo más reciente. Antes, se desinstalaba y hacía todas esas cosas manualmente.

Gentoo es una distribución Linux que ha estado ganando protagonismo. Una de sus principales razones es su sistema portage, que se considera a menudo muy similar al sistema de ports de BSD. Sobre todo en que compila desde el código fuente. Eso evita una gran parte de los problemas de los paquetes binarios. Nunca lo he utilizado, pero la impresion que tengo de toda la información que hay y de lo que me han comentado gente que lo han utilizado, es que se han cogido un montón de buenas ideas y las han fusionado. Va a ser muy interesante ver cómo esto madura y progresa. Todavía es mucho más Linux que BSD, pero bien puede ser lo más cercano que hay al estilo BSD en las distribuciones Linux.

Hay ventajas en tener binarios precompilados, sobre todo el tiempo (es mucho menor), y por lo general se va a necesitar menos espacio para instalar un paquete pre-compilado, que el que sería necesario para compilar el paquete. También hay ventajas para la compilación desde las fuentes, como evitar todo tipo de inconveniencias de las versiones de librerias (mi preferido, los paquetes binarios). Puedes instalar paquetes binarios en Linux o en BSD, puedes compilar desde el código fuente en Linux o en BSD. Pero los usuarios parecen comportarse de manera diferente, ya que los sistemas están hechos de manera diferente, porque los usuarios se comportan de manera diferente … un círculo sin fin.

Creo que lo importante aquí es darse cuenta de que la diferencia entre los ports y los RPM no es sólo que se compilen los ports y que RPM solo instala. Los ports están diseñados para cubrir toda la gama de las cosas necesarias para la instalación, la codificación, el seguimiento, las dependencias, el enpaquetamiento, la desinstalación y los cambios necesarios para compilar en el sistema. Un RPM es sólo un paquete binario. Si quieres instalar automaticamente las dependencias, tienes que tener una herramienta más avanzada, como urpmi o apt-get para hacerlo. Y, puesto que es un binario, hay que lidiar con los conflictos entre las versiones de la librerias, o falta de opciones de compilación, o cualquiera de las otras limitaciones que se deban a que el paquete no ha sido compilado sobre tu sistema base.

Además, los ports, al igual que los sistemas BSD, están centralizadas. El árbol de ports es en realidad un gran árbol de carpetas clasificados, cada uno con un Makefile con algunas definiciones de variables, un archivo checksum, una lista de paquetes, y varias otras cosas posibles. Cada una de estas carpetas representa un único programa, que se representa por los archivos que hay en la carpeta. Un montón de magia negra ocurre detrás de todo esto para que cuando ejecutes un make, se encuentre y descargue el fichero desde donde quiera que sea, haga los cambios o modificaciones necesarios, encuentre e instale recursivamente todas sus dependencias, ejecute GNU configure o imake, o cuales sean los programas de preparación que son necesarios con las opciones correctas, inicia el proceso de compilación con las opciones correctas, etc.

Pero todos esos archivos en el gran árbol de carpetas se mantienen por el proyecto FreeBSD. Cuando alguien escribió/creó KDE, por ejemplo, no apareció por arte de magia en los árboles de ports de todo el mundo. Alguien tenía que escribir todo el “pegamento” necesario para construir un port para él, luego mandar los archivos al repositorio CVS de FreeBSD para que fuera incluido en la colección de ports. Así que de nuevo, hay un cierto nivel de seguridad que funciona con algunas cosas en la colección de ports. Cualquier dependencia que tenga, estará ahí, porque no se puede utilizar una dependencia que no está en los ports.

Por supuesto las cosas se rompen. Quizá la web de una dependencia desaparezca, por lo que nadie pueda descargar las spources y comenzar a instalarlo. Tal vez una nueva versión de algún programa rompa otro, que hará que las otras cosas que dependen de éste segundo programa se rompan también. Así que por supuesto que no resuelve todos los posibles problemas. Pero la incidencia de “Quiero A, que requiere B, que no encuentro” es mucho menor de lo que ocurre en los casos de sistemas descentralizados como RPM.

Para obtener información más detallada, consulte la sección del manual sobre los ports.
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/ports.html

Ver también:
BSD frente a Linux 1
BSD frente a Linux 2
BSD frente a Linux 3

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s