---
== 0)
create and install initial version of a module
* create your module
* install inital version as 'module.rb.0.0.0'
* soft link module.rb to this version
note that i've left it to intall.rb writers to implement this! ;-)
at this point /usr/lib/ruby/ might have
module.rb.0.0.0
and
module.rb -> module.rb.0.0.0
---
== 1)
use *this* initial version in your software by asking to link against a
library which supports the 0th interface
require 'library'
Library::link 'module.rb', 0
or simply
require 'library'
Library::link 'module.rb.0.0.0'
where 'module.rb.0.0.0' is the name of the latest (best) module.rb at the time
you wrote your program. by doing this you are making sure that your program
will, in the future, only load a 'module.rb' which supports the 0th interface.
it does *not* mean it will only load version 0.0.0.
---
== 2)
suppose some bugs are fixed in 'module.rb', resulting in version
'module.rb.0.1.0', being installed.
at this point /usr/lib/ruby/ might have
module.rb.0.0.0
module.rb.0.1.0
and
module.rb -> module.rb.0.1.0
your software, which has asked for *a* library supporting this 0th interface
picks up the new version still using (no change) :
require 'library'
Library::link 'module.rb', 0
---
== 3)
now suppose a completely new, non-backward compatible 'module.rb.1.0.0' comes
out.
at this point /usr/lib/ruby/ might have
module.rb.0.0.0
module.rb.0.1.0
module.rb.1.0.0
and
module.rb -> module.rb.1.0.0
your code, which has :
require 'library'
Library::link 'module.rb', 0
in it *continues* to pick up a library supporting the 0th interface!
newly written code having
require 'library'
Library::link 'module.rb', 1
will pick up 'module.rb.1.0.0' since *it* supports the 1st (only) interface.
---
== 4)
when the next version comes out it is versioned 'module.rb.1.0.1 meaning it is
now is backwards compatible with versions supporting the 0th interface - this
new library ALSO supports the 1st interface.
at this point /usr/lib/ruby/ might have
module.rb.0.0.0
module.rb.0.1.0
module.rb.1.0.0
module.rb.1.0.1
and
module.rb -> module.rb.1.0.1
your original code having :
require 'library'
Library::link 'module.rb', 0
will now pick up the new improved library since 1.0.1 is now backward
compatible with the 0th interface. in otherwords it supports *both* the
1st *and* 0th interfaces (see README for explanation)