" 
 : 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.   "