软件项目的版本号可以采用四段式a.b.c.d,但是d构建版本号只有在内部才会使用,一般对外不可见,所以对外发行的软件版本一般都是采用经典三段式,参考https://semver.org/lang/zh-CN/

三段式版本号

  • 主版本号(major version)
    当有不兼容的API修改时+1
  • 次版本号(minor version)
    当新增有下兼容的功能时+1
  • 修订版本号(patch version)
    当修复向下兼容的问题时+1

版本的生命周期

一个主版本的发布通常要经历研发阶段、当前阶段、支持阶段、长期支持阶段,并在最后结束它的生命周期。

  • 研发阶段(Dev)
    处于Dev阶段的主版本代表着软件项目的前沿版本,包含大量新增的特性和功能的调整,并且允许进行Api不兼容的修改,对应项目的主版本号。
  • 当前阶段(Current)
    当处于Dev阶段的主版本正式发布后,就进入了Current阶段,这时候该主版本的重点目标仍然是添加新特性,但是不允许进行Api不兼容的修改。随着新功能的发布,该阶段可以并持续增加项目的次版本号。
  • 支持阶段(Support)
    当有新的Current版本发布时,上一个处于Current阶段的版本自动进入Support阶段,该阶段虽然也会陆续增加新特性,但是重点已经转向了维护和支持工作。注意有的软件会把支持阶段称为Active LTS(即活跃性的长期支持阶段),但是在本文叙述环境里还是将其称为Support阶段。
  • 长期支持阶段(LTS)
    当一个处于Support阶段的主版本承诺发布LTS版本时,就进入了LTS阶段。这意味着在很长一段时间内该版本都只会提供必要的功能性和安全性更新,来确保该版本长时间的可用性和稳定性。有的软件会把”上述作用的”长期支持阶段称为Maintenance LTS(即维护性的长期支持阶段),但是在本文叙述环境里还是将其称为LTS阶段。

    有的主版本不提供长期支持阶段,在Support阶段结束后就停止支持;但是有的软件每个主版本都会在发布一段时间后进入长期支持阶段。

  • 结束(End)
    当一个主版本完成了LTS阶段承诺的支持时间后,该主版本就彻底停止支持并且此后不再进行任何更新。此时会保留最后一个Stable版本为Final版本并将其归档到历史版本,也不会将其展示在默认下载界面提供给新用户使用。

版本号类型

