In case you missed the big commit recently, the Geode Native components has removed all globals.*
The biggest win here is that we can more easily unit test sections of the code that before was nearly impossible due to reliance on initialized global instances of Cache, DistributedSystem, PoolManager, etc. All long lived instances are children of Cache and have access to their "container" Cache for accessing other components like PoolManager, DistributedSystem, etc. The refactor probably isn't perfect but it is a step in the right direction. Look for more unit tests to come. The next big win is that you can truly have more than a single Cache instance in our process space. While this isn't a common intentional use case, it is common in the .NET client implementation since a single process, AppPool, could have several AppDomains each with their own instance of Cache. In the old model all managed Cache instances shared the singleton unmanaged Cache instance. This lead to confusion around configuring multiple Caches in the same AppPool, think session state provider and application lookaside caching in IIS, and restricted configuration to share the same cluster and configuration. Obviously this is a HUGE breaking change. Almost all source using the C++ or .NET clients will need to be refactored. While many should be pretty obvious, look for updates coming to the examples soon to show you the light. This change follows the major change where we switch from the home grown SharedPtr/SharedBase refcounting memory management model to std::shared_ptr. The next major refactoring coming is aligning the public API with C++11 standards, like std::string, range-based for loops, etc. We also plan to make the API more consistent between factories, getters, setters, refs, pointers, etc. -Jake * Some lingering globals have been identified for removal.