## 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 'MyGoogleFaceSpacePlusBook 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 FaceGoogleMyTwitterPlusSpaceBook' 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).
[2] http://curtis.lassam.net/comics/cube_drone/161.gif
[5] https://gist.github.com/jashkenas/cbd2b088e20279ae2c8e
[6] https://boston.conman.org/about/
[8] https://en.wikipedia.org/wiki/Concurrent_Versions_System#Criticism