Estructura de un proyecto GNU

El proyecto GNU ha establecido estándares para el ordenamiento de los proyectos que han sido seguido por muchos otros proyectos, no necesariamente bajo el alero de la Free Software Foundation. Entre ellos se encuentra la disposición básica de archivos. De manera simplificada se muestra un proyecto "hola-mundo" para ejemplificar el contenido básico de gran parte de los proyectos open source.

Archivos de información de un proyecto

En la figura se muestra el árbol con el contenido de un proyecto. El directorio raíz del proyecto contiene una serie de archivos de textos que permiten mantener un control del proyecto y sirve como primer canal de comunicación con el usuario.

Figura 1. Estructura básica de un proyecto

Estructura básica de un proyecto

Archivos de información obligatorios

NEWS,

es un registro de los cambios visibles al usuario donde los cambios más recientes se deben colocar al inicio.

README,

contiene una descripción general del paquete. También es posible indicar instrucciones especiales de instalación o recomendaciones para leer el archivo INSTALL.

AUTHORS,

contiene la lista de nombres de quienes han trabajado en la aplicación.

ChangeLog,

es un registro de todos los cambios que se han efectuado en la aplicación.

COPYING,

especifica los permisos de copia y distribución de la aplicación. Es una buena idea permitir que automake cree este archivo, siempre que se desee licenciar bajo GPL.

INSTALL,

instrucciones de instalación de la aplicación. automake provee un archivo genérico, en donde siempre es aconsejable personalizarlo de acuerdo a los detalles de cada aplicación.

Archivos de información opcionales

MAINTAINERS,

contiene la lista de nombres de los responsables del proyecto para quien desee ponerse en contacto con ellos.

HACKING,

contiene instrucciones para otros desarrolladores que quieran contribuir a la aplicación. Aquí se incluyen normas de sana convivencia como es el estilo de programación, tipos de autorización para efectuar cambios, etc.

VERSION,

indica la versión del programa.

THANKS,

contiene los créditos a las personas que han contribuido al proyecto pero que no son considerados autores.

TODO,

listado de características que se necesitan llevar a cabo. Permite llevar un orden de prioridades entre los autores y facilitar que potenciales contribuyentes sepan dónde y cómo pueden contribuir. Además, para los usuarios que han solicitado alguna característica es una retroalimentación que indica que sus peticiones están siendo consideradas.

Archivos de programas y configuración

La estructura que se muestra, corresoponde a la visión del desarrollador. Cuando un programa se distribuye, se entregan en muchos casos archivos generados a partir de ciertos procesos. El caso mas característicos es el script configure, que es un script creado en forma automática.

configure.in,

contiene las reglas de verificación y construcción del proyecto. Es la base para crear el script configure. Las reglas se escriben en macros m4.

Makefile.am,

es el archivo que sirve como entrada al programa automake, quien se encargará de generar en forma automática el archivo Makefile, necesario para construir la aplicación. Debe existir un archivo Makefile.am por cada directorio del proyecto.

src/,

directorio donde se almacena el código fuente de la aplicación. Eventualmente pueden existir más directorios o con otro nombre, pero lo estándar para proyectos que no son bibliotecas o que no son múltiples aplicaciones es denomilarlo src.

autogen.sh,

script que permite automatizar la llamada a cada uno de los programas descritos en la sección. Este script no se muestra en la figura dado que no es obligatorio.