The GIN interface has a high level of abstraction, requiring the access method implementer to only implement the semantics of the data type being accessed. The GIN layer itself takes care of concurrency, logging and searching the tree structure.
All it takes to get a GIN access method working is to implement four user-defined methods, which define the behavior of keys in the tree. In short, GIN combines extensibility along with generality, code reuse, and a clean interface.