Estamos tentando decidir sobre uma boa maneira de numerar as versões dos componentes de software, que dependem um do outro.
Vamos ser mais específicos:
O componente de software A é um firmware em execução em um dispositivo incorporado e o componente B é o respectivo driver para um PC normal (máquina Linux / Windows). Eles estão se comunicando usando um protocolo personalizado. Como nosso produto também é voltado para desenvolvedores, ofereceremos versões estáveis e instáveis (experimentais) de ambos os componentes (o firmware é de código fechado, enquanto o driver é de código aberto). Nossa maior dificuldade é como lidar com alterações de API no protocolo de comunicação.
Enquanto implementávamos uma verificação de compatibilidade no driver - ele verifica se a versão do firmware é compatível com a versão do driver - começamos a discutir várias maneiras de numerar as versões.
Chegamos a uma solução, mas também tínhamos vontade de reinventar a roda. É por isso que eu gostaria de receber algum feedback da comunidade de programadores / desenvolvedores de software, pois achamos que esse é um problema comum.
Então aqui está a nossa solução:
Planejamos seguir a numeração da versão major.minor.patch amplamente usada e usar números menores pares / ímpares para as versões estáveis / instáveis. Se introduzirmos alterações na API, aumentaremos o número menor.
Esta convenção levará à seguinte situação de exemplo:
O ramo estável atual é 1.2.1 e instável é 1.3.7. Agora, um novo patch para instável altera a API, o que fará com que o novo número da versão instável se torne 1.5.0. Uma vez que o ramo instável é considerado estável, digamos no 1.5.3, o lançaremos como 1.4.0.
Ficaria feliz em responder a qualquer uma das perguntas relacionadas abaixo:
- Você pode sugerir uma prática recomendada para lidar com os problemas descritos acima?
- Você acha que nossa convenção "personalizada" é boa?
- Que mudanças você aplicaria à convenção descrita?