Is it safe to say that the Java virtual machine was ‘originally’ designed for the Java programming language, but now, other developers have been able to write programming languages that compile to Java bytecode like Scala, Jython and JRuby.
There are still ‘object oriented’ references in the Java bytecode like interfaces, methods, fields. For example invokespecial is a call on a ‘object’ method.
It is not a pure stack virtual machine with pure a language agnostic instruction set. For example, a pure FORTH implementation would only have stack operations.
The question, is the JVM language agnostic or not?
In the sense that the JVM and java bytecode is turing-complete, any other turing-complete language can be transformed and compiled to java bytecode and run on the JVM. It may be horribly inefficient, but not impossible. As for the strictest possible definition of “agnostic”, there is no such thing. At a hardware-level, all processors have a defined set of binary instructions they support so at some point, any language will have to be transformed to an assembly compatible with the hardware it’s supposed to execute on.
EDIT:
The JVM was not developed in a vacuum, it was developed in conjunction with the JAVA programming language so it stands to reason that the Java language heavily influenced the design of the Java byte-code and the JVM. So in that sense, you could say that the JVM was designed with Java in mind. But it is also true that in the architecture, the JVM was consciously de-coupled from the Java language (through the intermediate bytecode format) so there are elements in the design that takes possible alternative languages into account.