A software library is a high-quality, encapsulated, documented, tested, and multiuse software collection that provides functionality commonly needed by application developers. Scientific libraries provide widely reusable software that is robust, efficient, and scalable for high-performance computing. Key advantages of software libraries include leverage of library developer expertise and reduced application coding effort. For example, numerical software libraries provide easy access to sophisticated mathematical algorithms and high-performance data structures that have been developed by experts, so that application users do not need to write this complex code and can instead focus on their scientific domain software.
As computational science addresses more advanced modeling, simulation, and analysis, the developers of open-source scientific libraries are considering how to design libraries for extensibility and performance portability, while encouraging community contributions to their software and at the same time devising more effective strategies for connections with external packages that provide complementary functionality. As we work toward broader scientific software ecosystems, we need to harness the collective experiences and insights of library developers on scientific software issues.