In my opinion,
if we refer to interfaces (or languages/syntaxes) rather than, generically, to
"information systems", the distinction between evolution and extension becomes
clearer and more useful.
My
concept of "extensible" interface is that the interface supports certain
rigorously-defined extensions to it with the following
property:
------------------
Given:
- an implementation that exposes the base
(non-extended) interface B;
- an implementation that exposes an extended
interface E1;
- an implementation that exposes another
extended interface E2,
a
program written to use interface B is guaranteed to work (as expected) when
using any of these three implementations, "thinking" that it is using an
implementation of interface B.
------------------
The
same concept of extensibility would also apply to
languages/syntaxes.
On
the other hand, if an interface or a language "evolves", one cannot expect
that the condition above is satisfied (although it could
be).
In
other words, while I expect to be able to use an extended interface as if it
were the corresponding base interface, I don't expect to be able to use
an evolved interface as if it were the corresponding unevolved
interface. Same thing for a language/syntax.
I
think "evolvability" in this context means simply that an interface or a
language can be modified easily, inexpensively, and nicely, in order to
meet new requirements - without implying that a user can ignore that there has
been a modification.
If
we refer to a system, I would say that it is possible for a system to
*evolve* while some of its interfaces are simply *extended* (while others
evolve).
Alessandro Triglia