Manguebyte

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:

Shell
./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.