| Sun Microsystems Systems Architecture Committee | |
|---|---|
| Subject | International Components for Unicode (ICU) |
| Submitted by | Ienup Sung |
| File | PSARC/2002/348/opinion.html |
| Date | July 24th, 2002. |
| Committee | Terrence Miller, Ralph C., James Carlson, Joseph Kowalski, Richard M., Andy R., Glenn Skinner. |
| Steering Committee | SOESC/G11NSC |
The project may be delivered in any release of Solaris.
| Interfaces Exported | ||
|---|---|---|
| Interface Name | Classification | Comment |
| /usr/lib/libicudata.so | Contracted Consolidation Private | [2] |
| /usr/lib/libicui18n.so | Contracted Consolidation Private | [2] |
| /usr/lib/libicule.so | Contracted Consolidation Private | [2] |
| /usr/lib/libicutoolutil.so | Contracted Consolidation Private | [2] |
| /usr/lib/libicuuc.so | Contracted Consolidation Private | [2] |
| /usr/lib/libustdio.so | Contracted Consolidation Private | [2] |
| /usr/include/unicode/*.h | Contracted Consolidation Private | [2] |
| /usr/include/layout/*.h | Contracted Consolidation Private | [2] |
where visible to the application means present in any include file specified to define the libraries API and any nested includes.
All these elements must only evolve in a compatible way.
This whole discussion assumes that any evolution of the API maintains compatibility - i.e. none of the elements of the ABI change their meaning. Also everything in this description is worthless if the library API lies - i.e. the definitions referenced when building the library don't match those in the API.
Another loop hole in the definition of sameness is that the ABI is not affected when function arguments, local variables, data members, or enumeration constants are renamed.
Having template/inline definitions be the same between library versions obviously preserves compatibility. However, changing a function's implementation is O.K. in those cases in which the old version would still work.
The Forte default standard library is guaranteed to be stable across releases.
While exceptions are possible, the safest constraint is to require that all C++ code that executes in the same process be compiled with the same compiler.
All Forte C++ compilers - compiler version 5.1 or newer - can be considered as the "same" when run with option "-compat=5" (currently the default). (The one exception is that Forte doesn't support linking code generated by a later compiler than the one doing the linking - a limitation that isn't relevant to use of shared libraries.)
Again keeping class definitions the same between versions of the library is the safest strategy.
(Note: the C++ namespace mechanism is a much better way to avoid name collisions than the C technique of starting every function name with a unique prefix. No C++ library intended for wide use should export file scope definitions.)
These restrictions are sufficiently straight-forward that the committee recommends that any project willing to formally agree to accept these requirements be permitted to supply a library with a C++ interface. Any user of the library must be willing to accept restriction 1.
The committee was concerned about how the restrictions enumerated above could be communicated and enforced. It was decided to establish a policy that a library exporting a C++ interface not be allowed to classify that interface either "Evolving" or "Stable". The stability level recommended for use of the library within Sun should be "Contracted Consolidation Private" with the contract (see [6]) enumerating the restrictions.
As discussed in [5], the two characteristics lead to different choices of stability level and file location. Priority was given to the intended usage and the project deliverables will be located in /usr/lib not /usr/sfw/lib.