In 1.11.x and 1.12.x OpenSSLInitializer::initialize() will throw a CryptoException if the OpenSSL 3 legacy provider cannot be loaded. Since the legacy provider is not available in all environments, and generally is not required by most programs using OpenSSL anyway, failing to load it should not be an error.
Change: try to load the legacy provider, but don't fail if it cannot be loaded. Provide a function OpenSSLInitializer::haveLegacyProvider() so that interested programs can check whether the legacy provider is available.