Descargar

Debian 3.1 (Sarge) como caso de estudio de medición de Software Libre: resultados preliminares

Enviado por [email protected]


    Resumen: el sistema operativo Debian es una de las distribuciones GNU/Linux más populares y no sólo por la cantidad de usuarios finales que tiene sino también porque se utiliza mucho como base para crear otros sistemas. Al margen de su popularidad, es también una de las mayores compilaciones de Software Libre realizadas, por lo que es un buen punto de partida para analizar el estado actual del Software Libre (a veces conocido como Open Source). Este trabajo es un estudio preliminar acerca de la nueva versión de Debian (la 3.1, conocida también como Sarge), que ha sido publicada oficialmente hace pocas semanas. Mostraremos el tamaño de Debian en número de líneas de código fuente (cercano a los 230 millones), qué lenguajes de programación se utilizan, cuál es el tamaño de los paquetes que integran la distribución y qué coste estimado tiene, mediante la aplicación de técnicas clásicas de estimación de costes. Esto último nos puede dar una idea del coste que tendría crear Debian 3.1 desde cero (alrededor de ocho mil millones de dólares).

    Palabras clave: COCOMO, Debian, Ingeniería del Software Libre, líneas de código, Linux, Software Libre.

    1. Introducción

    El 6 de junio de 2005, el proyecto Debian anunció el lanzamiento oficial de la versión3.1 de Debian GNU/Linux, conocida como "Sarge", después de casi tres años de desarrollo[6]. La distribución Debian la prepara el proyecto Debian, un grupo de casi 1.400voluntarios (también conocidos como desarrolladores) cuyas tareas principales son la adaptación y empaquetado de los programas incluidos en la distribución [11]. Los desarrolladores de Debian empaquetan los programas que obtienen de sus autores originales(lo que en la jerga se conoce como upstream), asegurándose de que se integra bien con el resto del sistema Debian. Por esta razón, hay una serie de reglas que debe cumplir todo paquete y que están detalladas en el manual de Políticas de Debian [5]. Debian 3.1 incluye la mayoría de los paquetes de software libre disponibles en el momento de su publicación. Sólo en la distribución principal, compuesta únicamente de Software Libre, SL, (de acuerdo con las reglas del SL en Debian), aparecen más de8.600 paquetes fuente. La distribución completa incluye casi 15.300 paquetes binarios, que los usuarios pueden instalar fácilmente a partir de varias fuentes de distribución, incluyendo Internet.

    En este artículo hemos analizado este sistema, mostrando su tamaño, y comparándolo con otros sistemas GNU/Linux contemporáneos1 . Decidimos escribir este artículo como una actualización de aquél otro titulado Contando Patatas [8], y Measuring Woody [1], que se hicieron para las versiones anteriores del sistema Debian.

    La estructura de este artículo es ésta: en la siguiente sección presentaremos brevemente los métodos usados para recolectar los datos mostrados aquí; después veremos los resultados de medir Debian 3.1 (incluyendo cuentas totales, por lenguajes de programación, los mayores paquetes, etc); en la sección 3 se comentan brevemente los resultados y su interpretación, y se presentan comparaciones con Red Hat Linux y otros sistemas operativos, sean libres o privativos; finalmente, mostraremos nuestras conclusiones y las referencias citadas.

    2. Recolección de los datos

    En este trabajo sólo hemos considerado la sección principal (main main), que es la más im- portante y, sobre todo, la más grande en cualquier versión de Debian. Está compuesta únicamente de SL (de acuerdo con las reglas del software libre de Debian [7]). En Debian hay otras secciones, como non-free y contrib contrib, que no vamos a tratar aquí.

    La técnica usada para recolectar los datos es la siguiente: en primer lugar, se obtienen los paquetes fuente del sistema a partir de los archivos públicos disponibles en Internet, como archive.debian.org <ftp://archive. debian.org>. En Debian podemos conseguir los paquetes fuente o los binarios. En este estudio hemos considerado los paquetes fuente, mientras que los usuarios suelen obtener los binarios para instalarlos directamente en un ordenador. Cada paquete fuente en Debian puede servir para generar uno o más paquetes binarios.

    Como segundo paso, hemos analizado los paquetes, con la ayuda de la herramienta SLOCCount SLOCCount2 [12]. La cuenta de líneas de código es tan sólo una estimación, debido a ciertas características de la herramienta (fundamentada en heurísticas para la identificación del código fuente y su lenguaje de programación) y el criterio que se ha seguido para la selección de los paquetes a contar [8].

    El último paso comprende la identificación y eliminación de los paquetes que aparecen varias veces aunque en diferentes versiones (por ejemplo, esto es lo que ocurre con el

    Tabla 1. Cuentas de líneas de código fuente de Debian 3.1 por lenguaje de programación. compilador GCC), con el fin de no contar varias veces el mismo código fuente.

    Esto puede hacer que nuestra estimación quede por debajo del valor real (pues las versiones más antiguas no estarán necesariamente completamente contenidas en las más modernas).

    En ocasiones, sin embargo, hemos estimado tantas diferencias entre las diferentes versiones, que hemos dejado ambas. Por ejemplo, hemos contabilizado emacs y xemacs, o gcc y gnat (compilador de Ada de GNU). El resultado final de este paso es un conjunto de informes y análisis estadísticos, tomando los datos generados en pasos anteriores y analizándolos desde diferentes puntos de vista. Estos resultados son los que presentamos a continuación.

    3. Resultados de las medidas sobre Debian 3.1

    En total, siguiendo la metodología descrita, hemos contado 229.496.000 líneas de código fuente en Debian 3.1. En las siguientes secciones se presentan resultados clasificados (con todos los números de manera aproximada; véase [4] para mayor precisión).

    3.1. Lenguajes de programación

    Las cuentas de líneas de código fuente (SLOC, Source Lines Of Code), en número y porcentaje, clasificadas por lenguaje de programación, son, de manera muy aproximada, las que aparecen en la tabla 1 1.

    Por debajo del 0,5% hay otros lenguajes como Objective C (0,37%), ML (0,31%), Yacc (0,29%), Ruby (0,26%), C# (0,23%) o Lex (0,10%). Por debajo del 0,1% encontramos algunos lenguajes más.

    El gráfico de tarta de figura 1 muestra la importancia de unos lenguajes de programación sobre otros. Casi todos los pa-quetes están escritos en lengua-je C, pero destaca también la abundancia del C++, siendo el lenguaje más usado en algunos de los paquetes (como OpenOffice.org o Mozilla).

    El siguiente lenguaje en importancia es el de Shell, principalmente por su uso en guiones de configuración y otras tareas auxiliares de muchos paquetes. Sorprendentemente, destaca la importancia del lenguaje LISP, aunque se explica por ser el lenguaje principal de algunos paquetes grandes, como emacs, y su uso en menor medida en muchos otros.

    Aunque no se muestra en estos resultados, hay una tendencia a la pérdida de importancia de C frente a otros lenguajes; mientras que se observa un crecimiento muy importante de otros lenguajes como Java, PHP y Python.

    3.2. Los paquetes más grandes

    A continuación daremos una lista de los paquetes más grandes (todos ellos tienen más de 2 millones de líneas de código), ordenada por tamaño, del sistema Debian 3.1. Para cada paquete daremos su nombre, su versión, el número de líneas de código fuente totales (SLOCs), la proporción de lenguajes usados y una pequeña descripción del propósito del paquete.

    􀂄 OpenOffice.org (1.1.3): 5.181.000 SLOC.

    C++ supone 3.547.000 SLOC. C supone 1.040.000 SLOC. Además, se encuentra código escrito en 15 lenguajes distintos, tanto lenguajes usados para guiones (scripts), como Shell, TCL, Python y AWK; como otros lenguajes (Pascal, Java, Objective-C, List, etc). Openoffice.Org es un completo paquete ofimático.

    􀂄 Linux kernel (2.6.8): 4.043.000 SLOC. C supone 3.794.000 SLOC, mientras que el resto lo componen makefiles, ensamblador y scripts en varios lenguajes. Linux es el núcleo del sistema operativo Debian 3.1.

    􀂄 NVU (N-View) (0.80): 2.480.000 SLOC. Casi todo está escrito en C++, con 798.000 SLOC. Hay otros lenguajes, sobre todo para guiones. N-View es un sistema de autoría web, que rivaliza con sistemas privativos como Microsoft FrontPage.

    􀂄 Mozilla (1.7.7): 2.437.000 SLOC. Casi todo está escrito en C++, con más de 1.567.000 SLOC, aunque tiene una parte importante de C, con 789.000 SLOC. Mozilla es un conjunto de programas para el usuario de Internet (navegador web, cliente de correo, etc).

    􀂄 GCC-3.4 (3.4.3): 2.422.000 SLOC. C supone 1.031.000 SLOC, mientras que Ada comprende 485.000 SLOC y C++, 244.000 SLOC. El resto de los lenguajes tienen una presencia anecdótica. GCC es la popular colección de compiladores de GNU.

    􀂄 XFS-XTT (1.4.1): 2.347.000 SLOC. Casi todo está escrito en lenguaje C, con 2.193.000 SLOC. Es un servidor de tipos de letra XTrueType.

    􀂄 XFree86 (4.3.0): 2.316.000 SLOC. Principalmente está escrito en C, con 2.177.000 SLOC. Es una realización del sistema X Window, que incluye servidor y programas básicos.

    􀂄 VNC4 (4.0): 2.055.000 SLOC. VNC4 es un sistema de acceso remoto a la consola, hecho fundamentalmente en lenguaje C, con 1.920.000 SLOC.

    􀂄 Insight (6.1): 1.690.000 SLOC, principalmente escrito en C (1.445.000 SLOC). Insight es un depurador gráfico basado en GDB.

    􀂄 kFreeBSD5-source (5.3): 1.630.000 SLOC. Se trata del código fuente del núcleo del sistema operativo FreeBSD 5.3, que es la base del futuro sistema Debian GNU/kFreeBSD.

    􀂄 Obsérvese que esta clasificación es dependiente de las decisiones tomadas por los desarrolladores a la hora de dividir el soft-

    Figura 1. Distribución en líneas de código para los lenguajes más usados en Debian 3.1.

    Figura 2. Tamaños de paquete en Debian 3.1 (el número de líneas, SLOC, se representa en escala logarítmica).

    Ware en paquetes. Por ejemplo, si todas las extensiones de emacs hubiesen sido empaquetadas juntas, posiblemente estaría en la lista de los diez paquetes más grandes. De todas formas, el paquete fuente Debian normalmente coincide con lo que el autor original considera como paquete, que se basa normalmente en principios de modularización del software.

    La figura 2 muestra los tamaños de todos los paquete de Debian 3.1. Hemos observado en el estudio de las diferentes versiones de Debian publicadas, desde la versión 2.0 (publicada en 1998) hasta la 3.0 (de 2002), que el tamaño medio de los paquetes se mantiene alrededor de las 23.000 líneas de código (véase [10]). En el caso de Debian 3.1 este tamaño medio se ha incrementado a las 26,600 líneas. El motivo de este incremento no está claro, pero puede deberse a que el número de paquetes crece a un ritmo mayor que el de desarrolladores, lo que hace difícil ese equilibrio.

    3.3. Estimaciones de coste y esfuerzo

    El modelo COCOMO ( COnstructive COst MOdel) [2] nos sirve para dar una estimación aproximada del esfuerzo económico y humano requerido para generar un programa de cierto tamaño. Como entrada, toma el tamaño en líneas de código fuente (SLOC).

    Dado que estas estimaciones están pensadas para los procesos ‘clásicos’ de generación de software y para proyectos grandes, los resultados obtenidos deben interpretarse siempre con mucha precaución. En cualquier caso, utilizaremos el modelo básico de COCOMO para dar una estimación del coste basada en el tamaño.

    Utilizando el número de líneas de código medidas en Debian, los resultados que ofrece el modelo COCOMO básico son los siguientes:

    􀂄 Número de líneas de código (SLOC): 229.495.824

    􀂄 Esfuerzo estimado: 714,440.52 meseshombre (59,536.71 años-hombre). Según la fórmula: 2.4 * (KSLOC^1.05)

    􀂄 Tiempo estimado de desarrollo: 105.84 meses (8.82 años). Según la fórmula: 2.5 * (Effort^0.38)

    􀂄 Coste económico estimado: 8,043,000,000 dólares americanos. Para llegar a estos resultados, cada proyecto ha sido estimado como si se desarrollase independientemente de los demás (lo cual será cierto en casi todos los casos). Para calcular el coste estimado, se han utilizado los salarios medios de los programadores a tiempo completo en el año 2000, de acuerdo con [3], que era de 56.286 dólares al año, y un factor de sobrecarga de 2.4 (para más detalle sobre este factor y otros detalles del modelo de estimación, véase [13]).

    Tabla 2. Comparación de tamaño de diversos sistemas operativos.

    4. Comparación con otros sistemas

    Para darle más contexto a todos estos números, en la tabla 2 se muestran los tamaños estimados de otros sistemas operativos. Estos tamaños han sido obtenidos de diversas fuentes, mostradas en [10], y se proporcionan en líneas de código (siempre como aproximaciones).

    Casi todos estos números son estimaciones (de hecho, lo son para todos los casos, excepto para Red Hat Linux, Fedora Core y Debian) y no están detallados, de manera que es difícil saber qué se consideró como línea de código fuente en todos esos casos (por ejemplo, si se contaron los comentarios o no). Sin embargo, para el objetivo del artículo proporciona una visión suficientemente amplia.

    Nótese también que, mientras que Red Hat y Debian incluyen muchas aplicaciones, tanto Microsoft como Sun suelen incluir muchas menos (y en cualquier caso, son aplicaciones más sencillas). Si se contabilizasen las herramientas que usualmente acompañan a un sistema de Microsoft o Sun completamente instalado, los tamaños serían bastante mayores. Sin embargo, también es cierto que esas aplicaciones son desarrolladas por terceros, y no sería comparable con el caso de Debian, en el que su equipo de desarrol-ladores es responsable de todo el conjunto.

    Podemos ver que las distribuciones de Linux en general y Debian 3.1 en particular, forman algunos de los mayores paquetes de software mantenidos por un equipo de desarrolladores.

    5. Conclusiones y trabajo futuro

    Debian es uno de los mayores sistemas software del mundo, probablemente el mayor. Su tamaño ha crecido versión tras versión, siendo la versión 3.1 el doble de grande que la 3.0. Los lenguajes principales utilizados para desarrollar los paquetes incluidos en Debian son, desde varias versiones, C y C++. El conjunto de C, C++ y Shell representa más del 75% de todo el código disponible en Debian. El número de paquetes continúa creciendo y se duplica aproximadamente cada dos años.

    El sistema Debian GNU/Linux, mantenido por un grupo de voluntarios distribuidos por todo el mundo, muestra en primer lugar una buena salud y una tendencia de continuo crecimiento. Independientemente de su enorme tamaño, continúa entregando versiones estables.

    Sin embargo, hay algunos aspectos que cuestionan la sostenibilidad del proyecto en el futuro. Por ejemplo, el tamaño medio nos da una evidencia de comportamiento inestable, probablemente debido a un crecimiento de los paquetes más rápido que el número de mantenedores de Debian. Por otro lado, no debemos obviar que se ha tardado casi tres años en publicar una nueva versión estable y que la fecha de publicación ha sido retrasada varias veces.

    En lo referente a otros sistemas software, no hay muchos estudios detallados en tamaño de sistemas operativos modernos. De ellos, el más destacado es el trabajo de David A. Wheeler, que midió el tamaño de Red Hat 6.2 y Red Hat 7.1. Otras referencias nos proporcionan sumas totales del tamaño de algunos sistemas de Sun y Microsoft, pero no tienen más detalle que el mencionado. En cualquier caso, Debian supera, de largo, en tamaño, a todas las demás, aunque esta comparación debe considerarse con cuidado.

    Para finalizar, es importante destacar el hecho de que este artículo ofrece estimaciones de un estudio preliminar (ya que la versión no estaba totalmente finalizada cuando se hizo). Sin embargo, creemos que es lo suficientemente precisa para llevarnos a algunas conclusiones y comparar Debian 3.1 con otros sistemas software.

    Agradecimientos

    Este trabajo ha sido financiado en parte por la Comisión Europea, dentro del CALIBRE CA, programa IST, número de contrato 004337; por la Universidad Rey Juan Carlos con el proyecto PPR-2004-42 y por la CICyT dentro del proyecto TIN2004-07296.

    Referencias

    [1] Juan José Amor, Gregorio Robles, Jesús M. González-Barahona. Measuring Woody: The size of Debian 3.0 (pendiente de publicación). Estará disponible en <http://people.debian.org/~jgb/ debian-counting/>.

    [2] Barry W. Boehm. Software Engineering Economics, Prentice Hall, 1981.

    [3] Computer World. Salary Survey 2000. <http:/ /www.computerworld.com/cwi/careers/ surveysandreports>.

    [4] Jesús M. González Barahona, Gregorio Robles, Juan José Amor. Debian Counting. <http:/ /libresoft.urjc.es/debian-counting/>.

    [5] Debian Project. Debian Policy Manual. <http:/ /www.debian.org/doc/debian-policy/>.

    [6] Debian Project. Debian GNU/Linux 3.1 released (June 6th 2005). <http://www. debian.org/News/ 2005/20050606>.

    [7] Debian Project. Debian Free Software Guidelines (part of the Debian Social Contract).<http://www.debian.org/social_contract>.

    [8] Jesús M. González Barahona, Miguel A. Ortuño Pérez, Pedro de las Heras Quirós, José Centeno González, Vicente Matellán Olivera. Contando patatas: el tamaño de Debian 2.2./ Counting potatoes: The size of Debian 2.2. Novática, nº 151 (nov.-dic. 2001), <http://www.ati.es/ novatica/2001/154/154-30.pdf> (en español); UPGRADE, vol. 2, issue 6, December 2001, <http:/ /upgrade-cepis.org/issues/2001/6/up2-6Gonzalez. pdf> (en inglés).

    [9] Jesús M. González-Barahona, Gregorio Robles, Miguel Ortuño-Pérez, Luis Rodero-Merino, José Centeno-González, Vicente Matellán, Olivera, Eva Castro-Barbero, Pedro de-las-Heras-Quirós. Anatomy of two GNU/Linux distributions. Capítulo del libro «Free/Open Source Software Development» editado por Stefan Koch y publicado por Idea Group, Inc., 2004.

    [10] Gregorio Robles, Jesús M. González-Barahona, Luis López, Juan José Amor. Toy Story: an analysis of the evolution of Debian GNU/Linux, noviembre 2004 (pendiente de publicación). Borrador disponible <http://libresoft.urjc.es/debiancounting/>.

    [11] Gregorio Robles, Jesús M. González-Barahona, Martin Michlmayr. Evolution ofVolunteer Participation in Libre Software Projects: Evidence from Debian, julio 2005, Proceedings of the First International Conference on Open Source Systems. Genova, Italy, pp. 100-107. <http:// gsyc.escet.urjc.es/~grex/volunteers-robles-jgbmartin. pdf>.

    [12] David Wheeler. SLOCCount. <http://www.dwheeler.com/sloccount/>.

    [13] David A. Wheeler. More Than a Gigabuck:Estimating GNU/Linux’s Size. <http://www.dwheeler.com/sloc>.

    Notas

    1 Los sistemas GNU/Linux se conocen también como ‘distribuciones’.

    2. Concretamente hemos utilizado la versión 2.26, que es capaz de reconocer 27 lenguajes de programación.

    Autores

    Juan José Amor Iglesias es Licenciado en Informática por la Universidad Politécnica de Madrid y actualmente realiza estudios de doctorado en la Universidad Rey Juan Carlos, de Madrid. Desde 1995 ha colaborado en diversas organizaciones relacionadas con el Software Libre: ha sido cofundador de LuCAS, el portal de documentación libre más conocido e Hispalinux, y colabora habitualmente con Barrapunto.com.

    Jesús M. González Barahona es profesor e investigador en la Universidad Rey Juan Carlos de Madrid. Empezó a trabajar en la divulgación del Software Libre al principio de los 90. Desde entonces, ha realizado numerosas actividades en este área, como la organización de seminarios y cursos y la participación en diversos grupos de trabajo en Software Libre. Actualmente, colabora con diversos proyectos de Software Libre (como Debian), con asociaciones para la defensa y divulgación del Software Libre, y es consultor en temas relacionados con la adopción del Software Libre en varias empresas. Sus intereses investigadores se centran en la Ingeniería del Software Libre, en particular en las medidas cuantitativas sobre el desarrollo del Software Libre y las herramientas distribuidas utilizadas. Es socio de ATI y coordinador de la sección de Software Libre de Novática.

    Gregorio Robles Martínez es estudiante de Doctorado en la Universidad Rey Juan Carlos de Madrid. Su actividad investigadora principal se centra en la ingeniería del Software Libre, específicamente en la adquisición de conocimiento sobre el desarrollo del Software Libre a partir de datos cuantitativos. Ha estado involucrado en el proyecto FLOSS y actualmente participa en la acción coordinada CALIBRE y el proyecto FLOSSWorld, todos ellos patrocinados por la Comisión Europea, programa IST.

    Israel Herráiz Tabernero es Ingeniero Industrial y actualmente realiza estudios de Doctorado en Informática en la Universidad Rey Juan Carlos. Descubrió el Software Libre en 2000 y desde entonces ha desarrollado algunas utilidades para la Ingeniería Química.

    Novática, revista de ATI (Asociación de Técnicos de Informática) / http://www.ati.es/novatica

    Juan José Amor Iglesias, Jesús

    M. González Barahona,

    Gregorio Robles Martínez, Israel

    Herráiz Tabernero

    Grupo de Sistemas y Comunicaciones / (GSYC),

    Universidad Rey Juan Carlos (Móstoles, Madrid)