Infrastructure software such as operating systems, database management systems, and middleware systems is getting more and more complex. The developers are faced with increasing and often conflicting demands from application programmers. At the same time resource consumption should be minimal and demands on specific non-functional properties such as timeliness or dependability have to be met as well. Especially in areas with tough resource constraints such as small embedded systems or mobile systems, a compromise that satisfies all stakeholders, can hardly be found. The only solution is to provide different users with different programs by using static adaptation techniques or even dynamic adaptation techniques if the requirements change at runtime.
The current industrial practice in static software adaptation, for example in automotive operating systems, is mostly based on ad-hoc reuse, simple conditional compilation, or sometimes proprietary code generation techniques. While variability in hardware has been organized and exploited by marketing departments for decades, software product lines are something new, complex, and different. Therefore, many companies perform no systematic reuse at all. Innovations from the academic world, such as explicit modeling of product variabilities and programming languages that support genericity or the mod- ular implementation of crosscutting concerns, are rarely applied. Dynamic adaptation is often too expensive and existing solutions handle adaptation on a very low abstraction level. Thus, dynamic adaptation is still out of the question in many domains. In order to improve this situation, a lot of fundamental research in the areas listed above is necessary. A better understanding of static and dynamic software adaptation and evolution will help to develop more mature processes, models, and tools. Especially the German industry, which develops a vast amount of embedded systems (infrastructure) software, could benefit significantly in terms of reduced costs and time to market.