Мы пытаемся выбрать хороший способ нумерации версий для программных компонентов, которые зависят друг от друга.
Давайте будем более конкретными:
Программный компонент A - это встроенное программное обеспечение, работающее на встроенном устройстве, а компонент B - его соответствующий драйвер для обычного ПК (компьютера с Linux / Windows). Они общаются друг с другом, используя собственный протокол. Поскольку наш продукт также предназначен для разработчиков, мы предложим стабильные и нестабильные (экспериментальные) версии обоих компонентов (прошивка с закрытым исходным кодом, а драйвер с открытым исходным кодом). Нашей самой большой трудностью является то, как обрабатывать изменения API в протоколе связи.
Пока мы реализовывали проверку совместимости в драйвере - он проверяет, совместима ли версия прошивки с версией драйвера - мы начали обсуждать несколько способов нумерации версий.
Мы придумали одно решение, но нам также хотелось заново изобрести колесо. Вот почему я хотел бы получить обратную связь от сообщества программистов / разработчиков программного обеспечения, так как мы считаем, что это общая проблема.
Итак, вот наше решение:
Мы планируем придерживаться широко используемой нумерации версий major.minor.patch и использовать четные / нечетные младшие номера для стабильных / нестабильных версий. Если мы внесем изменения в API, мы увеличим младший номер.
Это соглашение приведет к следующей примерной ситуации:
Текущая стабильная ветвь - 1.2.1, а нестабильная - 1.3.7. Теперь новый патч для нестабильной версии изменяет API, что приведет к тому, что номер новой нестабильной версии станет 1.5.0. Когда нестабильная ветка считается стабильной, скажем, в 1.5.3, мы выпустим ее как 1.4.0.
Я был бы рад ответить на любой из связанных вопросов ниже:
- Можете ли вы предложить лучшую практику для решения проблем, описанных выше?
- Как вы думаете, наша «обычай» конвенция хороша?
- Какие изменения вы бы применили к описанному соглашению?