Version Numbers
Jecel Mattos de Assumpcao Jr.
jecel@lsi.usp.br
Wed, 3 May 1995 18:40:15 -0300
Does anyone know a good scheme for version numbers for a
complex piece of software such as Tunes?
The current xx.yy.zz.vv system is interesting, but has most of the
same problems as the schemes I will mention below.
At one time I tried simply using the release data as the version
name. That gave a relative ordering to the versions, but most
development is not very steady, so it is hard to tell how much
two versions differ using this system. You might just do a minor
patch in two years, or a major overhaul in three months.
A single number, like the Adobe Postcript interpreters have, has
the same problems as using the dates.
The Revision Control System ( RCS ) that comes with Linux uses
a two level system: 1.3, 1.4, 1.5, etc... The first number is
incremented manually to indicate a major release. To allow
several people to work on the project at the same time, you can
create derived versions. If you derive a version from 1.4, for
example, you get 1.4.1.1. The next change you make to a file
will result in 1.4.1.2 and so on. This allows you to build an
arbitrary version tree ( actually a graph, as different branches
can be manually merged to create a new version derived from both ).
The major problem I see with RCS is that is works with versions of
the individual files. What about the whole system? How should it
work in a hierarchical project like Tunes? If you update the
Interfaces project but keep the HLL project as is, for example,
should the system version number be incremented? Should each
subproject have its own version number?
In my 286 OS ( back in 1987 ) I adopted the system decribed in
"Managing the Evolution of Smalltalk-80 Systems" by Steve Putz
in pages 273-286 of the book "Smalltalk-80: Bits of History,
Words of Advice" edited by Glenn Krasner ( Addison-Wesley 1983
ISBN 0-201-11669-3 ). That system started out as informal practices
using email and evolved into a tool based system. The main
elements were:
bug report - a message detailing a bug found in a given version
of the system. It might also be a suggestion for
improvement ( in my use of the system, at least )
change - a message describing changes made to one or more source
files ( which are listed ) to fix one or more bugs as
described by the listed bug reports
version - a message that talks about the release of a new version
of the system that is derived from a given version by
adding the listed changes
Browsers allowed you to create bug reports, changes, versions ( each
with a unique ID given by the system ), anonymous test versions, to
look at these elements, to find relevant bugs for a version and so on.
When creating a new version, the system might warn you of conflicts
in several changes. The solution was to create a new change manually
that resolved the conflicts and to use it instead of the original
changes in the new version.
Changes that were not incorporated in a version were known as "goodies".
The system allowed you to try them out ( one at a time or in combination )
by making a test version.
This was a very neat system, but it also had a "flat" view of the
software, where a change to any part has the same effect on the
version number.
Isn't there any way to combine version numbers with the subproject
numbering scheme in Tunes to be able to say things like "a system
with old garbage collector and new GUI"? I wouldn't mind if the
resulting code turned out to be very large - we might build some
browser to filter it.
So, we have:
Date Number RCS Smalltalk What I want
----------------------------------------------------------------------
imposes order yes yes yes(1) yes yes(1)
quantity of change no no yes yes yes
tree of versions no no yes yes(2) yes
file based no no yes no(3) no
hierachical no no no no yes
----------------------------------------------------------------------
(1) only within a single branch
(2) allows anonymous test versions, not a real tree
(3) changes are file based, versions are not
How about it folks? Is it even worth wasting time worrying about this?
regards,
-- Jecel Mattos de Assumpcao Jr
Laboratorio de Sistemas Integraveis - University of Sao Paulo - Brazil
jecel@lsi.usp.br http://www.lsi.usp.br/~jecel/jecel.html