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/main/java/org/elasticsearch/plugins/PluginDescriptor.java
String name = readNonEmptyString(propsMap, filename, "name");
        String desc = readString(propsMap, name, "description");
        String ver = readString(propsMap, name, "version");
        Version esVer = readElasticsearchVersion(propsMap, name);
        String javaVer = readJavaVersion(propsMap, name);
        String extendedString = propsMap.remove("extended.plugins");
        List<String> extended = List.of();
        if (extendedString != null) {
            extended = List.of(Strings.delimitedListToStringArray(extendedString, ","));
        }
        boolean nativeCont = readBoolean(propsMap, name, "has.native.controller");
        String classname = readNonEmptyString(propsMap, name, "classname");
        String module = propsMap.remove("modulename");
        if (module != null && module.isBlank()) {
            module = null;
        }
        boolean isLicensed = readBoolean(propsMap, name, "licensed");
        boolean modular = module != null;
        return new PluginDescriptor(name, desc, ver, esVer, javaVer, classname, module, extended, nativeCont, isLicensed, modular, false);
    }
    private static PluginDescriptor readerStableDescriptor(Map<String, String> propsMap, String filename) {
        String name = readNonEmptyString(propsMap, filename, "name");
        String desc = readString(propsMap, name, "description");
        String ver = readString(propsMap, name, "version");
        Version esVer = readElasticsearchVersion(propsMap, name);
        String javaVer = readJavaVersion(propsMap, name);
        boolean isModular = readBoolean(propsMap, name, "modular");
        return new PluginDescriptor(name, desc, ver, esVer, javaVer, null, null, List.of(), false, false, isModular, true);
    }
    private static String readNonEmptyString(Map<String, String> propsMap, String pluginId, String name) {