An Empirical Investigation of Forks as Variants in the npm Package Distribution - Businge, John; Decan, Alexandre; Zerouali, Ahmed; Mens, Tom; Demeyer, Serge (BENEVOL, 2020)
Software developers often need to create variants to accommodate different customer segments. These variants have a common code base but also comprise variant-specific code. A common strategy to create a variant is to clone&own (or fork) an existing repository and then adapt it to the new requirements. This form of reuse has been enhanced with the advent of socialcoding platforms such as GitHub, and package distribution platforms like npm. GitHub offers facilities for forking, pull requests, and cross-project traceability. npm offers facilities for managing package release dependencies and dependents on the distribution platform. Little is known about the maintenance practices of the variants. We therefore performed an exploratory investigation on the evolution of variants, focusing on their technical aspects. We collected variants from the JavaScript ecosystem, whose sources are hosted on GitHub, and whose packages are released on npm. We have identified a total 12,813 variant forks from the JavaScript ecosystem. In general, we observed that mainlines have more number of package releases, package dependencies, dependent packages and dependent projects compared to their variant counterparts. However, it is still interesting that some variants have quite a considerable number of package releases and dependent packages/projects; in a some cases even more than their mainline counterparts.
Keywords: Software variants; npm; Depandencies; Software ecosystems