Both are aids in helping programs communicate with each other, particularly programs that are running on different machines and possibly different operating systems. CORBA is a well-developed, mature standard whose initial focus was supporting communication between programs written in different languages. CORBA uses a network transport protocol called IIOP. It also uses a generic description of communication between programs called IDL (Interface Definition Language). RMI initially supported communication between Java programs running on any platform. With the addition of an RMI-IIOP protocol and other tools, it now plays with CORBA programs as well. One key difference: RMI allows Java programs to exchange actual code (which makes sense because all RMI programs are Java-based). CORBA can only do this between two or more Java programs.