Alex headshot

AlBlue’s Blog

Macs, Modularity and More

JSR294 Fantasy Version Series - Planets

2009 Jsr294 Eclipse Osgi

Following on from yesterday's Linux versioning, today introduces the Solar versioning system (not to be confused with the Sun versioning system).

For simple versioning requirements, especially where numbers are not required (or too complicated for the user to understand), the Solar versioning system can help. These are names based on planetary bodies, ordered by distance from the Sun. (No, not that Sun. Nor that one.)

It therefore follows that this versioning system is one which consists of one of a fixed-size enumeration. The ordering of this enumeration is defined in advance, and suits internal product development, since often they are thrown away and redeveloped under a new project name after a few releases. It also has the nice property that version 2 corresponds to Earth (assuming a zero-indexed comparison), and given that most products only start to become habitable after version 2 has nice symmetry with our place in the Universe. Not only that, but the application branding practically writes itself, with many high-quality images and music available.

The versioning format is therefore represented by a regular expression: (Mercury | Venus | Earth | Mars | Jupiter | Saturn | Uranus | Neptune). The ordering is fixed, with the order:

  1. Mercury
  2. Venus
  3. Earth
  4. Mars
  5. Jupiter
  6. Saturn
  7. Uranus
  8. Neptune

Note that Pluto is not a valid version number, having been declassified as a planet owing to failing to clear out surrounding orbits, which would have made version comparisons difficult. Note also that planetary moons cannot used for proper version numbers either, since these can't be comparable to orbits around other bodies accurately.

We may use this to define module requirements, as in the following non-normative example:

module Home @ Earth {
	requires InnerSystem @ [Mercury,Earth)
	requires OuterSystem @ (Earth,Neptune]
	permits Asteroids @ (Mars,Jupiter)