Não existe um conjunto de práticas que possa garantir que o software nunca terá defeitos ou vulnerabilidades. Mesmo métodos formais podem falhar se as especificações ou suposições estiverem erradas. Nem existe qualquer conjunto de práticas que possa garantir que um projeto sustentará uma comunidade de desenvolvimento saudável e bem-funcionada.
No entanto, seguir as melhores práticas pode ajudar a melhorar os resultados dos projetos. Por exemplo, algumas práticas permitem revisão multipessoal antes do lançamento, o que pode ajudar a encontrar vulnerabilidades técnicas difíceis de encontrar e ajudar a construir confiança e desejo de interação repetida entre desenvolvedores de diferentes organizações.
Esta página discute o conjunto de melhores práticas para projetos de Software Livre/Libre e de Código Aberto (FLOSS) desenvolvidas para o selo de Melhores Práticas da Open Source Security Foundation (OpenSSF). Projetos que seguem essas melhores práticas poderão se auto certificar voluntariamente e mostrar que alcançaram o selo relevante. Os projetos podem fazer isso, sem custo algum, usando um aplicativo da web (BadgeApp) para explicar como eles atendem a essas práticas e seus critérios detalhados.
Essas melhores práticas foram criadas para:
A expressão "melhores práticas" significa "um procedimento ou conjunto de procedimentos que é preferido ou considerado padrão dentro de uma organização, indústria, etc." (fonte: Dictionary.com). Esses critérios são o que acreditamos ser amplamente "preferido ou considerado padrão" na comunidade FLOSS mais ampla.
Para mais informações sobre como esses critérios foram desenvolvidos, consulte o site GitHub do selo de Melhores Práticas OpenSSF.
Você também pode ver os critérios completos.
Os critérios de melhores práticas são divididos em três níveis:
Cada critério tem um nome curto, mostrado como texto sobrescrito dentro de colchetes após o texto dos critérios.
A Linux Foundation também patrocina o Projeto OpenChain, que identifica critérios para um "programa de conformidade de Software Livre e de Código Aberto (FOSS) de alta qualidade." O OpenChain se concentra em como as organizações podem usar melhor o FLOSS e contribuir de volta para os projetos FLOSS, enquanto o selo de Melhores Práticas OpenSSF se concentra nos próprios projetos FLOSS. O selo de Melhores Práticas OpenSSF e o OpenChain trabalham juntos para ajudar a melhorar o FLOSS e como o FLOSS é usado.
Em alguns casos, testamos e preenchemos automaticamente as informações se o projeto seguir convenções padrão e estiver hospedado em um site (por exemplo, GitHub) com suporte decente de API.
Pretendemos melhorar essa automação no futuro. Melhorias na automação são bem-vindas!
No entanto, priorizamos intencionalmente o "que é importante", mesmo que não possa ser automatizado de forma viável. Adoramos medições automatizadas, mas nem tudo importante é automatizável ou pode ser automatizado de forma viável.
Esperamos que estas práticas e seus critérios detalhados sejam atualizados ao longo do tempo. Planejamos adicionar novos critérios mas marcá-los como critérios "futuros", para que os projetos possam adicionar essa informação e manter seu selo.
Feedback é muito bem-vindo via site do GitHub como questões ou pull requests. Há também uma lista de discussão para discussão geral.
As palavras-chave "DEVE", "NÃO DEVE", "DEVERIA", "NÃO DEVERIA" e "PODE" neste documento devem ser interpretadas conforme descrito na RFC 2119. O termo adicional SUGERIDO é adicionado. Em resumo, essas palavras-chave têm os seguintes significados:
Frequentemente, um critério é declarado como algo que DEVERIA ser feito, ou é SUGERIDO, porque pode ser difícil de implementar ou os custos para fazê-lo podem ser altos.
Para obter um selo, todos os critérios DEVE e NÃO DEVE devem ser atendidos, todos os critérios DEVERIA devem ser atendidos OU não atendidos com justificativa, e todos os critérios SUGERIDO devem ser considerados (deve ser classificado como atendido ou não atendido, mas justificativa não é necessária a menos que observado de outra forma). Uma resposta de N/A ("não aplicável"), onde permitido, é considerada o mesmo que sendo atendida. Em alguns casos, especialmente nos níveis mais altos, justificativa e/ou URL podem ser necessários.
Alguns critérios têm marcações especiais que influenciam isso:
Um projeto deve alcançar o nível anterior para alcançar o próximo nível. Em alguns casos, critérios DEVERIA tornam-se DEVE em selos de nível superior, e alguns critérios SUGERIDO em níveis inferiores tornam-se DEVERIA ou DEVE em selos de nível superior. Os níveis superiores também exigem mais justificativa, porque queremos que outros entendam como os critérios estão sendo atendidos.
Os (muitos) critérios criptográficos nem sempre se aplicam, porque alguns softwares não têm necessidade de usar diretamente capacidades criptográficas. Nesses casos, responda N/A.
Existe um critério de aprovação implícito - todo projeto DEVE ter um site público com URL estável. Isso é necessário para criar uma entrada de selo em primeiro lugar.
Se você não está familiarizado com desenvolvimento de software ou com a execução de um projeto FLOSS, materiais como Producing Open Source Software por Karl Fogel podem ser úteis para você.
Aqui estão alguns termos-chave:
Os critérios:
O nível de passagem não inclui critérios que seriam impraticáveis para um projeto de uma única pessoa, por exemplo, algo que requer uma quantidade significativa de dinheiro. Muitos projetos FLOSS são pequenos, e não queremos privá-los de direitos.
Nosso aplicativo dá a cada entrada de projeto um id único, mas isso não ajuda as pessoas que estão procurando o projeto. Para nossos propósitos, o nome real de um projeto é a URL do seu repositório, e quando isso não está disponível, a URL da "página inicial" do projeto. Limitamos a taxa de alterações na URL do repositório para prevenir alguns absurdos. Os projetos normalmente têm um nome legível por humanos, mas esses nomes não são únicos o suficiente.
O artigo Open badges for education: what are the implications at the intersection of open systems and badging? identifica três razões gerais para sistemas de selos (todas são válidas para este):
Optamos por usar a autocertificação, porque isso torna possível que um grande número de projetos (mesmo os pequenos) participem. Existem milhões de projetos FLOSS, e pagar terceiros para avaliar independentemente cada um deles não é escalável. Existe o risco de que os projetos possam fazer declarações falsas, mas achamos que o risco é pequeno, os usuários podem verificar as declarações por si mesmos e as declarações falsas podem ser substituídas. Também usamos automação para substituir declarações falsas quando podemos confiar nos resultados.