COM vs SOM: The Component Object Model and Some Other Model (1999)
COM is a binary standard that imposes no additional runtime cost to objects created using traditional C++ compilers and can be hosted in any language that supports implementing and calling functions with C linkage though a pointer. To allow the “upcall” effect of virtual functions in C++, COM also supports an event model that allows the “base” class to issues method calls that can be intercepted by any “derived” client. SOM’s object model was difficult to implement in any OOPL environment until IBM and one other vendor (Metaware) provided a special SOM-compliant compiler.
Source: web.archive.org