Nowadays, parallel applications became popular with the diffusion of parallel architectures such as multi-core ones. However, there are a large range of parallel applications that need to adapt themselves, at runtime, to unpredicted changes in the execution environment. These changes can be either in the number of the processors available, requiring malleable features, or in the application's workload, requiring evolving features from applications. In this book, we show means to provide adaptability to MPI (Message-Passing Interface) applications. We choose MPI because it is the standard parallel API for HPC in distributed-memory environments. Our work is based on MPI-2 features that allow spawning processes at runtime, adding some flexibility to MPI applications. This book presents an overview of adaptability in parallel environments as well the mains issues to provide it. Them, it shows how the dynamic process creation can be used to implement malleable and evolving MPI applications. Additionally, our experimental results with adaptive MPI applications validate our hypothesis that it is possible to provide adaptability to MPI applications using the MPI-2 features.