IBC can be implemented by any consensus algorithm that supports cheaply verifiable finality with any state machine that supports vector commitments.
IBC defines a set of low-level primitives for authentication, transport, and ordering, and a set of application-level standards for asset & data semantics. Ledgers which support compatible standards can be connected together without any special permissions.
IBC is built as a stack of components with explicit interfaces and security properties. Implementations of a component at a particular layer can vary as long as they provide the requisite properties. State machines need only understand compatible subsets of IBC to safely interact.
IBC makes no assumptions, and relies upon no characteristics, of the topological structure of the network of blockchains in which it is operating. Security and correctness can be reasoned about at the level of a single connection and channel between two modules on two chains.