Cross ecosystem software packages show distinct design patterns and health ties
Cross-Ecosystem Packages As Multilingual: Prevalence, Architecture, and Health
Software EngineeringDigital Libraries
Summary
Some software packages are made to work in different programming languages and published in different package stores, but little was known about how common this is or how they are built. The authors studied millions of packages across six popular places and found that while cross-ecosystem packages are not many, they are growing and important. They discovered five main ways these packages are designed, like sharing code or using language connectors. They also found that some design choices are linked to more attention and active development on these projects.
What this means in practice
- •For software package maintainers: Identify architectural designs that improve visibility and development activity for packages supporting multiple languages.
- •For multi language software developers: Inform language choice and design trade-offs when publishing software to multiple language ecosystems, improving project health.
Authors
Xiangxi Li, Olivier Nourry, Yoshiki Higo, Raula Gaikovina Kula
Abstract
Modern software development increasingly relies on using multiple programming languages. Some software packages are published to multiple package ecosystems such as NPM for JavaScript and PyPI for Python. Little is known about cross-ecosystem packages, especially regarding how they are structured. In this paper, we conduct a large-scale empirical study of over six million packages across six major ecosystems to understand 1) how prevalent cross-ecosystem packages are among all packages, 2) whether there are distinct source code architectural patterns that cross-ecosystem packages use, and 3) whether there are correlations between architectural patterns and project health metrics from GitHub. Results indicate that cross-ecosystem packages constitute a small but important, growing fraction of packages. We identify five distinct architectural patterns. For example, packages that implement code generation from a shared source file or use language bindings are associated with significantly higher community visibility and development activity. Based on our findings, we provide implications for package adopters, maintainers, and researchers. We envision our taxonomy being used for future investigations into several aspects of software development, such as the trade-offs between focusing on one language and translating to other languages using bindings, templating, and wrappers, versus using native code and native functions to support additional languages.