\section{Platform for software collaborative development}

First, according to the Brazilian Federal Government requirements, we needed an
application that integrates existing OSS systems and provides a similar
interface for each one, as well as, unique authentication. For that, we have a
web-based integration platform called Colab that also works as a reverse proxy.
We have developed its plug-in architecture to decouple already integrated
tools (Trac system, GNU Mailman, and Apache Lucene Solr) and integrate other
platforms such as Noosfero, GitLab, and Mezuro. Figure \ref{fig:spb} shows the
home page of this integrated platform.

\begin{figure}[hbt]
  \centering
    \includegraphics[width=.9\linewidth]{figures/home-SPB.png}
  \caption{The new SPB Portal.}
  \label{fig:spb}
\end{figure}

Noosfero is a software to build social and collaboration networks, providing a
platform with blogs and CMS (Content Management System). It is the environment
with most SPB user interaction providing features since the user registration
until the project pages with documentation and contacts. GitLab is a web-based
Git repository manager with wiki pages and issue tracking features to support
the SPB software collaborative development. Mezuro is a platform to collect
source code metric to monitor the internal quality of softwares written in C,
C++, Java, Python, Ruby, and PHP.

\begin{figure}[hbt]
  \centering
    \includegraphics[width=.8\linewidth]{figures/arquitetura.png}
  \caption{SPB Portal Architecture.}
  \label{fig:architecture}
\end{figure}

The new SPB Portal was deployed in 7 virtual machines with different functions,
as we can see in Figure \ref{fig:architecture}. The \textit{reverseproxy}
handles the HTTP requests and redirects them to the \textit{integration}, the
\textit{email} sends and receives e-mails on behalf of the platform and the
\textit{monitor} keeps the entire environment tracked. These three
\textit{VMs} mentioned - \textit{reverseproxy}, \textit{email} and
\textit{monitor} - are accessible via Internet and the other ones are only
available in the local network created between them.

\textit{Integration} works as a second layer of proxy beneath
\textit{reverseproxy}, any request to the platform will be handled by it. The
Colab service provides interface, authentication and search engine integration
among all the services. When a request is received to a specific service, Colab
authenticates the user in the target tool, sends the request and makes a visual
transformation in the HTML page, which is the content of the response.  Another
user-oriented feature is the integrated search engine, when the user want to
find something in the platform Colab will perform the search in the whole
databases. Colab itself provides a web interface for GNU Mailman and we have
two others integrated tools in \textit{integration}: Gitlab and Prezento (the
front-end of Mezuro).

The source code static analysis is performed by \textit{mezuro}. It runs some
static analysis tools on source code stored in repository and provides this
data to Prezento. A social networking and CMS is provided by Noosfero in
\textit{social}, and the databases of all tools with a cache service are in
\textit{database}.
