Let's ship libxpcom10.so with Mozilla 1.0. And people who want to use plugins that need the nsServiceManager:: and other APIs can install libxpcom.so[*] for compatibility. This way we get to build clean APIs, and not break anyone that the distributor doesn't want to break. We'd need to make libxpcom.so speak "XPCOM 1.0" to libxpcom10.so for some things, so that they could share singleton services and whatnot, but it really puts the binary compatibility bar as high as we're willing to make it.
I've half-thought of the mechanics of mapping contract IDs and interfaces around so that everyone sees the things they want to see on both sides of the API divide, but I'm too tired to really get into the details now. (And it's too large to fit in the margin.) But I think the idea at least bears discussing. [*] On systems with rich enough DSO support, we could probably call the real library libxpcom.so and the compatibility library libxpcom_obs.so, with appropriate sonames for each. Mike
