Portability Issues |

One of the main concerns that has driven the design and implementation of the Eiffel library classes contained in Gobo Eiffel package was to make the code compilable by as many Eiffel compilers available on the market as possible. This implies that the users of this package shouldn't have to modify any of the Eiffel classes in order to compile them with their favorite compiler. In particular, no modification should be necessary in the library classes provided with the compilers, such as the kernel library classes. This latter requirement is quite important since a simple modification in a kernel class such as `ANY` or `ARRAY` by just adding or renaming a feature may invalidate a lot of already existing code based on these classes.

Fortunately, thanks to the kernel library standard ELKS '95 and ELKS 2001 adopted by NICE (Nonprofit International Consortium for Eiffel), one can now rely on a set of standard classes and features to achieve interoperability between Eiffel compilers. At least, this is the theory. In practice, despite the availability of FreeELKS, a free implementation of the ELKS standard, none of the Eiffel compilers available on the market are 100% compliant to ELKS, or 100% compliant to the ECMA Eiffel standard. As a consequence, kernel classes provided with the different compilers have to be adapted to get a minimum of compatibility between classes from different vendors. Since these classes cannot be directly modified (see requirement above), the necessary adaptation is achieved with a combination of the three following techniques:

> - Adaptation by Inheritance Technique
> - Client/Supplier Adaptation Technique
> - Gepp: Gobo Eiffel Preprocessor

A non-exhaustive list of portability issues encountered during the development of this package, along with the corresponding solutions which have been adopted, will help to understand some of the design and implementation decisions which have been made. Hopefully this list will also be useful to those of you who want to develop portable Eiffel class libraries. Feel free to contact me if you want to discuss some of the items from this list or if you experienced other interoperability problems.