It is a non-trivial problem to eYciently support the semantics of one programming model with a messaging protocol designed for a diVerent programming model. RMI, however, was under no such design constraint. It supports the ability to pass instances of arbitrary Java classes as parameters by value. This means that the remote request passes the complete state of the parameter object to the destination, where a new instance of the class is created with the same state in the local address space of the destination. Value types were designed to express Java objects, but are not limited to that.
Value types are language independent.
Using value types in non-Java languages poses some diYculties. In Java programs, the destination can download the correct implementation on the fly. This is, for all practical purposes, impossible in programming languages that execute as native binary code. In cases where no implementation is available and the type can't be truncated, the request throws an exception. It's a good thing that the OMG didn't do that, because the most valuable byproduct of this entire exercise would have been lost.