Cosas que añadir Cosas que añadir

«Atrás

¿ Quién desarrolla el kernel de Linux ? (Traducción)

Dejo aquí un artículo que hace un tiempo traduje, de la Linux Foundation, que habla sobre cómo funciona y a qué ritmo evoluciona el desarrollo del núcleo de Linux. Es de Abril del 2008, pero ilustra bastante bien la enorme velocidad que puede alcanzar el desarrollo de un proyecto de Software Libre de tamaña envergadura. Desde el punto de vista de la Ingeniería del Software resulta sorprendente los buenos resultados que se alcanzan en el kernel. Aquí viene la traducción de éste original

Desarrollo del Núcleo de Linux (Abril 2008)

Cómo va de rápido, quién lo está haciendo, qué están haciendo, y quien lo patrocina

Por Greg Kroah-Hartman, SuSE Labs / Novell Inc.,
Jonathan Corbet, LWN.net
,
Amanda McPherson, The Linux Foundation
,

Traducido por Rafael Ruiz . Esta traducción es de dominio público. El artículo original tiene unos términos de uso CC-A 3

El núcleo, que forma el corazón de los sistemas Linux, es el resultado del proyecto de software colaborativo más grande jamás emprendido. Distribuciones regulares cada 2 o 3 meses hacen entrega de actulizaciones estables a los usuarios de Linux, todas ellas con características significativas nuevas, soporte a nuevos dispositivos, y rendimiento mejorado. La tasa de cambio en el kernel es alta, y en crecimiento, con casi 10.000 parches añadidos a las recientes distribuciones del kernel. Cada una de estas versiones contiene el trabajo de casi 1.000 desarrolladores representados en cerca de 100 empresas.

Desde 2005, unos 3.700 desarrolladores individuales de unas 200 empresas han contribuido al kernel. Así, el kernel de Linux se ha convertido en un recurso común desarrollado a escala masiva por empresas que son feroces competidoras en otros terrenos.

 Introducción

El núcleo de Linux es el software de más bajo nivel ejecutándose en un sistema Linux. Se encarga de manejar el software, ejecutar los programas de los usuarios y de mantener la seguridad general y la integridad del sistema entero. Es este núcleo, el que, tras su lanzamiento inicial en 1991 por Linus Torvalds, catapultó el desarrollo de Linux como un todo. El núcleo es una parte relativamente pequeña en un sistema Linux completo (muchos otros grandes componentes vienen del proyecto GNU, de los proyectos GNOME y KDE, el proyecto X.org y otras fuentes ), pero es el corazón que determina cómo de bien funcionará el sistema, y es el fragmento que es realmente único en Linux

El núcleo de Linux es un proyecto interesante de estudiar por un buen número de razones. Es uno de los más grandes componentes de prácticamente cualquier sistema Linux. Tiene como característica uno de los procesos de desarrollo más veloces e involucra a más programadores que cualquier otro proyecto de software libre. Este artículo examina cómo funciona ese proceso, centrándose en los tres últimos años de la historia del kernel, representados en los lanzamientos de las versiones 2.6.11 a 2.6.24.

Modelo de desarrollo

Con la serie 2.6.x, el kernel ha cambiado a un modelo relativamente estricto basado en distribuciones periódicas. En la 'Cumbre de Desarrolladores del Kernel' en Ottawa, Canada, 2005, se decidió que los lanzamientos de versiones del kernel se harían cada 2-3 meses, siendo cada una, una distribución 'mayor' en la que se incluyen nuevas características y cambios internos en el API.

Este ciclo tan rápido de distribuciones se eligió como medio de tener nuevas características para los usuarios de una manera estable, con un retardo mínimo. El resultado es que el nuevo código – características, drivers de dispositivos, etc – está disponible en un kernel estable a los pocos meses de su terminación, minimizando o eliminando la necesidad de los distribuidores de portar código en desarrollo a distribuciones estables. De esta forma los kernels lanzados por los distribuidores contienen menos cambios 'específicos-de-la-distribución', derivando en una mayor estabilidad y menores diferencias entre distribuciones.

