Una de las diferencias principales entre el software libre y el software propietario es el acceso al código fuente del software. Esto significa que el software libre se distribuye como archivos de ficheros fuente. Esto puede resultar poco familiar a los principiantes, porque los usuarios de software libre deben compilar ellos mismos los fuentes antes de poder usar el software.
Hay versiones compiladas de la mayoría del software libre existente. El usuario apurado no tiene más que instalar estos binarios precompilados. Sin embargo, algún software libre no se distribuye bajo esta forma, o las versiones más recientes todavía no se distribuyen en forma binaria. Más aun, si usa un sistema operativo exótico o una arquitectura exótica, un montón de software no va a estar ya compilado para Usted. Es más, compilar el software uno mismo permite conservar sólo las opciones interesantes o extender las funcionalidades del mismo agregando extensiones para obtener un software que responde perfectamente a sus necesidades.
Para compilar software, necesitará:
un compilador
(generalmente para el lenguaje C
) y un archivador
(tar);
algo de comer (en los casos difíciles, puede durar un tiempo largo). Un verdadero hacker come pizza, no tornillos;
algo de beber (por las mismas razones). Un verdadero hacker bebe cola con gas – por la cafeína;
el número de teléfono de su “gurú” tecnológico, ese que recompila el núcleo todas las semanas;
Compilar desde el código fuente generalmente no presenta muchos problemas, pero si Usted no está acostumbrado, el menor tropiezo lo puede poner en una posición dificultosa o puede hacer que desista. El propósito de este documento es precisamente mostrarle como escapar de tal situación.
Para poder traducir código fuente a un fichero
binario, es necesario efectuar una compilación. Esta
se hace generalmente sobre programas escritos en lenguaje
C
o C++
(que son los lenguajes más usados en la
comunidad de software libre, notablemente en el mundo
UNIX®). Ciertos software libres están escritos en lenguajes
que no necesitan compilación (por ejemplo perl o
shell
), pero aún así, estos necesitan algo de
configuración.
Lógicamente, la
compilación C
está hecha por un compilador C
que
por lo general es gcc, el compilador libre escrito por el
proyecto GNU. La
compilación de todo un paquete de software es una tarea compleja,
que pasa por la compilación satisfactoria de ficheros fuente
diferentes (para el programador es más fácil poner las diferentes
partes de su trabajo en ficheros separados, por varios motivos)
Para hacer más fácil esta tarea, estas operaciones repetitivas
son efectuadas por un utilitario denominado make.
Para comprender como funciona la compilación (para
poder resolver posibles problemas), uno tiene que conocer las
fases involucradas. El objetivo es convertir poco a poco un texto
escrito en un lenguaje comprensible por un ser humano entrenado
(por ejemplo, el lenguaje C
), a un lenguaje comprensible
por una máquina (o por un ser humano muy
entrenado, aunque sólo en casos raros). gcc ejecuta cuatro
programas uno tras otro, cada uno de los cuales se encarga de una
etapa:
cpp: la
primera etapa consiste en reemplazar las directivas (preprocesadores) por
instrucciones C
puras. Típicamente, esto significa
insertar un fichero de encabezado o
header
(#include
), o definir una función macro
(#define
). Al final de esta fase, se genera
código C
puro.
cc1: esta
fase consiste en convertir el C
en lenguaje
ensamblador. El código generado depende de la
arquitectura de destino.
as:
esta fase consiste en generar el código
objeto (o código binario) a partir del lenguaje
ensamblador. Al final de esta fase, se generará un fichero con
extensión .o
.
ld: la
última fase (la “edición de vínculos”, en inglés
linkage) ensambla (o vincula) todos los ficheros
objeto (.o
) y las bibliotecas asociadas,
y produce un fichero ejecutable.
Una distribución de software libre correctamente estructurado siempre tiene la misma organización:
Un fichero
denominado INSTALL
, que describe el proceso
de instalación.
Un fichero
denominado README
, que contiene información
general relacionada con el programa (descripción breve, autor,
la URL desde donde se puede bajar, documentación relacionada,
vínculos útiles, etc). Si falta el fichero
INSTALL
, generalmente el fichero
README
contiene una descripción breve del
procedimiento de instalación.
Un
fichero denominado COPYING
, que contiene la
licencia o describe las condiciones de distribución del
software. A veces lo reemplaza un fichero denominado
LICENSE
, con el mismo contenido.
Un fichero
denominado CONTRIB
o
CREDITS
que contiene una lista de las
personas relacionadas con el software (participación activa,
comentarios pertinentes, programas de terceros, etc.)
Un fichero
denominado CHANGES
(o, con menor
frecuencia, NEWS
, que contiene las mejoras
y las correcciones de los bugs
(errores en el software).
Un fichero
denominado Makefile
(consulte
la sección Sección 4.1, “Make”), que permite compilar el
software (es un fichero que necesita make). Generalmente
este fichero no existe al principio y se genera durante el
proceso de configuración.
Bastante seguido, un fichero
configure
o Imakefile
,
que permitirá generar un fichero Makefile
nuevo personalizado para un sistema en particular (consulte
Sección 3, “Configuración”).
Un directorio que
contendrá los fuentes, y donde generalmente se almacena el
fichero binario al final de la compilación. Por lo general, este
directorio se denomina src
.
Un directorio que
contiene la documentación relacionada con el programa
(generalmente en formato man o en formato
Texinfo
), cuyo nombre es, por lo general,
doc
.
Eventualmente, un directorio que contiene los datos propios del programa (típicamente, los ficheros de configuración, los ejemplos de los datos producidos, o ficheros de recursos)