The Future of Software: Adaptation and Dependability