Part I: Concepts and programming model