I tried this way and it had ripple effect in other libraries (tornado, ipython). I will check one more time.

The strategy I have chosen uses 2.7 compatibility mode - byte/char/unicode must be adjusted, standard api acts as expected.

I have considered 3.x compatibility mode, byte/char/unicode will work as-is, but standard library has to have wrapper for parameters/return values to make it look like 3.x. This would mean that any program which uses pyzmq would have to use the same strategy. Perhaps it is time for another branch :-)