Applying changes to a program results typically in stopping the program execution. This is not acceptable for highly available applications. Such applications should be evolved at runtime. Because runtime program evolution is nontrivial we give terms and definitions which characterize this process. We will specify two major dimensions of runtime program evolution – time of evolution and types of evolution. To sketch the state of the art we will pick out three different approaches which try to deal with runtime program evolution.