Cada lanzamiento de la rama 2.6.x es una versión estable, que se hace disponible cuando la lista de bugs grandes se ha hecho tan pequeña como sea posible. Para problemas que aparecen después de la distribución de la versión, existe la rama (branch) “-stable” como forma de liberar correciones rapidamente a la comunidad. Esto se entiende mejor con el diagrama de la Figura 1.

Figura 1: Ciclo de lanzamientos del Núcleo Linux

Figura 1 – Ciclo de Distribución del Kernel Linux

El equipo del kernel liberó el 2.6.19 como una 'versión estable'. Los desarrolladores entonces empezaron a trabajar en nuevas funcionalidades, y empezaron a liberar versiones 'Release Candidate' como kernels en desarrollo para que la gente pudiera ayudar en las pruebas y depurar los cambios. Cuando todos estuvieron de acuerdo en que la versión de desarrollo era suficientemente estable, se liberó como el kernel 2.6.20

Mientras se desarrollaban nuevas funcionalidades, se iban distribuyendo las versiones 2.6.19.1, 2.6.19.2 y otras, conteniendo actualizaciones de seguridad y correción de fallos.

Este artículo se centra exclusivamente en las principales distribuciones 2.6.x, excluyendo las actualizaciones de “-stable”. Éstas son pequeñas actualizaciones y, en algún caso, el diseño del proceso de desarrollo exije que cambios aceptados para -stable tengan que ser aceptados también en la línea principal para la siguiente versión mayor.

Frecuencia de lanzamiento de versiones

Cuando en un principio los desarrolladores del kernel decidieron adoptar este nuevo ciclo de desarrollo, se dijo que se liberaría un nuevo kernel cada 2-3 meses, para no tener que 'portar hacia atrás' nuevos desarrollos. En la Tabla 1 se pueden ver los días transcurridos entre cada distribución:

Figura 1 Frecuencias de lanzamiento del Núcleo

Tabla 1 – Frecuencia de distribuciones del kernel.

Resulta que tenían razón, con una media de 2,7 meses entre versiones

Índice de Cambio

Cuando se prepara un trabajo para enviarlo al kernel, los desarrolladores dividen sus cambios en pequeñas unidades individuales llamadas 'parches'. Estos parches normalmente hacen solo una cosa en el fuente; se construyen uno sobre otro, modificando el código añadiendo, cambiando o quitando líneas. Cada parche debería, al ser aplicado, conducir a un kernel que aún compila y funciona adecuadamente.

Esta disciplina fuerza a los desarrolladores del núcleo a dividir sus cambios en pequeñas piezas lógicas; como resultado, cada cambio puede ser revisado para la corrección y calidad del código. Otro resultado es que el número de cambios individuales que se incluyen en cada versión del kernel es muy grande, como observamos en la Figura 2:

Cambios realizados por lanzamiento de nueva versión

Figura 2 – Cambios por versión del kernel.

Tomando en cuenta la cantidad de tiempo necesario para cada versión del kernel, uno puede llegar al número de cambios aceptados en el kernel por hora. Se pueden ver los resultados en la Figura 3:

Figura 3 – Cambios por hora en cada versión del kernel.

Así, desde la versión 2.6.11 a la 2.6.24 (un total de 1140 días), ha habido, de media, 2,83 parches aplicados al kernel, tres por hora. Y estos son sólo los que fueron aceptados. La habilidad de mantener esta tasa de cambios durante años no tiene precedente en ningún proyecto público de software.

Tamaño de los fuentes del Kernel

El kernel de Linux ha ido creciendo en tamaño a lo largo del tiempo en la medida en que se añadía soporte a más hardware y nuevas características.. Para los números que siguen hemos contado todo lo que se incluía en cada versión como 'código fuente', incluso a pesar de que u8n pequeño porcentaje del total son los scripts usados para configurar y compilar el kernel, así como una pequeña cantidad de documentación. Estos ficheros, también son parte del trabajo mayor, y también merecen ser cuantificados.

