Source: Michael Kaplan
Subject: Microsoft casing stability
Date: May 9, 2006>
Currently there is a casing stability policy that exists in Unicode that does not cover all aspects of casing stability that are needed by Microsoft. Over time, this could lead to differences that we would like to avoid, if possible (specially now that we are explicitly working to try to use the latest version of the standard).
The specific requirements Microsoft has in regard to casing stability:
For the letters U and L, where U represents an Uppercase letter and L represents the corresponding Lowercase letter:
- Once a round tripping case mapping (i.e. toLowerCase(U) == L and toUpperCase(L) == U) has been created, it cannot be changed;
- If U and L both exist in the a prior version of the Unicode Standard but no case mapping exists, then a case mapping cannot be added in a future version;
- If either U or L (or both) do not exist in a prior version of the Unicode Standard but both exist in a future version, then a roundtrip case mapping can be created between them.
One-way mappings between U and L do not directly affect Microsoft's stability requirements, but since they are captured in various folding/conversion operations, as few of such changes as possible would be preferred -- to maximize the appearance of stability between versions.
While strictly speaking these requirements do not need to be picked up by Unicode, any change that does not meet these requirements in one that Microsoft will not be able to pick up (in order to keep stability in the file system and object namespace in Windows and the .NET Framework).
For this reason, Microsoft would like to request that these requirements be considered for a future version of the Unicode Standard, in order to make sure that we avoid intentionally engineering permanent differences between the standard and our implementation.