This introduction presents an overview of the key concepts discussed in the subsequent chapters of this book. The book aims to encourage and assist extensions to the R software. It presents approaches to interfaces for a variety of languages, including interfaces to subroutines but also interfaces to evaluators in languages such as Python and Julia and to languages for data management and organization. The book also presents the implementations that have been added to R for object-oriented programming. The implementation of R remains consistent with the object and function principles, relying on the ability of functions to communicate with and exchange objects with software in other languages. The book shows the essential role of interfaces in the history of R, back to the first version of S. It also shows some of the changes along the way to the current R language that introduced the remaining aspects of object-oriented programming in stages, as optional extensions of the basic language.