Almost every Eiffel library has dependencies on other Eiffel libraries, at the moment those dependencies are specified by using a hard coded file location or expecting the library to be under $ISE_LIBRARY. This solution is not optimal for several reasons: It does not allow flexible installation of additional libraries if the user does not have write permissions in the $ISE_LIBRARY directory, it does not allow to have different, incompatible versions of a library installed at the same time.


Library creation

A library gets a unique name and a version number.

Library usage

Instead of specifying the configuration file of the library, the name of the library and (optionally) a min/max version are specified.


A repository would map the name, version numbers to actual configuration files. Initially this could be implemented by giving a list of directories to search for libraries, later a possibility to get libraries from an online repository could be added (similar to the Debian apt system).


As it should be possible for a library author to differentiate between bugfixes that don't change the library interface and interface changes, the version numbers should be used similar to the way it is done with shared libraries in the Unix world. The version number consists of four components: as long as major.minor version is equal, the library is expected to have the same interface and a newer version would replace an older version. If major.minor version would change this would lead to an additional available version.


library com.eiffel.base version

library com.eiffel.wel version

  • com.eiffel.base min_version=5.7 max_version=5.7

library com.eiffel.vision2 version

  • com.eiffel.base min_version=6.0 max_version=6.0
  • com.eiffel.wel min_version=2.5 max_version=2.5

Installing com.eiffel.base version would replace, installing would just additionally install the new version.