每个发布的版本号都有一个或多个版本号类型,这些类型标明了该版本的性质,用户需要按自己的需求选择版本。

  • Alpha
    内部测试版,不向外部发布,会有很多Bug,并且版本内容不稳定会进行频繁改动,一般只有内部测试人员进行白盒测试使用,是整个软件发布周期中的第一个阶段。
  • Pre
    预览版,也属于测试版,是处于研发阶段主版本的新特性首次对外公开的版本,有时也被称为Technical Preview(技术预览版)、一般在Alpha版本之前或Beta版本之前,此时软件的功能非常不完善,有时候会有较严重的BUG出现,主要为了提前将最新特性发布给少量自愿的用户群体进行黑盒测试,便于在早期就获取用户反馈和市场反应来及时调整产品。
  • Canary
    金丝雀版,也属于测试版,是处于当前阶段主版本的新特性首次对外公开的版本,其功能和预览版一样,区别是预览版一般针对Dev阶段的主版本,而针对Current版本则称之为金丝雀版。
  • Beta
    公开测试版,是软件最早对外公开的测试版本,此时已经完成了大多数功能的开发,并且基本消除了严重的bug,但仍然存在一些缺陷,需要通过内部测试和外部反馈来进一步消除bug。
  • RC(Release Candidate)
    发行候选版,指可能成为最终产品的候选版本,如果未出现问题则可发布成为正式版本。在此阶段的产品通常包含所有功能、或接近完整,也不会出现严重问题,进入了最后的修改和调整阶段,是最后一个测试版本。多数开源软件会推出两个RC版本,最后的RC2则成为正式版本,闭源软件较少公开使用。
  • Stable
    稳定版,当进行了上述前期的各种的测试阶段后,软件的版本内容已经完全稳定并且达到了可用状态,此时将最后一个RC版本标记为Stable版进行发布,有的软件也直接将该版本叫做Release版本。
  • Release
    正式发行版,Release不会以单词形式出现在软件封面上,取而代之的是符号®。Release版本是一个交付的可用版本,有时也称之为标准版,如1.3.0、2.0.0、3.4.1。注意Release版是一个比较宽泛的概念,所有发行的非测试版本(包括GA、Stable、LTS、Final)都属于Release版本,而这些版本因为具有一些其它性质才会进行其它的版本标记,默认的Release版标记为Stable稳定版。在此之外测试版本包括Alpha、Pre、Canary、Beta、RC。
  • GA(General Available)
    一般可用版,一般情况下主版本的首个Release版本发布为GA版本,标明了软件已经”上线”了,一般此时的版本号为1.0.0、2.0.0等。
  • LTS(Long Term Support)
    长期支持版,LTS版本被认为是最稳定的版本,它经历了广泛的测试,并且大多包含了多年积累的改进。LTS版本的软件不一定涉及功能更新,但一定会提供必要的错误修复和安全修复,并且不会破坏系统稳定性和兼容性,所以如果基于商业用途则推荐使用该版本。

    LTS版本不是指的某一个特定版本,而是指一系列版本,比如当开发者声称4.6版本为主版本4的LTS版本,那么后续发布的一系列4.6.0、4.6.1、4.6.2均属于LTS版本。

  • Final
    最终版,Final版通常是该软件主版本的最后一个版本,当该版本的生命周期结束后,就不再进行任何更新了,此时最后一个发布的Stable版本会标记为Final版本并归档至历史版本,项目的主要下载页也移除该主版本,新的项目不再推荐使用旧Final版本,因为其缺少新特性的支持并且已经不再进行维护。除非有依赖特定历史版本的需求,才推荐使用Final版。
在软件中添加的功能特性需要经过如下一系列版本发布才能逐步发行给所有用户:  
1. 在主版本中:Alpha->Pre->Beta->RC->GA
2. 在次版本中:Alpha->Canary->Beta->RC->Stable

示例

如下列表是某已发布的软件项目同一时间内需要管理的所有版本:

版本号 版本类型 版本周期
6.0.0-Alpha6 内部测试版 Dev
6.0.0-Pre 预览版 Dev
6.0.0-Beta3 公开测试版 Dev
6.0.0-RC2 发行候选版 Dev
6.0.0-GA 一般可用版 Dev
5.3.0-Alpha5 内部测试版 Current
5.3.0-Canary2 金丝雀版 Current
5.3.0-Beta 公开测试版 Current
5.3.0-RC 发行候选版 Current
5.2.8-Alpha3 内部测试版 Current
5.2.8-Beta 公开测试版 Current
5.2.7-Stable 稳定版 Current
4.6.15-Alpha 内部测试版 Support
4.6.14-Stable 稳定版 Support
3.5.11-Alpha2 内部测试版 LTS
3.5.10-Stable 稳定版 LTS
3.5.0-LTS 长期支持版 LTS
2.5.12-Final 最终版 End
1.7.14-Final 最终版 End

其发布的历史LTS版本包括1.7、2.5、3.5、4.6,其中1.7和2.5都已结束了其生命周期不再得到支持,3.5版本正处于长期支持阶段,4.6版本正处于支持阶段,5.2版本正处于当前阶段,6.0版本正处于研发阶段。此时项目默认推荐的版本是5.2.7(最新的Stable版本),商业用途推荐的版本是3.5.10(最新的LTS版本)。

更新通道

Update Channel(更新通道)是一种软件版本更新技术,目的是向已经安装某个主版本的用户推送次版本和修订版本的更新。而使用更新通道可以使新版本只对少数终端用户可用,这样可降低向每个人推出新代码和功能的风险。由于用户组的规模较小,新版本的影响相对较小。如果在预览/先行版本中发现存在bug,或者新的功能和设计没有被很好地接受,那么很容易回滚和修改,而不影响绝大多数使用稳定版本更新通道的用户。如Google浏览器的更新通道就有四种,分别是Canary、Dev、Beta、Stable(默认)。