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/PluginDescriptorTests.java
private static final Map<String, String> INTERNAL_DESCRIPTOR_TEMPLATE = Map.of(
        "name",
        "my_plugin",
        "description",
        "fake desc",
        "version",
        "1.0",
        "elasticsearch.version",
        Version.CURRENT.toString(),
        "java.version",
        System.getProperty("java.specification.version"),
        "classname",
        "FakePlugin",
        "modulename",
        "org.mymodule"
    );
    private static final Map<String, String> STABLE_DESCRIPTOR_TEMPLATE = Map.of(
        "name",
        "my_plugin",
        "description",
        "fake desc",
        "version",
        "1.0",
        "elasticsearch.version",
        Version.CURRENT.toString(),
        "java.version",
        System.getProperty("java.specification.version"),
        "modular",