The initializer of a static will be baked into the executable, so it must be evaluatable at compile time. Mutex::new() cannot be evaluated at compile time. Use once_cell::sync::Lazy to solve this kind of problem.
Well, 1.63 is the latest version and it was released less than a month ago. It's entirely reasonable that not everyone uses (or wants to use) it.
(I for example always try to compile my crates with a rustc several versions behind the latest, to ensure backward compatibility. Sometimes it's not possible or very inconvenient to update an entire toolchain just because some particular piece of code buried deep down in dependencies wants to use some new feature.)
You can use lazy_static yes. The once_cell API is being added to the standard library though, so people often choose it instead in new projects so they can use the std version easily when it is stabilized.
Yes, it does, but I prefer once_cell because it doesn't require macros. (They way lazy_static unconditionally creates a reference and a proxy type that is named identically as the variable itself can be inconvenient/confusing, and if the same functionality can be achieved without a macro, it probably should.)