La información de la figura 4 muestra el número de ficheros y líneas en cada versión del kernel:

Figura 4 – Tamaño por versión del kernel

A lo largo de las diferentes versiones, el equipo del kernel ha tenido una tasa de crecimiento del 10 por ciento anual, un número impresionante dado el tamaño del árbol del código. Pero el kernel no sólo crece. Con cada cambio que se hace en el árbol del código, se añaden, se modifican y se borran líneas para cumplir con las necesidades de los cambios. Observando estos números, divididos por días, muestra lo rápido que el árbol del código del kernel se desarrolla en el tiempo. Se puede ver esto en la figura 5:

Figura 5 – Tasa de cambio por versión del kernel

Resumiendo estas cifras se llega al impresionante número de 3.621 líneas añadidas, 1.550 líneas borradas y 1.425 líneas cambiadas cada día en los últimos 2 años y medio. Esta tasa de cambios es más grande que la de cualquier otro proyecto público de software de cualquier tamaño.

Quién hace el trabajo

El número de diferentes desarrolladores que desarrollan el kernel y las empresas identificables que patrocinan este trabajo se ha ido incrementando a lo largo de las diferentes versiones del kernel, como se puede ver en la tabla 2:

Tabla 2 – Número de desarrolladores individuales y empleadores

De hecho, la comunidad de desarrollo individual se ha duplicado en los últimos 3 años.

A pesar del gran número de desarrolladores individuales todavía existe una cantidad relativamente pequeña que hacen la mayoría del trabajo. En los últimos tres años los 10 desarrolladores individuales de la cabeza de la lista han aportado casi el 15 % de los cambio, y los 30 primeros de la lista han aportado el 30 %. La lista de desarrolladores individuales, el número de cambios que han aportado y su porcentaje sobre el total se pueden ver en la Tabla 3:

Tabla 3 – Contribuciones individuales al kernel.

Quién patrocina el trabajo

El núcleo de Linux es un recurso utilizado por una gran variedad de empresas. Muchas de estas nunca han participado en el desarrollo del kernel; están satisfechos con el software tal cual es y no se sienten en la necesidad de ayudar en la conducción de su desarrollo. Pero, como se ve en la Tabla 4, un número creciente de empresas trabajan en mejoras del kernel.

Tabla 4 – Empresas trabajando para la mejora del kernel

Arriba nos centramos en empresas que tienen contratados a desarrolladores del kernel. De cada desarrollador, se ha obtenido su filiación corporativa mediante uno de los siguientes medios:

  1. El uso de direcciones de correo de la empresa.

  2. Información de patrocinio incluida en el código que aportan, o

  3. Mediante consulta directa al desarrollador.

Los números presentados son necesariamente aproximados; los desarrolladores pueden cambiar de empleo, y pueden hacer trabajo personal, de forma independiente al horario laboral. De todas formas, pueden ser lo suficientemente cercanos a la realidad como para apoyar ciertas conclusiones.

Hay un buen número de desarrolladores para los que no ha sido posible determinar su filiación corporativa; son los que hemos agrupado en 'unknown' en la Tabla 4. Con pocas excepciones, las personas de esta categoría han contribuido con 10 o menos cambios al kernel en los últimos tres años, pero el gran número de estos desarrollos hace que su contribución total sea bastante alta.

La categoría 'None', al contrario, representa a desarrolladores de los que es bien sabido que hacen sus aportaciones por su cuenta, sin contribución financiera de compañía alguna.

Los 10 máximos contribuidores, incluyendo los grupos 'unknown' y 'none' realizan el 75 % del total de las aportaciones. Es de resaltar que, incluso si se asume que todo el grupo 'unknown' trabajaban por su cuenta, alrededor del 70 % de todo el desarrollo del kernel está realizado por desarrolladores pagados por su trabajo.

Lo que vemos aquí es que una pequeña cantidad de empresas es responsable de una gran proporción de cambios en el kernel. Pero también hay una larga lista de “compañías a la cola” que han hecho cambios significativos. No debe de haber otros ejemplos de ningún recurso común tan grande que sea apoyado por un grupo tal de actores independientes de forma tan colaborativa.

