This code is the same as the code for a normal GType
which derives from a GObject except for a few details:

The _GET_CLASS macro is called _GET_INTERFACE
and not implemented with G_TYPE_INSTANCE_GET_CLASS
but with G_TYPE_INSTANCE_GET_INTERFACE.

The instance type, MamanIbaz is not fully defined: it is
used merely as an abstract type which represents an instance of
whatever object which implements the interface.

The parent of the MamanIbazInterface is not
GObjectClass but GTypeInterface.

The implementation of the MamanIbaz type itself is trivial:

maman_ibaz_get_type registers the
type in the type system.

maman_ibaz_base_init is expected
to register the interface's signals if there are any (we will see a bit
(later how to use them). Make sure to use a static local boolean variable
to make sure not to run the initialization code twice (as described in
the section called “Interface Initialization”,
base_init is run once for each interface implementation
instantiation)