The vendor lock-in is a prominent issue in cloud computing. It is caused by cloud providers who offer proprietary services, which hinders the cloud interoperability. Client-centric interoperability enables the migration of the data and applications across clouds; it gives the clients control over their workloads and a wider range of service choices. Whereas, provider-centric interoperability allows the providers to collaborate. Thus, providers, who have spare resources, can lend them to other providers who lack computational or storage capabilities to overcome the limitations of their local resources. In this article, we conduct a survey to differentiate between client-and provider-centric interoperability solutions. We aim to provide an up-to-date analysis of the current tendencies and the neglected areas of the cloud interoperability field. Thus, we study the cloud service interoperability evolution through the years. Furthermore, we propose definitions for the intra-cloud and inter-cloud interoperability. Moreover, we propose a taxonomy to classify the cloud interoperability approaches into client-centric and provider-centric categories. Then, for each category, we classify the approaches based on their interoperability environment into single cloud or interconnected clouds. Finally, we analyze and compare the approaches based on multiple criteria. The study reveals the focus on the client-centric solutions and the interoperability in interconnected clouds. We notice more interest in the data and application levels interoperability, mainly, in infrastructure as a service model. We also find that client-centric solutions are, mostly, semantic technologies and brokers. However, provider-centric solutions are middleware, protocols, and standards. We conclude that a generic cloud service interoperability model is needed.