letting slip the doggies...
my vote would be for a language neutral system with as thin of a runtime as is possible to give you GC and cross-language access (hopefully all running as native code).
gcj would appear to fit into this for the most part; perhaps using a native object system.
currently we have a component system based on CORBA. it's actually very nice to use from python. you can even call python code from C in-process.
one reason this object system never caught on (or at least it never caught on with me) was that you had to go to a lot of extra trouble to expose the interfaces via the object system. (oh and using CORBA in C is awful...10000x worse than g_object's OOP-in-C).
i think whatever the choices made, one property that is important is: any object/interface that a person may create should be automatically available via the component system with as little intervention (by the programmer) as possible.