> I've also declared OpA and OpB as linear, but it don't works.
I don't know about the rest of your problem, but for this, you might try
declare(nounify(OpA),linear)
Maxima should probably be doing this implicitly, but....
Also note that "linear" (as documented) only moves *atomic* constant factors:
declare(op,linear)$
op(a+b) => op(a)+op(b)
op(3*a) => 3*op(a)
op(%pi*a) => %pi*op(a)
BUT
op(sqrt(2)*a) => unchanged
This is probably done for efficiency, and should probably be changed.
-s