Desenvolvimento

15 jan, 2015

Contribuindo em projetos open source utilizando Git – Parte 01

Publicidade

Infelizmente, sinto que perdi boa parte do meu tempo investindo em freelancer e coisas do tipo. Ainda não tinha descoberto, ou apenas realizado, a importância da colaboração em projetos open source. Talvez por falta de incentivo, ou até mesmo por precisão financeira. Sempre utilizei Git para versionar meus projetos. Há pouco mais de um ano, comecei a embarcar nesse mundo, fiz novos amigos, conheci pessoas incríveis, aprendi muito. Passei a perceber que consegui adquirir tanto conhecimento lendo e revisando código de outros desenvolvedores, que então vi uma grande forma de aprendizado contínuo. Ultimamente tenho participado de um projeto open source que promete ajudar centenas de desenvolvedores em todo o Brasil, o RubyCastsBrasil. Ele pretende ser uma das maiores plataformas colaborativas de conteúdo audiovisual sobre Ruby do Brasil. Incrivelmente, a quantidade de contribuidores vem crescendo muito, e alguns que querem ajudar não sabem bem como começar, ou como contribuir da forma correta. Resolvi então criar este artigo com o fluxo normal e algumas técnicas que utilizo no dia a dia.

Contributions

O que é open source?

O termo open source (código aberto em português) diz respeito a software de código aberto, transparente e de forma colaborativa. Significa que você pode ter um executável final do projeto e também ter acesso ao código-fonte de como esse executável foi produzido. Tendo acesso ao código fonte, é possível compreender como o software foi produzido e, o mais importante, é possível modificar, solucionar problemas e adicionar novas funcionalidades. Um grande exemplo é o Kernel do Linux, que teve a contribuição de milhares de desenvolvedores.

Por que eu deveria contribuir?

Isso, na maioria das vezes, se resume ao sentimento de solucionar um problema, publicar e ver sua solução sendo utilizada por centenas, milhares, ou até milhões de pessoas. Isso é realmente incrível!

Mas não é só isso, contribuindo você pode:

  • Melhorar seus conhecimentos de desenvolvimento.
  • Aprender com outros desenvolvedores.
  • Praticar e/ou aprender determinada tecnologia que você esteja querendo aprender/melhorar.
  • Criar sua presença online! Nada melhor do que se tornar relevante na hora de procurar um novo emprego.

Quero ajudar, mas não sei com qual projeto contribuir e por onde começar

Atualmente, o GitHub, na minha visão, é a maior rede de projetos open source do mundo. São mais de 5 milhões de projetos abertos crescendo a cada dia e esperando ajuda de novos desenvolvedores.

Não basta saber a existência dessa vasta quantidade de projetos. É preciso se identificar com algum. A primeira etapa é procurar um projeto interessante para você. Um projeto que talvez você use diariamente, e no qual possivelmente tenha achado algum bug. Talvez até algo que lhe traga interesse e em que você queira se aperfeiçoar mais. Geralmente, um outro desenvolvedor pode pedir sua ajuda por achar o seu conhecimento suficiente para resolver determinados problemas. Essa é a magia de ter uma grande comunidade.

Após escolher um projeto, caso não saiba por onde ajudar, você pode consultar uma espécie de roadmap (lista de funcionalidades desejáveis), presente em alguns projetos. Nessa lista, você pode identificar o que está faltando ser implementado no projeto.

Existem algumas formas de procurar um projeto interessante com o qual você possa se identificar:

  • Codetriage – Na minha visão, uma plataforma visionária! Você fala com qual projeto gostaria de contribuir, e recebe um e-mail com algumas tarefas que precisam de ajuda.
  • GitHub Explore – Lista de projetos populares no GitHub.
  • GitHub Stars – Lista de projetos curtidos por desenvolvedores.
  • GitHub Showcases – Projetos listados a partir dos interesses do desenvolvedor.
  • LayerVault News – Projetos Front-end.
  • BrazilJS Foundation – Alguns projetos Front-end na comunidade brasileira.

Coisas para se conhecer antes de entrar em um projeto

