Contribuir
Feito às claras
O Manguebyte é um projeto grande, com um caminho longo pela frente, e só chega lá se muita gente construir junto. Contribuições são bem-vindas, de correções de digitação a crates inteiros.
Tudo no repositório é em inglês: código, comentários, mensagens de commit, issues e pull requests. Inglês imperfeito não é problema nenhum.
Jeitos de ajudar
- Relate um bug
- Abra uma issue dizendo o que você fez, o que esperava e o que aconteceu. Um programa pequeno que reproduza o problema vale muito.
- Proponha um recurso
- Abra uma issue antes de escrever uma mudança grande, para que o desenho seja discutido primeiro. O roadmap lista o que está planejado.
- Melhore a documentação
- Explicações mais claras e exemplos melhores são sempre bem-vindos.
- Escreva código
- Escolha um item do roadmap ou uma issue aberta, comente que vai pegá-lo e mande um pull request.
Uma regra acima das outras: sala limpa
O Manguebyte se inspira no que o JUCE torna possível, mas não contém código do JUCE e nunca pode conter. O JUCE é licenciado sob a AGPL ou sob uma licença comercial, ambas incompatíveis com a deste projeto.
Use a lista de módulos do JUCE, a documentação pública, o changelog, o rastreador de issues e o fórum para decidir o que construir e quais desenhos evitar.
Nunca copie, traduza nem parafraseie código-fonte do JUCE, e não escreva uma implementação com a implementação correspondente do JUCE aberta. O mesmo vale para qualquer outro projeto cuja licença não seja compatível com MIT ou Apache-2.0.
Trabalhe a partir de especificações, normas, artigos, livros e do seu próprio conhecimento. O raciocínio está no ADR 0004.
Prepare o ambiente e confira
Você precisa de um toolchain Rust estável, 1.85 ou mais novo, com rustfmt e clippy. No Linux, também dos cabeçalhos de desenvolvimento do ALSA.
Antes de abrir um pull request, rode as mesmas verificações que o CI roda. Um script faz todas e para na primeira falha:
./scripts/check.sh
Um pull request deve fazer uma coisa só e dizer o quê e por quê; trazer testes para comportamento novo e para bugs corrigidos; documentar todo item público; e manter o build sem avisos.
Como escrever código de tempo real
O código da thread de áudio tem um prazo de poucos milissegundos, todas as vezes. Em Processor::process e em tudo o que ele chama:
- Não aloque nem libere memória. Aloque em
prepare. - Não use locks. Use atômicos ou a fila wait-free.
- Não bloqueie nem faça E/S. Nada de arquivos, rede ou impressão.
- Não entre em pânico. Valide em
prepare, e limite os valores em vez de usar asserções.
Essas regras são cobradas: um teste troca o alocador por um que conta e falha se um processador tocar no heap durante o processamento. Quando você acrescentar um processador, acrescente-o a esse teste.
Licença das contribuições
O Manguebyte tem licença dupla, MIT e Apache-2.0. A menos que você declare explicitamente o contrário, qualquer contribuição enviada de propósito para inclusão no projeto, conforme a definição da licença Apache-2.0, fica licenciada da mesma forma dupla, sem termos ou condições adicionais.
Conduta
Seja gentil, tenha paciência e presuma boa-fé. Critique o código, não as pessoas. Este projeto quer contribuidores de todas as origens e níveis de experiência, e não aceita assédio nem desrespeito de nenhum tipo.
Para onde ir
O guia completo de contribuição Issues no GitHub O roadmap Escrever para o autor