I looked at what the user guide has to say about compatibility and it looks like we could even safely go with Committed for the C and Java interfaces.
For C++ the claim is that "C++ binary compatibility is not supported is primarily because the design of C++ language and runtime environments present extreme technical difficulties to doing so. Stable C++ APIs are source compatible, but applications using them must be recompiled when moving between ICU releases." Select quotes and links below. I strongly recommend Uncomitted for the Java and C interfaces, and Volatile for the C++ interfaces. Nico - http://icu-project.org/userguide/design.html#Version_Numbers "For ICU releases and the library (code) versions, a change in the minor version number indicates releases that may have feature additions or may break binary compatibility, such as between version 2.0 and 2.2. A change only in milli (or micro) version numbers indicates a maintenance release that is binary compatible. For example, ICU 2.6.2 was a maintenance release which was binary compatible with ICU 2.6 and ICU 2.6.1. (See below for more information on ICU Binary Compatibility .) ICU reference releases are denoted by even minor version numbers (like ICU 1.6 or 3.4). Previously, odd minor version numbers (like ICU 1.7) were used for ?enhancement? releases. Currently, odd numbers are used only for unreleased unstable snapshot versions." - The policy on source compatibility is described here: http://icu-project.org/userguide/design.html#ICU_API_compatibility And it looks quite compatible with ICU being Uncommitted in Solaris. - http://icu-project.org/userguide/design.html#ICU_Binary_Compatibility "ICU4C may be configured for use as a system library in an environment where applications that are built with one version of ICU must continue to run without change with later versions of the ICU shared library. Here are the requirements for enabling binary compatibility for ICU4C: 1. Applications must use only APIs that are marked as stable. 2. Applications must use only plain C APIs, never C++. 3. ICU must be built with function renaming disabled. 4. Applications must be built using an ICU that was configured for binary compatibility. 5. Use ICU version 3.0 or later. Stable APIs Only. APIs in the ICU library that are tagged as being stable will be maintained in future versions of the library. Stable functions will continue to exist with the same signature and the same meaning, allowing applications to continue to work without change. Stable APIs do not guarantee that the results from every function will always be completely identical between ICU versions . Bugs may be fixed. The Unicode character data may change with new versions of the Unicode standard. Locale data may be updated or changed, yielding different results for operations like formatting or collation. Applications that require exact bit-for-bit, bug-for-bug compatibility of ICU results should not rely on ICU release-to-release binary compatibility, but should instead link against a specific version of ICU. To verify that an application uses only stable APIs, build it with the C preprocessor symbols U_HIDE_DRAFT_API and U_HIDE_DEPRECATED_API defined. This will produce build errors if any draft, deprecated or obsolete APIs are used. C APIs only. Only plain C APIs remain compatible across ICU releases. The reason C++ binary compatibility is not supported is primarily because the design of C++ language and runtime environments present extreme technical difficulties to doing so. Stable C++ APIs are source compatible, but applications using them must be recompiled when moving between ICU releases. Function renaming disabled. Function renaming is an ICU feature that allows an application to explicitly link against a specific version of the ICU library, and to continue to use that version even when other ICU versions exist in the runtime environment. This is the exact opposite of release-to-release binary compatibility ? instead of being able to transparently change ICU versions, an application is explicitly tied to one specific version. Function renaming is enabled by default, and must be disabled at ICU build time to enable release to release binary compatibility. To disable renaming, use the configure option configure -?disable-renaming [other configure options] (Configure options may also be passed to the runConfigureICU script.) To enable release-to-release binary compatibility, ICU must be built with --disable-renaming, and applications must be built using the headers and libraries that resulted from the ?-disable-renaming ICU build ICU Version 3.0 or Later. Binary compatibility of ICU releases is supported beginning with ICU version 3.0. Older versions of ICU (2.8 and earlier) do not provide for binary compatibility between versions. " - There's also a data compatibility section: http://icu-project.org/userguide/design.html#ICU_Data_Compatibility