\section{Arquitetura} \label{sec:architecture} Com base na extensa lista de requisitos funcionais definidos pelo Governo Federal do Brasil, selecionamos alguns sistemas livres compor a solução proposta para o novo SPB. Avaliamos os sistemas que juntos poderiam fornecer o maior subconjunto possível dos requisitos. Nós também estávmos convencidos de que seria impossível fornecer todas as funcionalidade com uma única ferramenta. Do ponto de vista da arquitetura, dois requisitos eram importantes para a nova plataforma: \begin{enumerate} \item \textit{Integrar sistemas livres existentes}, com diferenças mínimas de suas versões originais; \item \textit{Fornecer uma interface de usuário unificada} entre os diferentes sistemas, bem como a autenticação centralizada. \end{enumerate} A adoção de sistemas livres existentes e a minimização de mudanças feitas localmente tiveram como objetivo ser capazes de atualizar para versões mais recentes do software original, beneficiando de melhorias e manutenção feitas pelas comunidades de projetos existentes. Proporcionar uma interface de usuário consistente em cima dessas diferentes ferramentas era necessária para fazer a transição entre os diferentes sistemas sem a percepção do ponto de vista dos usuários, ou seja, sem confundi-lo através de interfaces completamente diferentes ao interagir com o portal. Para o primeiro requisito, identificamos quatro sistemas principais que exigiam equipes especializadas para o trabalho no processo de integração. As equipes aprenderam a desenvolver para seus sistemas designados e contribuíram para as comunidades originais, de modo que a versão que usamos não era significativamente diferente do original. No final do projeto, o portal SPB foi composto por mais de dez sistemas, como Colab, Noosfero, Mezuro, Gitlab, Mailman, Postfix e Munin. A seguir apresentamos os mais relevantes deles, bem como como eles foram integrados na plataforma. \begin{itemize} \item \textbf{Colab\footnote{\url{https://github.com/colab}}:} é uma plataforma de integração de sistemas para aplicações web. Um de seus objetivos é permitir que diferentes aplicações sejam combinadas de tal forma que um usuário não note a mudança entre as aplicações. Para isso, a Colab oferece autenticação centralizada, consistência visual, retransmissão de eventos entre aplicações e mecanismo de pesquisa integrado. \item \textbf{Noosfero\footnote{\url{http://noosfero.org}}:} é um software para redes sociais e de colaboração. Além dos recursos clássicos de redes sociais, ele também fornece recursos de publicação de conteúdo, como blogs e um CMS (\textit{Content Management System}) de propósito geral. A maioria das interações do usuário com o SPB é através do Noosfero: registro do usuário, páginas do projeto e de documentação e formulários de contato. \item \textbf{Gitlab\footnote{\url{http://gitlab.com}}:} é um gerenciador web de repositório Git com páginas wiki e recursos de \textit{issue tracker}. O Gitlab é uma plataforma livre e se concentra em oferecer uma solução holística de desenvolvimento colaborativo em torno do repositório em uma única plataforma. \item \textbf{Mezuro\footnote{\url{http://mezuro.org/}}:} é uma plataforma para coletar métricas de código-fonte com o objetivo de monitorar a qualidade interna de projetos de software livre escrito em C, C ++, Java, Python, Ruby ou PHP. \end{itemize} \begin{figure}[hbt] \centering \includegraphics[width=.5\linewidth]{figures/arch.png} \caption{Visão geral da arquitetura do novo portal SPB.} \label{fig:architecture} \end{figure} Do ponto de vista prático, a plataforma SPB foi implantada em 7 máquinas virtuais com diferentes funções\footnote{\url{https://softwarepublico.gov.br/doc/arquitetura.html}}. A arquitetura conceitual da plataforma é apresentada na Figura \ref{fig:architecture}. O Colab inicialmente lida com toda a interação do usuário, redirecionando as solicitações para as ferramentas integradas. Ele processa as respostas das ferramentas e aplica uma aparência visual consistente, gerenciando também a autenticação e fornecendo uma busca unificada: em vez de usar a funcionalidade de busca restrita redundante de cada ferramenta, uma busca no portal SPB pode retornar conteúdo de qualquer uma delas, sejam páginas web, postagens da lista de discussão ou mesmo código-fonte.