The new way to version software

## The Complete Drone-Ver Specification
This also lives at drone-ver.org [1].
# Drone-Ver v.1.sleepy.0.0.calamitous.1437363538.7> # Summary> Given a version number MAJOR.MOOD.ISSUES.SOCIAL.DICTIONARY.UNIXTIME­ .SEVEN, manage your releases as laid out in this comic [2]:
> * 1. MAJOR is incremented when you feel like you've added something cool.
* 2. MOOD is how you felt when you released this version.
* 3. ISSUES is the number of open GitHub issues against your project.
* 4. SOCIAL is the number of GitHub forks & favourites of your project.
* 5. DICTIONARY is a random dictionary word.
* 6. UNIXTIME is the unix time, and
* 7. SEVEN is always the number seven (7).

Via Brian Yoder, “Cube Drone - - Version Sacrifice [3]”

This is clearly a satirical response to Semantic Versioning [4] as there are some who don't like it [5]. I found the Drone-Ver stuff hilarious (why yes, I am a geek—why do you ask?) and according to it, mod_blog [6] should be at version 28.bemused.0.3.chinnier.1437723165.7 (assuming bug fixes are “something cool”) instead of the current version of 4.7.5.

But I also found Semantic Versioning to be a decent attempt to make version numbers have some semantic meaning. Semantic Versioning seems to be geared more towards libraries, and if there was one change I would make to it, it would be that minor versions (backward compatible changes or enhancements) shouldn't break user code (so that if you have a program that uses Foo major version 4.0.n, it should compile cleanly against 4.1.n, 4.2.n, etc. since they all should be compatible) but that bug fixes might break user code (if, for instance, you worked around it, or somehow used the bug as a feature of your code) but if you used the API (Application Programming Interface) as described, things should be okay.

Semantic Versioning breaks down for applications though, as there is no real API to speak of (which causes a change in the major version number). I think a good approach for applications with Semantic Versioning is that a major version should only change if configuration or data files change format (such that the new format is incompatible with the older format, or the older version can't load newer versions of the configuration or data files), new features or enhancements cause the minor version number to update, and bug fixes bump the patch version.

Using that criteria, mod_blog would be at version 2.7.5—there was a configuration file format change when I switched from using my own half-baked configuration format to using Lua [7] as the configuration format (otherwise, the storage format for mod_blog hasn't changed one bit in fifteen years, although it has been enhanced, older versions would be able to deal with the newer information by simply ignoring it).

And just for the record:

Table: Versions of mod_blog
date released	version	comment
------------------------------
Sat May 30 23:48:18 2009 -0400	v2.0	Yet another idea to add to the blogging engine
Mon Jun 22 19:51:15 2009 -0400	v3.0	Removed more dead code.
Wed Sep 9 03:22:07 2009 -0400	v3.1	Feature: Replaced how we pick the adtag
Wed Sep 9 17:45:17 2009 -0400	v3.2	Feature: Some more template defs
Sun Nov 6 02:01:41 2011 -0500	v3.3	Lua configuration
Sun Nov 6 02:01:41 2011 -0500	v3.4	Document current bug in source code
Mon Nov 14 22:51:10 2011 -0500	v4.0	Made sure the dependencies were correct in Makefile
Tue Nov 6 14:37:10 2012 -0500	v4.1	Removed internal entry cache
Mon Dec 31 22:46:01 2012 -0500	v4.2	The 'Gasp! Released at Last' Version
Mon Mar 3 17:57:00 2014 -0500	v4.3	The 'Clean Memory' Version
Fri Jun 27 03:02:24 2014 -0400	v4.4	The 'My­Google­Face­Space­Plus­Book Fix' Version
Thu Aug 21 17:10:07 2014 -0400	v4.5.0	Display version of libraries used, in addition to the version of the program.
Sun Apr 19 19:08:46 2015 -0400	v4.5.1	The 'Make the Makefile makier' Version
Sun May 3 02:19:23 2015 -0400	v4.6.0	The 'XXXX Face­Google­My­Twitter­Plus­Space­Book' Version
Fri Jun 5 21:53:54 2015 -0400	v4.6.1	Bug fix—double free
Sun Jun 7 19:48:09 2015 -0400	v4.6.2	Bug fix—if not using email notification, code doesn't compile
Sun Jun 7 20:03:00 2015 -0400	v4.6.3	Bug fix—don't use _IO_cookie_io_functions_t
Sun Jun 7 21:51:40 2015 -0400	v4.6.4	Bug fix—potential double free (yet again).
Sat Jun 27 18:09:27 2015 -0400	v4.6.5	Bug fix—encoded entries via email mess things up.
Thu Jul 2 17:38:09 2015 -0400	v4.6.6	Bug fix—unauthorized person posting via email leads to double fclose()
Mon Jul 6 17:53:30 2015 -0400	v4.6.7	Bug fix—a NULL tumbler crashes the program.
Sun Jul 19 17:08:43 2015 -0400	v4.7.0	The 'Tumblers Reloaded' Version
Sun Jul 19 22:28:18 2015 -0400	v4.7.1	Bug fix—date checking on exiting tumbler_new() was borked.
Mon Jul 20 01:25:46 2015 -0400	v4.7.2	Bug fix—previous and last calculations were borked.
Mon Jul 20 04:00:34 2015 -0400	v4.7.3	Bug fix—check tumbler date(s) against last entry, not the current time
Mon Jul 20 17:52:24 2015 -0400	v4.7.4	Bug fix—current link was wrong
Fri Jul 24 03:32:45 2015 -0400	v4.7.5	Bug fix—the assert() when comparing dates was wrong

The history prior to version 2.0 is … um … murky. I had … issues … with the previous version control system [8] so pretty much the history from December 1999 [9] through May 2009 [10] have been lost in time, like tears in rain [11]. As you can see, the version numbers have been inconsistent early on, but as time went on, I've done a bit better with the version numbers (it's been more consistent with 4.6.0 onwards).

[1] http://drone-ver.org/

[2] http://curtis.lassam.net/comics/cube_drone/161.gif

[3] http://cube-/

[4] http://semver.org/

[5] https://gist.github.com/jashkenas/cbd2b088e20279ae2c8e

[6] https://boston.conman.org/about/

[7] http://www.lua.org/

[8] https://en.wikipedia.org/wiki/Concurrent_Versions_System#Criticism

[9] /boston/1999/12

[10] /boston/2009/05

[11] https://www.youtube.com/watch?v=ZTzA_xesrL8

Gemini Mention this post

Contact the author