The world's computing infrastructure is increasingly differentiating into autonomous systems (e.g. Internet of Things installations, clouds, VANETs, …), which are then post-hoc composed to generate value-added functionality ("systems of systems"). Today, however, such system-of-systems composition is typically carried out in an ad-hoc and systemdependent manner, with obvious associated disadvantages. In this paper, we propose a generalised system-of-systems-oriented programming approach that enables systems to be composed by application experts without the need for systems-level knowledge, and also facilitates dynamic and spontaneous system composition, as systems discover each other opportunistic in their environment.