from the spec: "Shared static constructors on all modules are run before any non-shared static constructors." Is there a specific reason, or is it just for simplicity? There could be a situation where a shared ctor depends on a thread local variable. Preferably, the variable is only initialized in a non-shared ctor.