Нумерация версий программного обеспечения
Жизненный цикл успешной компьютерной программы может быть очень долгим; изменения в программе бывают разными — от исправления ошибки до полного переписывания. В большинстве случаев название программы остаётся тем же, изменяется подназвание — так называемая версия.
Версия программы может быть целым числом (
- Поддержка той или иной системы со стороны ПО для разработки (компилятора, системы контроля версий и т. д.).
- Частота выхода новых версий и их «сырость». Сложная программа, выпускаемая раз в несколько лет и перед выпуском проходящая всеобъемлющее тестирование, может именоваться как «Microsoft Word 97 SP2», в то время как в программе с частыми малостабильными выпусками приходится вводить более сложную нумерацию.
- Степень совместимости ABI или API.
- Необходимость машиночитаемости для управление зависимостями[1].
- Маркетинговые соображения.
Иногда присутствие человеческого фактора в создании номеров версий приводит к ошибкам в изменении версий. Например, разработчики могут изменить номер версии, даже если ни одна строчка кода не была переписана, чтобы создать ложное впечатление, что были внесены значительные изменения.
Схемы нумерации
Последовательные номера
Изначально программы нумеровались числами 1, 2, 3 и т. д. — аналогично изданиям книг. Также последовательные номера могут быть основаны на каком-то техническом счётчике (например, номер версии в системе управления версиями).
Ныне последовательными номерами обозначают редко выпускаемые программы, которые выходят уже стабильными. Например,
Исторически первый способ нумерации, разделяющий малые и серьёзные изменения.
Номер версии является десятичной дробью в американском формате (через
Для предварительных, неофициальных версий применяют числа меньше 1: скажем, 0.1 или 0.9.
Сравнение версий идёт по правилам десятичных дробей: 0.9 < 1.0 < 1.01 < 1.1 = 1.10 < 1.11 < 1.2 = 1.20 < 2.0 < 2.5.
Последовательность чисел
Этот способ принят, например, в Windows API. Версия состоит из нескольких чисел (как правило, трёх), разделённых точкой: например, 1.5.2. Первое из них — старшая версия (major), второе — младшая (minor), третья — мелкие изменения (maintenance, micro).
При увеличении одного из чисел все идущие после него сбрасываются до нуля: 1.0.0, 1.0.1, 1.0.2, 1.1.0, 1.2.0, 1.2.1, 2.0.0… Последний ноль может опускаться: 1.0.0 = 1.0.
Библиотеки Unix используют схему версионирования current.revision.age. Current — текущий номер API, revision — счётчик версий в пределах одного API, age — разница между последней и первой версиями поддерживаемого API[2].
Для определения старшинства версий сравнивают сначала старшие версии, потом младшие, потом микро- как целые числа: 1.1.0 = 1.1 < 1.1.2 < 1.10.0 = 1.10 < 1.11.0 < 1.20.0 < 1.100.0 < 1.100.1 < 2.0.0.
Иногда четвёртым числом идёт номер сборки со сквозной нумерацией. Эта цифра может увеличиваться на единицу с каждым выпуском (1.0.0.1 < 1.0.1.2 < 1.0.2.3 < 1.1.0.4), либо браться из какого-нибудь технического счётчика (компиляций,
Опять-таки, 1.0 считается первой официальной версией; 0.1 или 0.9 — предварительными выпусками.
Буква в качестве младшей версии
Иногда вместо третьего числа применяется буква. Так, когда в
Указание стадии разработки
Если разработчику приходится полагаться на внештатных тестировщиков, в версии может указываться уровень зрелости программы: альфа-версия, бета-версия, выпуск-кандидат, окончательный выпуск, исправление ошибок (service release).
Например, 2.0 alpha1 < 2.0 alpha2 < 2.0 beta < 2.0 rc1 < 2.0 < 2.0 sr1.
Существуют разные схемы обозначения стадий разработки. Например, третье число может означать:
- 0 — альфа
- 1 — бета
- 2 — выпуск-кандидат
- 3 — публичный выпуск
Например:
- 1.2.0.1 вместо 1.2-a
- 1.2.1.2 вместо 1.2-b2 (бета с несколькими исправленными ошибками)
- 1.2.2.3 вместо 1.2-rc3 (выпуск-кандидат)
- 1.2.3.0 вместо 1.2-r (для коммерческого распространения)
- 1.2.3.5 вместо 1.2-r5 (для коммерческого распространения со многими исправленными ошибками)
Внутри компании также может указываться стадия разработки (например, 1.2.3 < 1.2.3r9 < 1.2.4), в то время как в официальных выпусках такого нет — например, чтобы исключить путаницу среди тестеров или выдать клиенту какую-то версию — возможно, нестабильную, но исправляющую его ошибку.
Между сериями 1.0 и 2.6.x ядро Linux использовало нечётные номера для бета-версий, и чётные — для стабильных. Например, Linux 2.3 был серией в разработке, а Linux 2.4 — серией стабильных выпусков, в которую перерос Linux 2.3. В номере выпуска Linux kernel сначала писался номер второстепенной версии, а затем номер выпуска в возрастающем порядке. Например Linux 2.4.0 → Linux 2.4.22. После выпуска 2.6 в 2004 году Linux больше не использует эту систему, теперь цикл выпуска намного короче. Сейчас они просто увеличивают третье число, используя при необходимости четвёртое.
Такая же система «чёт-нечет» используется некоторыми другими продуктами с длинным циклом разработки, такими как GNOME.
Алфавитно-цифровое название
Чаще всего применяется ПО с долгой историей и редко выходящими версиями (Windows Vista).
Если счётчик версий зашёл слишком далеко и надо его сбросить, также используются алфавитные коды: Adobe Photoshop 7.0 < CS < CS2 < … < CS6 < CC < CC 2014.
Иногда в дополнение к обычной версии используется алфавитно-цифровое подназвание:
Дата
Год выпуска применяется чаще всего в ПО с редко выходящими версиями, например: Windows Server 2003, Microsoft Office 2014.
Разработчики проекта Wine также сначала использовали даты при нумерации версий, они указывали год, месяц и день выпуска: «Wine 20040505». Сейчас Wine использует «стандартную» нумерацию выпусков, последняя версия 2010 года имеет номер 1.2. Компания Ubuntu Linux использует похожую схему нумерации, например, выпуск октября 2010 года пронумерован как Ubuntu 10.10. Аналогичная схема на текущий период используется компанией Microsoft для нумерации обновлений Windows 10, хотя у них номер версии обычно на 1 меньше номера месяца, например, Fall Creators Update (1709) вышел 17 октября 2017 года, а April 2018 Update (1803) несмотря на номер «03» в названии вышло в апреле 2018.
При использовании дат в нумерации версий следует использовать схему ISO «год-месяц-день» (это упрощает сравнение версий на старшинство), причём дефис можно опускать.
Внутренние версии
Часто программа имеет как торговое название, так и внутреннюю версию, составленную по всем правилам. Например,
. Различные сборки файлов Windows могут называться, например, 6.1.7600.16385.Подобные технические версии сравнивают с
Экзотические схемы
Дональд Кнут нумерует версии системы компьютерной вёрстки ΤΕΧ последовательными приближениями числа : 3.0 < 3.1 < 3.14 и т. д. Номер последнего стабильного выпуска — 3.141592653. Версии другого детища Дональда Кнута языка METAFONT нумеруются приближениями к числу e. Версия за март 2008 года имела номер 2.718281.
SuSE Linux начал счёт версий с 4.2, как отсылка на известную книгу Дугласа Адамса.
Значение номеров версий
Версия 1.0 как ключевой этап разработки
Коммерческие программы, как правило, начинают нумеровать свои версии с 1.0. Считается даже, что версия 1.0 исключительно сыра и поэтому нужно как можно быстрее дойти до 1.2 или даже до 2.0.
В бесплатных и свободных программах 1.0 считается моментом, когда программа признана готовой к широкому применению неспециалистами. При этом первоначальные версии программы нумеруются как 0.1, 0.2 и т. д. FreeDOS пришёл к версии 1.0 в 2006 году — когда DOS уже практически нигде не использовался. Эмулятор игровых автоматов MAME никогда не дойдёт до версии 1.0, поскольку история игровых автоматов продолжается и поныне.
Маркетинг, суеверия и ОКР
Коммерческому ПО, чтобы название лучше смотрелось, приходится подключать маркетологов. Например, в странах Азии распространена тетрафобия, поэтому в номерах версий избегают цифры 4. В Европе число 13 считается несчастливым, его или пропускают, или заменяют на X3.
Если история программы очень длинна, её иногда приходится сбрасывать: Adobe Photoshop 7.0 < 8.0 < CS < CS2.
Одной из причин того, что не было
.Пропуски в версиях
Иногда разработчик пропускает номер версии, чтобы не отставать от конкурентов или других продуктов той же компании: например,
В
Microsoft Windows 10 выходит после 8.1.
PHP перескакивает от 5 к 7, причиной объявлено то, что версия 6 оказалась распиаренной, но нереализуемой, и многие из её нововведений были присоединены к 5-й ветке[6].
Алгоритмы определения старшинства версий
Часто нужно программно определять, какая из двух версий старше — например, «
Поскольку чрезмерно сложные алгоритмы чреваты
Иногда подобные упрощения играют злую шутку: в первые годы популярности Windows выяснилось, что множество программ некорректно проверяло версию ОС, отказываясь работать под 4.0. Поэтому Windows 95 и Windows 98 имели внутренние версии 3.95 и 3.98[9].
Похожие ухищрения применялись в
В PHP имеется специальная функция version_compare()
для определения старшинства версий[12].
Применение схем нумерации ПО в других сферах культуры
- Dungeons & Dragons 3.5
- Крепкий орешек 4.0
- Evangelion 2.0
- Трон 2.0
- Веб 2.0
- Версия 1.0
- Наука 2.0
См. также
Примечания
- ↑ Preston-Werner, Tom Semantic Versioning 2.0.0 (англ.). Semantic Versioning. Дата обращения: 14 июня 2024.
- ↑ Versioning . Дата обращения: 17 ноября 2017. Архивировано 27 сентября 2019 года.
- ↑ 1 2 What's In a Version Number, Anyway? Дата обращения: 18 ноября 2017. Архивировано 1 декабря 2017 года.
- ↑ Вопросы и ответы по развертыванию Windows 7 . Дата обращения: 29 октября 2017. Архивировано 1 декабря 2017 года.
- ↑ FAQ — Winamp Help . Дата обращения: 6 мая 2011. Архивировано из оригинала 19 декабря 2013 года.
- ↑ Следующая версия PHP будет называться PHP 7 / Хабрахабр . Дата обращения: 20 мая 2015. Архивировано 20 мая 2015 года.
- ↑ Структура
NOTIFYICONDATA
на MSDN . Дата обращения: 7 мая 2011. Архивировано 12 июня 2011 года. - ↑ Разбор функции
CheckWin32Version
на Embarcadero Quality Central . Дата обращения: 7 мая 2011. Архивировано из оригинала 29 июля 2013 года. - ↑ Некорректные проверки номеров версий . Дата обращения: 6 мая 2011. Архивировано 16 января 2013 года.
- ↑ Andreas Bovens. Changes in Opera’s user agent string format (англ.) (27 мая 2009). — Описание мотивов изменений в формате AserAgent-а. Дата обращения: 18 июня 2011. Архивировано из оригинала 22 февраля 2012 года.
- ↑ Например:
Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.8.131 Version/11.11
- ↑ version_compare() . Дата обращения: 17 ноября 2013. Архивировано 23 апреля 2014 года.
Ссылки
- Спецификация семантического версионирования Архивная копия от 2 октября 2014 на Wayback Machine (SemVer)