GNU/EDMA Component Versioning and Updating
by David Martnez Oliveira < dmartin at tsc.uvigo.es >

Introduction
------------
This tutorial describes the component versioning strategy provided by the GNU/EDMA as well as the component updating procedures.

Version Convenion
-----------------
GNU/EDMA uses a general two digits version numbering politics, where the first number (major version number) indicates external changes to the component, that is, changes to the interface the component provides, and the second number (minor version number) indicates internal changes that fo not introduce modifications to the component interface.

Raw Version Management
----------------------
TBC

Muliversioning and Version selection
------------------------------------
GNU/EDMA supports several simultaneous versions of a component, and applications can use any of those versions or even mix versions, but this last option doesn't make too much sense.

GNU/EDMA component version is specified in its .ines deployment handler. Each time a component is registered in the system, its .ines deployment handler is analysed and the version number it contains is processed. If there are a previous version of the component installed in the system, internal structures are updated to make the current version the one with the higher version number. From this point on, any new instance of the component will use the new features installed.

Applications can use the API primitive 'edma_class_set_actual_version' which allows to overwrite current component version. This allows an application to use an specific version even when newer versions of a component where installed. It is easy to provide a simple function to get this information from a text file to externally allow to specify which version an application will use. This function will be added in the system in future by for now it is not available.

Run-time Version 
----------------
GNU/EDMA allows to install new component while applications are running. In this case, current instances of the component continues to use the component version used when created, but new instances of the new component will begin to use (inmediately) the just installed new version of it.

This allows to dynamic update applications in an easy and mostly safe way when objects are created and destroyed often. For long-living instances case see next section.

Run-time Component Hotswap
--------------------------
GNU/EDMA also provides an experimental hotswap system to allow update of active component instances in the system.

Hotswap is carried out when a update transformation script is provided by the .ines deployment handler. If such an script is provided, the system will try to carry out update even on active objects, applying the transformation script on each active instance to transform instance state from the last version to the new one.

This is an experimental and on development feature which cannot be used directly in current GNU/EDMA release.

Transformation Scripts
----------------------
TBC

EDNA Overview
-------------
TBC

Final Words
-----------
GNU/EDMA provides a flexible version management system to make more easy adaptation and evolution of applications. Updates of application can be performed in a more comprehensive way than the common patches usually used.

The, in development, hotswap system will provide a powerfull way to manage high availability application updates
