We pass `null` for the class name here:

https://github.com/elastic/elasticsearch/blob/f086dd18ddc705bf84a1ff99d35196ec2498fd52/server/src/main/java/org/elasticsearch/plugins/PluginDescriptor.java#L261

However the class name is mandatory for the transport protocol today:

https://github.com/elastic/elasticsearch/blob/f086dd18ddc705bf84a1ff99d35196ec2498fd52/server/src/main/java/org/elasticsearch/plugins/PluginDescriptor.java#L156

This prevents various APIs from working in a cluster with stable plugins installed.
server/src/test/java/org/elasticsearch/plugins/PluginsServiceTests.java
((UberModuleClassLoader) stablePluginClassLoader).addReadsSystemClassLoaderUnnamedModule();
            }
            Class<?> stableClass = stablePluginClassLoader.loadClass("p.A");
            assertThat(stableClass.getModule().getName(), equalTo("synthetic.stable.plugin"));
            
        } finally {
            closePluginLoaders(pluginService);
        }
    }
    public void testCanCreateAClassLoader() {
        assertEquals(
            "access denied (\"java.lang.RuntimePermission\" \"createClassLoader\")",
            expectThrows(AccessControlException.class, () -> new Loader(this.getClass().getClassLoader())).getMessage()
        );
        var loader = PrivilegedOperations.supplierWithCreateClassLoader(() -> new Loader(this.getClass().getClassLoader()));
        assertEquals(this.getClass().getClassLoader(), loader.getParent());
    }
    public void testToModuleName() {
        assertThat(PluginsService.toModuleName("module.name"), equalTo("module.name"));
        assertThat(PluginsService.toModuleName("module-name"), equalTo("module.name"));
        assertThat(PluginsService.toModuleName("module-name1"), equalTo("module.name1"));
        assertThat(PluginsService.toModuleName("1module-name"), equalTo("module.name"));
        assertThat(PluginsService.toModuleName("module-name!"), equalTo("module.name"));
        assertThat(PluginsService.toModuleName("module!@#name!"), equalTo("module.name"));
        assertThat(PluginsService.toModuleName("!module-name!"), equalTo("module.name"));
        assertThat(PluginsService.toModuleName("module_name"), equalTo("module_name"));
        assertThat(PluginsService.toModuleName("-module-name-"), equalTo("module.name"));
        assertThat(PluginsService.toModuleName("_module_name"), equalTo("_module_name"));
        assertThat(PluginsService.toModuleName("_"), equalTo("_"));