It has to be system wide where system is defined as the scope visible to the programmer This is usually thus the program scope but an OS or JVM coder might see the entire machine platform or the Java platform The reason is that Singletons have a function as well as merely being Singletons If a programmer writes SingletonA with function A then this can t be replaced by another SingletonB with a different function B Singletons have identity as well as merely the Singleton behaviour This has two implications There can be many Singletons at a time the scope of mutual exclusion is to make SingletonA a Singleton i e only one SingletonA at a time but not to care if there is a SingletonB also a Singleton but a different Singleton in existence Secondly something even identical code for SingletonA will only be a Singleton within its scope of implementation usually one program or multiple instances of that program There is no point in having a Singleton that is shared between pieces of code that aren t aware of each other such that they can interact in a defined fashion Singletons not only have to be Singletons they have to do something useful too If there is a code library that implements SingletonA then it s necessary that programs either and most commonly using it get their own scope for this Singleton This can be within the same single threaded program or within a complex multi threaded program Sharing a Singleton between programs is much less common it s just not needed so often and is harder to implement If two copies of the same program are started these could either share or exclude their Singletons offering the same function which is needed would depend on the application Both are true Singletons just different scope Singletons have a poor reputation amongst coders There s a lot of debate out there about them much of it saying Don t use Singletons In practice many problems arise because the initial designer didn t consider just what the necessary scope for the Singleton task was so the coder chose to implement the wrong one