\section{Contributing with Free Software Communities}
\label{sec:contributions}

%- projeto feito do jeito certo com relação ao software livre (contribuições upstream etc)
%* Colab -> RevProxy
%* Colab, atualização do python/django
%* Contribuições para o GitLab (autenticação)
%* Noosfero, atualização do Rails, preparação para federação, nova interface ...
%* Coper, empacotamentos (obs), omniauth


During the execution of this project we made several contributions from
different levels to the communities we interacted with. This occurred due to
our development process aligned with those of the respective communities. We
used to discuss with upstream the features and bug fixes that we was working
on, this kind of discussion improve the developers' technical solutions and
allowed upstream to accept our contribution more easily.

In Colab we helped upstream to redesign the entirely architecture, enabling the
development of plugins to integrate new tools. We also added a feature that
allowed Colab to run asynchronous tasks, which was a major improvement for us
since we were developing a complex system. A migration to the latest Django
version was made (web framework used by Colab). Moreover, we worked on RevProxy
(the greatest Colab dependency) to put it in a good shape, fixing many bugs.

Gitlab was the tool that we made the least number of modifications. We
contributed with some improvements related with configuration files and we
developed a new omniauth plugin, which enables the user authentication in
Gitlab via REMOTE\_USER HTTP header. This omniauth plugin was needed because
Colab uses this mechanism to manage the authentication.

Noosfero was the tool that contemplated several functional requirements,
therefore we made a large number of contributions with upstream. We helped to
migrate to the latest Rails version (web framework used by Noosfero), enable
the federation implementation (federation with other social networks), decouple
the interface and the back-end, and so forth.

We also contributed with some DevOps tools as well during the project. Some
member of our team took the maintenance of some python libraries that we used
to support our scripts to upload our packages to OBS (Open Build Service).
Since we were composed by many teams with large number of developers we had
some problems related with the tracking of our per team/software releases, the
DevOps team did not know when was the right time to package that software or
not. Thus we developed a tool called copr-status to keep tracked the version
packaged and the version finished by the developers, basically this is a web
interface that helps you to visualize the status of that package/software.

%TODO: Mezuro

