perhaps I would make it a bit longer: 
"
Class hierarchy in NIX exists in two branches: the interface branch in which a specific implementation class (e.g. *BlockHDF5*, all implementation classes end with implementation's name) inherits a virtual, specific interface class (e.g. *IBlock*, all interface classes start with "I"). And the templated container branch in which all frontend API classes (e.g. *Block*, all frontend classes are named as the entity they represent) inherit the templated *ImplContainer* ("implementation container") class and currently also the specific, proper interface class. (e.g. *IBlock*). *ImplContainer* gets passed through the proper interface class as template, telling it what type of entity it "contains".
"
Not sure if "On top of both branches follows the actual user API class for interacting with a NIX entity, e.g. *Block*" is completely accurate since *Block* does not inherit *BlockHDF5* and thus they are rather on the same level than one being on top of each other - *Block* wraps *BlockHDF5*, but that I would perhaps explain - or perhaps we could drop that sentence, what do you think?