  Linearizability is a commonly accepted notion of correctness for libraries of
concurrent algorithms, and recent years have seen a number of proposals of
program logics for proving it. Although these logics differ in technical
details, they embody similar reasoning principles. To explicate these
principles, we propose a logic for proving linearizability that is generic: it
can be instantiated with different means of compositional reasoning about
concurrency, such as separation logic or rely-guarantee. To this end, we
generalise the Views framework for reasoning about concurrency to handle
relations between programs, required for proving linearizability. We present
sample instantiations of our generic logic and show that it is powerful enough
to handle concurrent algorithms with challenging features, such as helping.
