Este projeto investiga a complexa rede de interdependências em ecossistemas de software open source. Utilizando um dataset massivo do Libraries.io, modelamos as relações entre mais de 1.7 milhão de pacotes de software como um grafo direcionado, com o objetivo de identificar os componentes mais críticos e entender a estrutura que sustenta o software moderno.
Através de métricas de redes complexas como grau, PageRank e centralidade de intermediação, revelamos a arquitetura scale-free desses ecossistemas, identificamos os pacotes que funcionam como "pilares" da infraestrutura digital e analisamos os riscos sistêmicos associados a falhas nesses componentes centrais.
- Bruno Rodrigues Lopes de Souza -
11202321911 - Emilly Palhares Melo -
11202320270 - Raquel da Silva Rodrigues -
11202131327 - Samuel Oliveira Costa -
11202510049
Universidade Federal do ABC (UFABC), Santo André, São Paulo, Brasil
- Geral: Investigar e modelar a rede de dependências para identificar os pacotes mais centrais e estruturalmente críticos.
- Específicos:
- Extrair e tratar dados de dependência de múltiplos ecossistemas.
- Representar as relações como grafos direcionados.
- Calcular e analisar métricas de rede para identificar pacotes-chave.
- Comparar a estrutura de diferentes plataformas (PyPI, NPM, Maven, etc.).
- Discutir a resiliência e os riscos associados a falhas em pacotes centrais.
- Dataset: O estudo utilizou a base de dados completa do Libraries.io, obtida através do repositório Zenodo (DOI:
10.5281/zenodo.2536573). - Pré-processamento: O arquivo original (CSV) foi convertido para Parquet para otimizar o desempenho durante a manipulação dos dados com Pandas. Foram mantidas apenas as dependências mais recentes de cada pacote para focar a análise na estrutura atual dos ecossistemas.
- Linguagem: Python 3.11
- Análise de Dados: Pandas
- Modelagem de Rede: NetworkX
- Ambiente de Desenvolvimento: Jupyter Notebook
- Documentação e Versionamento: Markdown e GitHub
A rede foi modelada como um grafo direcionado (DiGraph), onde:
- Nós: Representam pacotes de software únicos.
- Arestas: Representam uma relação de dependência (Pacote A → Pacote B).
O grafo unificado final contém 1.758.429 nós e 14.078.099 arestas.
A análise da distribuição de graus revelou uma estrutura de rede scale-free, caracterizada por uma distribuição de lei de potência (power-law). Isso significa que a grande maioria dos pacotes tem pouquíssimas dependências, enquanto um pequeno número de hubs críticos concentra dezenas de milhares de conexões.
- Essa estrutura é robusta a falhas aleatórias, mas extremamente vulnerável a falhas em seus hubs, como
mochaeeslintno NPM.
- Mais Populares (Maior Grau de Entrada):
mocha,eslint,typescript,chaiewebpacksão os pilares do ecossistema, sendo dependências diretas de mais de 100.000 projetos cada. - Mais Influentes (PageRank): Pacotes como
mkdirpemock-fspossuem alta influência na rede, indicando que são dependências de outros pacotes já muito importantes. - Pontes Estruturais (Intermediação):
rollupewebpackfuncionam como pontes cruciais, conectando diferentes comunidades dentro do ecossistema.
A análise individual revelou "personalidades" distintas para cada ecossistema:
- Mais Coeso: CRAN (R), com apenas 3 componentes desconectados e alta clusterização, formando uma comunidade científica bem integrada.
- Mais Fragmentado: NuGet (.NET), com quase 3.000 componentes, mostrando uma rede dispersa e com alta independência entre os projetos.
- Mais Complexo e Reutilizado: NPM (JavaScript), com o maior grau médio (21.49), indicando uma cultura de reutilização massiva, mas também uma enorme fragmentação em mais de 5.000 comunidades.
As redes de dependência de software formam estruturas complexas e heterogêneas, cujo funcionamento depende criticamente de um pequeno número de pacotes centrais. A análise de redes se mostrou uma ferramenta essencial para identificar esses pontos de vulnerabilidade, fornecendo subsídios para a criação de políticas de segurança e governança mais eficazes no universo do software livre.
-
Clone o repositório:
git clone https://github.com/samuelc254/cr-ufabc.git cd cr-ufabc -
Instale as dependências:
pip install pandas pyarrow networkx matplotlib jupyter
-
Execute os Notebooks: Abra e execute os notebooks Jupyter (
.ipynb) na ordem recomendada para reproduzir a análise:processDB.ipynb: Para o tratamento e filtragem inicial dos dados.main.ipynb: Para a construção dos grafos e o cálculo das métricas.
- /reports: Contém todos os relatórios detalhados da análise, incluindo:
resultado.md: Um resumo consolidado de todas as métricas por plataforma.analise_<Plataforma>.md: Análises individuais para cada um dos 19 ecossistemas./json: Arquivos JSON com as métricas calculadas para cada plataforma.
- /imgs: Imagens e gráficos gerados para o relatório final.
- Relatorio_FINAL_IEEE.pdf: O documento final completo do projeto, com a discussão aprofundada e todas as referências acadêmicas.
Este projeto está licenciado sob a Licença MIT. Veja o arquivo LICENSE para mais detalhes.
