Ice is a well engineered and well supported middleware system with good performance. It took only a few days from nothing to write the basic client-server test code, helped by the demos provided with the package. The Slice interface language makes it easy to define and understand complex typed interfaces. The automatically generated mappings from Slice to application programming language are direct and intuitive. Ice runs on Unix and Windows, with language mappings for C++, Java, C#, VisualBasic, Python and PHP. The C++ mapping enables use of Ice with C, Fortran, etc. Ice has many useful capabilities, including secure transmission, data compression and persistent data storage which have not been explored in these tests. The test results show that Ice throughput can be good to excellent on a high speed LAN, and suggest that it would be limited by the lower network performance on a WAN.
One of the issues which stimulated these tests was the feasibility of a generic middleware API, independent of particular implementations. Because a significant part of middleware systems, the interface specification mechanism, has to be independent of application languages, it stands outside the normal scope of an API. Also, a generic middleware API would either be restrictive or very complex, depending on whether it is the intersection or union of capabilities, in both cases unsatisfactory. The issue concerns the ease with which one middleware system could be replaced by another, and is really about localisation. If middleware interface specifications and function calls are in limited, clearly identified locations, and not scattered through application code, unplugging one system and plugging in another should be straightforward. Localisation, not a generic API, seems to be right way to go here.
In conclusion, Ice is an excellent package which deserves our closer attention.