Definição de código aberto

Como mencionei há duas semanas, meu plano é contribuir com US$ 10.000 para o ecossistema de código aberto .NET. O senhor receberá US$ 5.000 de mim e uma doação equivalente de US$ 5.000 da Microsoft.

Até o momento, há apenas duas regras básicas:

  1. O projeto deve ser escrito em código gerenciado .NET.
  2. O projeto deve ser de código aberto.

A primeira regra é bastante simples; embora o mono e o subversion sejam ótimos projetos de código aberto, eles não são escritos em código gerenciado pelo .NET e, portanto, são totalmente inelegíveis. Mas foi na segunda que encontrei um obstáculo: Como o senhor sabe se algo que se autodenomina “código-fonte aberto” é realmente open source? Muitos projetos acham que são, ou pelo menos alguns usuários acham que são pensar mas na verdade não são.

O NDoc é um exemplo exatamente desse tipo de mal-entendido complicado, de acordo com um comentário Chris Nahr esquerda em um post relacionado:

Se [other people contributing] era seu desejo, ele o guardou para si mesmo. O código-fonte do NDoc 2.0 nunca foi liberado – Kevin alegou problemas de licenciamento como motivo. Ninguém mais podia contribuir, exceto enviando-lhe relatórios de erros em suas compilações alfa (apenas binárias).

Kevin agora está supostamente passando a administração do projeto no Sourceforge para dois outros caras; espero que finalmente vejamos um lançamento de código-fonte público novamente, para que os engenheiros dispostos realmente possam contribuir mais uma vez.

Quero evitar esse tipo de problema.

Para isso, aqui estão alguns critérios que precisamos avaliar para cada projeto indicado, a fim de garantir que eles não estejam apenas falando da boca para fora sobre “código-fonte aberto”:

  1. O projeto deve usar uma licença aprovada pela OSI, ou o permissivo ou recíproco licenças de código compartilhado da Microsoft. (Tenho que incluir esse rider porque parte da briga da OSI com a Microsoft é não reconhecer formalmente as licenças da Microsoft, mesmo que elas estejam absolutamente dentro do espírito do código aberto). Escolha uma licença, qualquer licença! Se o seu projeto não tiver uma licença ou se o senhor não conseguir facilitar ao máximo a determinação da licença que o seu projeto usa… o seu projeto não é elegível.

  2. O projeto deve usar um método comumente disponível de controle público de fontes. SourceForge, CodePlex, Google Code, o que for. Outros desenvolvedores devem ser capazes de recuperar o código público somente leitura usando uma ferramenta de controle de origem e, possivelmente, verificar as alterações na base de código se tiverem as permissões adequadas. Se a única maneira de acessar o código-fonte for por meio de download HTTP de um arquivo ZIP… seu projeto não é elegível.

  3. O projeto deve fornecer evidências públicas de que aceita e incentiva contribuições de código do mundo externo. Um projeto é realmente de código aberto se tiver apenas um desenvolvedor? Um projeto é realmente de código aberto se tiver uma cabala de três desenvolvedores que ignoram sumariamente todas as sugestões e contribuições externas? Tudo o que estou procurando aqui é a evidência de algum tipo de comunidade. Ela não precisa ser necessariamente grande, mas precisa existir. O espírito do código-fonte aberto é o desenvolvimento ativo da comunidade. Se o senhor não puder mostrar um histórico decente de check-ins de uma variedade razoável de colaboradores… seu projeto não é elegível.

Isso mapeia bastante bem o as “quatro liberdades” da Free Software Foundation:

  • A liberdade de executar o programa, para qualquer finalidade.
  • A liberdade de estudar como o programa funciona e adaptá-lo às suas necessidades.
  • A liberdade de redistribuir cópias para que o senhor possa ajudar o próximo.
  • A liberdade de aprimorar o programa e liberar seus aprimoramentos para o público, de modo que toda a comunidade se beneficie.

Portanto, agora começa o processo de verificação.

Preciso da ajuda dos senhores para descobrir quantos dos projetos indicados nos comentários realmente atendem aos critérios que descrevi. Eu coloquei uma planilha somente leitura on-line por meio do Google documents que contém todos os projetos indicados pelos senhores nos comentários do meu post original. Mas parece que não consigo torná-lo editável pelo mundo. Só posso convidar pessoas como “colaboradores”. Supostamente este link permite que qualquer pessoa com uma conta do Google seja um colaborador. Tente isso primeiro.

Como alternativa, se houver uma maneira melhor de editar de forma colaborativa uma lista semelhante a uma planilha, estou aberto a sugestões!