Repository navigation
AIB Stability & Library Evolution
This project aims to produce ABI compliant Frameworks and Services that can function as fully drop in replacements under Mac OS X Server 1.2v3 and Rhapsody OS.
This is done through #if defined(…) statements throughout the source code.
This project defines several of these
-DDistributionRhapsodyOS-DDistributionRhapsodiOS-
-DDistributionOpenNext(eqiv to DDistributionRhapsodiOS)
When new features are added to our Frameworks, they have to be done in such a way that are ABI compatible. New classes and methods are not considered ABI breaking changes to a framework, but changing ivar (adding, removing or reordering) are ABI breaking.
On RhapsodyOS, ivars are never removed or reordered; however, new ivars are implemented using a global variable NSMapTable. When an object is deinited, it must clean up its entry in that map.
When building for RhapsodiOS or OpenNext, all new variables are stored through a ivar that is added to each class and a private ivar with the form void *_evolution_ProductName_className_. This will always be set to an instantiated class of similar name that will contain the ivar. When the parent class is released, it will automatically destroy that object to prevent data leaks.
Source code will use #if defined(DistributionRhapsodyOS) and #if defined(DistributionRhapsodiOS) || defined(DistributionOpenNext) to decide how this is implemented.
If a feature requires an ABI breaking change, we only implement it for RhapsodiOS and OpenNext.