[Lazarus] Off topic. Version numbers

Santiago A. svaa at ciberpiula.net
Thu May 15 12:36:45 CEST 2014


Have you heard about  "Semantic Versioning 2.0.0" /http://semver.org/?

It is a proposal about how to assign version numbers in order to deal
with compatibility and dependences.

Perhaps Lazarus should thing about using it.

In short, this system is: Version numbers is x.y.z[-nnnn]
"z" changes about bugs refactorization etc (patches number)
"y" changes about improvements that add new functionality, but don't
break compatibility (minor version number)
"x" Changes that break compatibility (mayor version number)
-nnnn is whatever you want (build beta RC1 etc)

If I have a program that builds and works properly using version
3.20.123-23333, I'm sure it will work:
for 3.20.[*] and for 3.[20..infinite].[*]
Perhaps it will work for 3.19, it depends on if I used new features
added in 3.20 o not.
It won't work for 4.* or 2.*


Example:
V 3.20.10
Tmyobject=class
  public
    procedure foo1;
 end;

V 3.20.11
Tmyobject=class
  private
    myvar:integer; // new internal var, nothing really changes. 
Increment patch version number
  public
    procedure foo1;
    procedure foo2;
  end;

V 3.21.11
Tmyobject=class
  private
    myvar:integer;
  public
    procedure foo1;
    procedure foo2;
    procedure fooNew; // New feature,programs that work with V 3.20
still work. Increment minor version number.
  end;

V 4.1.1
Tmyobject=class
  private
    myVar:integer;
  public
    // *** procedure foo1;  ** deprecated
    procedure foo2; // Foo1 removed, could break compatibility.
Increment mayor version number
    procedure fooNew;
  end;


The drawback is that is you must separate clearly bugs, new features
and  deprecating/changing functionality. Never the less, it is good for
the user.

wouldn't  Lazarus team, as user of FPC, love that, when FPC releases
2.7, not to need to check what/if breaks with 2.6, just be sure nothing
is breaks?

As the document states
"This is not a new or revolutionary idea. In fact, you probably do
something close to this already. The problem is that "close" isn't good
enough. Without compliance to some sort of formal specification, version
numbers are essentially useless for dependency management. By giving a
name and clear definition to the above ideas, it becomes easy to
communicate your intentions to the users of your software. Once these
intentions are clear, flexible (but not too flexible) dependency
specifications can finally be made."
 


-- 
Saludos

Santi
svaa at ciberpiula.net





More information about the Lazarus mailing list