Porqué las empresas patrocinan el desarrollo del Kernel.

La lista de empresas que participan en el desarrollo del núcleo incluye a la mayoría de las más exitosas firmas de tecnología de la actualidad. Ninguna de estas empresas apoyan el desarrollo como acto de caridad; en cada caso, las empresas consideran que mejorar el kernel les ayuda a ser más competitivos en sus mercados. Algunos ejemplos:

 

  • Empresas como IBM, Intel, SGI, MIPS, Freescale, HP, etcétera trabajan para asegurar que Linux corre adecuadamente sobre su hardware, Esto, a cambio, hace sus ofertas más atractivas para los usuarios de Linux, incrementando sus ventas.

  • Distribuidores como RedHat, Novell y MontaVista tienen un claro interés en hacer de Linux tan capaz como puedas ser. Aunque estas firmas compiten con fuerza contra las otras por la captación de clientes, todas trabajan a la par para hacer de Linux un producto mejor.

  • Empresas como Sony, Nokia y Samsung distribuyen Linux como componente de sus productos como cámaras de vídeo, equipos de televisión y teléfonos móviles. Contribuyendo en el proceso de desarrollo estas compañías se aseguran de que Linux continuará siendo una base sólida para sus productos en el futuro.

  • Empresas que no son del negocio de las tecnologías de la información pueden extraer beneficios en trabajar con Linux. El kernel 2.6.25 incluirá una implementación del protocolo de red PF_CAN que ha sido aportado por Volkswagen. PF_CAN permite comunicaciones fiables entre componentes en entornos propensos a interferencias, como los que podemos encontrar en automóviles. Linux dio a Volkswagen una plataforma sobre la que podía construir su código fuente para trabajo en red; después la empresa encontró provechoso aportar ese código para que pudiera ser mantenido con el resto del kernel. Http://lwn.net/Articles/253425/ para más información sobre este trabajo.

Hay un buen número de buenas razones para que las empresas apoyen el núcleo de Linux. Como resultado Linux tiene una amplia base de soporte que no depende de una única compañía. Incluso si el contribuidor más grande cancelase su participación mañana, el kernel de Linux permanecería sobre pies firmes con una comunidad de desarrollo grande y activa.

Conclusión

El núcleo de Linux es uno de más grandes y exitosos proyectos 'open source' que nunca se han llevado a cabo. La enorme tasa de cambio y el número de los contribuidores individuales muestra que tiene una vibrante y activa comunidad, provocando la constante evolución del kernel en respuesta al número de diferentes entornos en los que se usa. Hay suficientes empresas participando para financiar la enorme cantidad de esfuerzo de desarrollo, incluso si muchas compañías de las que podrían beneficiarse, eligen no hacerlo. Con la actual expansión de Linux en los mercados de servidor, escritorio y entornos embebidos, es razonable esperar que este número de empresas contribuidoras – y desarrolladores individuales – continúe incrementándose.

Agradecimientos

Los autores quieren agradecer a los miles de contribuidores individuales al núcleo; sin ellos, apuntes como éste no interesarían a nadie

Recursos

También queremos agradecer a Jonathan Corbet su herramienta gitdm que se usó para crear un gran número de estas estadísticas. La información para este artículo fue extraída directamente de las versiones del kernel de Linux encontradas en el sitio web kernel.org y del repositorio git del kernel. Algunos de los logs del repositorio git fueron limpiados a mano debido a los cambios de direcciones de correo a lo largo del tiempo, y correcciones menores en la información de autoría. Se usó una hoja de cálculo para computar las estadísticas. Todos los logs, scripts, y hojas de cálculo se pueden encontrar en http://www.kernel.org/pub/linux/kernel/people/gregkh/kernel_history.

  • Basado en un artículo originalmente publicado en el Simposio Linux 2006

Comentarios
Añadir comentario

Cachondo!!

Publicado el día 17/03/11 16:00.

Responder Arriba Editar