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.
concept of "extensible" interface is that the interface supports certain
rigorously-defined extensions to it with the following
- an implementation that exposes the base
(non-extended) interface B;
- an implementation that exposes an extended
- an implementation that exposes another
extended interface E2,
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.
same concept of extensibility would also apply to
the other hand, if an interface or a language "evolves", one cannot expect
that the condition above is satisfied (although it could
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.
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.
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