Atualmente, sou mais ativo nas comunidades Ruby e JavaScript. Ao longo do tempo, conversando com outros desenvolvedores e usando vários projetos open source, notei algumas características que me fazem perceber quais projetos são mais seguros e tendem a evoluir melhor como requisito para utilização em meus projetos.

Comunidade: um por todos e todos por um

Um projeto tende a crescer adequadamente quando possui uma boa comunidade, desenvolvedores, designers, formadores de opinião. Todos são bem-vindos e cada um contribui como pode, o importante mesmo é ajudar e fazer com que o projeto cresça da melhor forma possível.

Existem algumas divisões no processo de colaboração:

  • Owner: Usuário que criou o projeto. Geralmente com acesso completo para edição e integração do projeto.
  • Maintainers e Collaborators: São usuários muito ativos no projeto. Geralmente dão a direção e orientam colaboradores para que o projeto tome o caminho ideal. Tem acesso de escrita ao repositório, porém normalmente segue o fluxo normal de contribuição com Pull Request.
  • Contributors: Contributors (Contribuidores) são todos os usuários que já fizeram um pull request (contribuição) que foi aceita e mesclada ao projeto.
  • Community Members: São todos os usuários que tomam conta e contribuem de alguma forma para o projeto, seja discutindo, requisitando novas funcionalidades, contribuindo com código e até palestrando.

Organização (Team)

Após um certo nível de maturidade, os Owners de projetos geralmente criam organizações, tirando assim o vínculo direto do projeto do seu perfil de usuário no GitHub e criando uma organização para representar todos os repositórios relativos ao projeto. Por exemplo:

Team

Além das divisões normais, cada Organização pode ter sua própria nomenclatura para os tipos de Contribuidores do projeto. Veja o exemplo abaixo:

Teams

Documentação: disseminando conhecimento sobre o projeto, ensinando novos usuários

Um bom projeto permite que novos usuários tomem conhecimento facilmente das funcionalidades e requisitos para utilização. Utilizamos vários recursos de documentação para essa finalidade.

Readme

Geralmente, quando você cria um projeto no GitHub ou Bitbucket, eles sempre oferecem a criação inicial do arquivo README.md. O .md representa a sintaxe markdown. Se você não sabe como utilizar, sugiro ler “Adicionando Markdown ao seu kit de sobrevivência na web”. O readme oferece a descrição básica do projeto com detalhes de como usar, compilar ou até como contribuir e acompanhar o projeto.

Contributing

O arquivo CONTRIBUTING lista uma breve documentação de como contribuir com o projeto. Recentemente, o GitHub criou uma funcionalidade que integra esse arquivo ao processo de Pull Request e à criação de Issues. Ao iniciar a criação de uma issue, será possível ver um alerta sugestionando uma leitura no guia de contribuição do repositório:

Contributing

Contributors

Não posso afirmar se é normal ou regra, mas, geralmente, os projetos dos quais participo têm um arquivo CONTRIBUTORS, no qual são listados  nome e e-mail dos principais contribuidores do projeto.

Colaboradores

Mesmo existindo a função de gráfico de contributors (por exemplo, Contributors), acho relevante utilizar o arquivo para também mencionar pessoas que não contribuíram com código, mas com conhecimento.

License

O arquivo LICENSE representa o tipo de licença do projeto. Geralmente, projetos open source informam aos usuários e contribuidores o que eles podem e não podem fazer no projeto (usar, modificar, redistribuir etc.). Existem vários tipos de licenças, você pode descobrir qual se encaixa melhor no perfil do seu projeto no site choosealicense.com.

Documentação e Wikis

Normalmente, projetos se iniciam apenas com sua documentação no arquivo README. A medida que o projeto cresce, é necessário criar outras formas de documentação – geralmente incluindo em uma pasta /doc ou criando páginas WIKIs. WIKIs são recursos providos pelo GitHub ou Bitbucket para que se possa criar documentações simples e navegáveis.

To be continued…

Até então, você conseguiu aprender bastante coisa sobre o mundo open source. Em breve, mais novidades! Nos vemos logo mais.