O Kernel de Linux: recursos e cultura organizativa
Neste momento, estamos capacitados para entender a grosso modo o funcionamento de calquera proxecto de software libre. Debido á súa importancia imos iniciar unha serie de post onde analizaremos -dende todos os puntos de vista tratados neste blog- o kernel de linux.
RECURSOS e TECNOLOXÍAS USADAS
Nun primeiro acercamento ó proxecto teremos que mapear os recursos que posee e o modo de interacción dos colaboradores. En primeiro lugar identificamos as ferramentas máis habituais:
Como característica principal vemos que o repositorio usado no kernel non é svn, senón git. Este sistema de control de versións é distribuido, polo que o fluxo de traballo é un pouco diferente do que vimos en svn. Na propia páxina de git hai extensa documentación sobre cómo usalo. Un documento moi recomendable é Git from the bottom up [PDF].
Outro método para obter información do proxecto é baixarse o código fonte directamente do repositorio. Unha vez localizada a árbore de repositorios, identificamos a rama que corresponde coa última versión do kernel. Descargámolo e executamos o programa sloccount para coñecer o número de liñas de código de cada linguaxe de progamación no proxecto:
cd /tmp
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
cd linux-*
sloccount .
Como resultado obteremos (entre outras cousas) un listado de linguaxes usados e liñas de código de cada un deles. Neste caso, o código escrito en ansic supón un 96% do total. Deste modo temos idea de qué tecnoloxías son maioritarias no proxecto.
Por outra banda, podemos atopar arquivos de interese neste repositorio (x ex: MAINTAINERS, que nos dirá o mantedor de cada módulo).
MODULARIDADE e INTEGRACIÓN
Outro dos puntos importantes que debemos entender é a cultura de colaboración no proxecto: ¿cómo interactúan entre eles? ¿cómo se envían parches? ¿usan wikis ou listas de correo para xestionar o traballo que debe ser feito?
Para tratar de responder a estas preguntas, identificamos 2 recursos principais:
Aínda que o modo de facer as cousas, a cultura organizativa, só se pode aprender interactuando dentro da comunidade, sí podemos identificar algúns dos puntos claves do proxecto.
Como dixemos, a modularidade do traballo é un factor clave de cara a distribuir as tarefas o máis posible e obter participación. No kernel, resolven esta cuestión dividindo o proxecto en múltiples módulos nos que participar. Por outra banda, dividir o proxecto en múltiples partes require un proceso de integración posterior.
Este proceso, consiste nun fluxo continuo e iterativo de revisión de parches e ata que éstos finalmente se integran no que será o kernel pasan por varias etapas de revisión. Os aspectos clave de todo o proceso son:
- Revisión de parches en listas de correo de cada subsistema: os parches con novas funcionalidades son enviados á lista de correo correspondente (do módulo ou subsistema) onde se discuten e revisan. Logo de pasar a validación o mantedor pode integralo no seu repositorio. Posteriormente ese conxunto de parches pasan a módulos ou subsistemas superiores repetindo o proceso.
- Árbores de integración: máis alá do proceso anterior de integración ó longo da cadea de subsistemas, existen 2 árbores especialmente dedicados á integración transversal de parches que veñen de diversos sistemas. Éstos son o mm tree (árbore de xestión de memoria) e o linux-next, xestionados por Andrew Morton e Stephen Rothwell respectivamente. A súa función consiste en testear que os parches de varios subsistemas inferiores traballan en conxunto previo ó paso á rama de desenvolvemento principal (mantida por Linux Torvalds).
Este sistema xerárquico de integración e revisión, garante un control de calidade baseado na revisión do código de forma continua e por múltiples programadores. Por outra banda, ferramentas avanzadas de xestión de código (git) e parches (quilt) facilitan o traballo de integración dos programadores.
Con todo esto temos aproximado un primeiro intento de comprensión da cultura dos hackers do kernel, do seu modo organizativo: xerárquico (o traballo delegado en varios subsistemas) á vez que meritocrático (continua revisión de parches a través de listas de correo). Un modo de traballo que lles permite obter un produto de alta calidade cada 8/10 semanas.
Trackbacks
Trackbacks are closed.
[…] O kernel é un gran proxecto con moitos módulos e código de diversos autores coa posibilidade de ter licencias diferentes. Porén, debido a que nun primeiro momento foi licenciado coa GPLv2, as aportacións posteriores teñen que ser compatibles con esa licencia. […]