  The first associations to software sustainability might be the existence of a
continuous integration (CI) framework; the existence of a testing framework
composed of unit tests, integration tests, and end-to-end tests; and also the
existence of software documentation. However, when asking what is a common
deathblow for a scientific software product, it is often the lack of platform
and performance portability. Against this background, we designed the Ginkgo
library with the primary focus on platform portability and the ability to not
only port to new hardware architectures, but also achieve good performance. In
this paper we present the Ginkgo library design, radically separating
algorithms from hardware-specific kernels forming the distinct hardware
executors, and report our experience when adding execution backends for NVIDIA,
AMD, and Intel GPUs. We also comment on the different levels of performance
portability, and the performance we achieved on the distinct hardware backends.
