CyanogenMod has grown considerably since Cyanogen’s earliest builds in the Android Eclair (Donut even?) days. The release versioning has changed a few times since then. This page covers the two most recent release structures: CyanogenMod 9 – 10.2 and the current CyanogenMod 11 – 13.
What’s in a number?
You’ve probably noticed that CyanogenMod’s version number isn’t the same as Android’s version number. Here’s how CyanogenMod’s versioning relates to Android’s:
- A signifies the major version. These are numerically equivalent to the named Android releases, which are alphabetical. For example, Android Jellybean, with J being the 10th letter of the English alphabet, results in a major version number of 10 for CyanogenMod.
- B [optional] signifies the minor version. This number is incremented based on the corresponding minor version number of Android. The first release of a new Android name (e.g. Jellybean) gets a major version number with no minor version. If Android subsequently increments their minor version number without changing the name, then CyanogenMod picks up a minor version number. For example, Android 4.1, 4.2, and 4.3 were all called Jellybean, with CM 10 equating to Android 4.1, CM 10.1 to Android 4.2, and CM 10.2 to Android 4.3.
CyanogenMod 9 through 10.2 were qualified with tags: Experimental, Nightly, Release Candidate, and Stable. The Snapshot tag was added with the introduction of M builds in CyanogenMod 10.2. These tags were meant to indicate a build’s suitability for general use.
- Nightly: usually generated every 24 hours, experimental, newest features, unstable
- Experimental: testing version requested by device maintainers to evaluate specific changes
- M Snapshot: milestone snapshot, more stable than a nightly but potentially some issues
- Release Candidate: last builds before stable release, few minor issues, mostly stable, and safe for daily use
- Stable: most stable version available, all or nearly all issues resolved
The Release Candidate and Stable tags bring with them considerably high expectations from users. For this reason, device maintainers and developers involved with CyanogenMod had one simple rule: No ETAs.
Stable build tags carry additional minor version numbers. Consider CyanogenMod A.B.c.d, where A.B is as described in the What’s in a number? section. Then,
- c signifies a large number of bugs were fixed for a new stable release. For example, CM 10.2 had two major Stable releases: CM 10.2.0.0 and CM 10.2.1.0.
- d signifies a bugfix or hotfix version. This number is less often seen, but signals a critical bug fix that was identified as required after a stable release has been issued. Example: CM 10.2.1.1. This version can vary between devices.
CyanogenMod 11 – 13 Community releases reduce the number of build tags to just two: Nightly and M Snapshots. The tag names have been retained for historical reasons, but this is really just a basic two channel release system:
- Development channel: (a.k.a. Nightlies) usually generated every 24 hours, experimental, newest features, unstable
- Release channel: (a.k.a. Snapshots) generated once every 1-2 months, suitable for daily use, devices signed-off by maintainers for inclusion
The release channel is built from a separate stable branch, cut from the main branch at a point deemed feature-complete and reliable. A small subset of code reviewers have the ability to merge commits into the stable branch after the cut has been made; i.e. everything that goes to the stable branch receives extra scrutiny.
More information on the rationale behind the Development/Release build tags can be found in the CyanogenMod 11.0 M6 Release blog post.
The CyanogenMod Installer has its own additional versioning to that described in the What’s in a number? section. The syntax is A.B-InstallerEFGH##I. Here, EFGH##I is a ROT13 formatted version string (non-numerical places rotate 13 characters). This is best explained with a real example:
- 11.0-InstallerXNPQ09O: XNPQ09O –> KACD09B
- The first letter signals the Android version: K stands for KitKat
- The second letter counts, starting from zero, the minor version number: A stands for 0
- The third letter denotes the type of keys used for signing: C for private keys held by Cyanogen Inc. and T for test-keys (Android’s default debugging keys)
- The fourth letter signals the build type: U stands for -user, D for -userdebug, and E for -eng
- The two numbers tell the week of the year: 09 is the 9th week of the year
- The letter at the end is the day of the week denoted by a letter: B stands for 2, and Monday is the 2nd day of the week
Build types and signing
Most CyanogenMod Community and Installer releases are -userdebug builds, signed with test-keys (Android’s default debugging keys). From the user perspective, this means powerful functionality can be baked right into the ROM. Root, performance settings, debugging utilities, and write access to the
/system partition are the notables here. With great power comes great responsibility; it is up to the user to be careful with these utilities and settings.
Devices with CyanogenMod pre-installed have -user builds, signed with private keys held by Cyanogen Inc. These builds are meant for the general public and pass all or very close to all of Android’s CTS requirements. -user builds are required by Google to allow Google applications to be pre-packaged with the device (and even then, only at Google’s discretion). Safety and security is a priority, so root is not available in these builds.
Content of this page is based on informations from wiki.cyanogenmod.org, under CC BY-SA 3.0 licence.