@Piru
Look at them all together rather than point by point. For example, who says IKarl has a global pointer? IKarl_AllocVec() implies some global scope function, interfaces, and consequently all their methods, can exist in any scope a variable can.
Unlike C++ namespaces, an interface method is actually a function pointer within the interface structure. You can't pollute it since a structure can only contain uniquely named members. When I said it defined a namespace, I meant IExec and IKarl are seperate structures that can freely contain identically named member functions.
As for the macro stuff, I prefer not to use it at all in clean OS4 compatible code. It is purely for 3.x source compatibility. If that is not important to you, you don't have to use it.
How easy is it to create a list of library instances within a single task, iterate the instances individually and call methods per instance? Sure it can be done, but how straightforward is it to do?
Again with the polymorphic stuff, you can do it using libries, I never said otherwise. Interfaces, however, bring all of these under a very simple to use and implement system.
Your counter arguments are remind me of those made by people comparing writing object oriented code in C versus C++. Nobody says you cant write object oriented code C, or structured code in pascal. It is a question of how straightforward and clean it is to accomplish.
As for your final point, libraries are also single system. They apply only to amigaos and compatibles, so that argument doesn't really apply, unless you want strict compatibility source with 3.x. In that case, sure you can just use the macro level stuff and do that. I've never yet failed to compile any 3.x stuff under 4.0.
Clearly you don't regard interfaces as a useful idea. That's your opinion and I respect that. However, I feel they are genuinely useful and have a lot of potential.