Semantic Versioning Checking in a Declarative Package Manager

by Michael Hanus

Technical Communications of the 33rd International Conference on Logic Programming (ICLP 2017), Open Access Series in Informatics, Leibniz-Zentrum für Informatik, Dagstuhl Publishing, Germany, pp. 6:1-6:16, 2017

Semantic versioning is a principle to associate version numbers to different software releases in a meaningful manner. The correct use of version numbers is important in software package systems where packages depend on other packages with specific releases. When patch or minor version numbers are incremented, the API is unchanged or extended, respectively, but the semantics of the operations should not be affected (apart from bug fixes). Although many software package management systems assumes this principle, they do not check it or perform only simple syntactic signature checks. In this paper we show that more substantive and fully automatic checks are possible for declarative languages. We extend a package manager for the functional logic language Curry with features to check the semantic equivalence of two different versions of a software package. For this purpose, we combine CurryCheck, a tool for automated property testing, with program analysis techniques in order to ensure the termination of the checker even in case of possibly non-terminating operations defined in some package. As a result, we obtain a software package manager which checks semantic versioning and, thus, supports a reliable and also specification-based development of software packages.

Preprint (PDF) BibTeX-Entry Online