Draft:XSDK: Extreme-scale Scientific Software Development Kit

The xSDK, or Extreme-Scale Scientific Software Development Kit, is a collection of software components, tools, and policies. It facilitates the development of scientific packages by integrating interconnected software components from various independent groups in the high-performance computing community. To qualify as an xSDK member, a software package must adhere to community policies and demonstrate interoperability with other xSDK libraries. The initial release in April 2016 demonstrated the importance of community guidelines in enabling the use and transferability of independently developed software packages. The most recent xSDK release includes 26 mathematical libraries, such as PETSc, Trilinos, and SuperLU, forming a foundation for addressing software interoperability and performance portability challenges. The xSDK aims to achieve a framework that promotes collaboration among diverse teams in the high-performance computing community. By providing interconnected and mutually supportive software components, the xSDK may serve as a building block for application development. Overall, the xSDK aims to establish a software ecosystem that can be installed on popular computing platforms. Its goal is also to initiate a scalable scientific software ecosystem.

Key features
The xSDK, a scientific computing initiative, possesses two features. Firstly, it adopts a peer-to-peer interoperability approach, utilizing libraries to access functionalities across different packages, which facilitates the integration of packages while preserving the existing code structures. Secondly, the xSDK implements software policies that foster compatibility and complementarity among independently developed packages. These policies establish expectations for design, implementation, documentation, support, and installation, allowing separate package development while ensuring their combination and effectiveness. XSDK libraries also possess capabilities to interact with and modify preexisting data objects that were independently constructed using their own creation procedures.

Interoperability
The xSDK's interoperability offers a software suite and associated policies focusing on versatility, reliability, and cost-effectiveness. At the core of this interoperability is the utilization of Spack, an adaptable package manager that facilitates support for multiple versions, configurations, compilers, and platforms. By leveraging Spack, the xSDK automates the determination of dependencies between packages using scripts provided by library developers, resulting in a building process for complex application codes. In addition, the xSDK provides level 1 interoperability across all xSDK libraries by providing a build script, testing environment, and a set of community policies, guaranteeing collaboration and compatibility for users.

Testing
The xSDK's testing is currently conducted using Gitlab CI, ensuring testing across various platforms. Efforts are underway to enhance the testing capabilities by introducing new tests and additional layers of testing. One such improvement involves testing a subset of xSDK packages to facilitate the identification of potential issues. The main purpose of CI testing is to ensure the stability of the current release version of the xSDK. However, an important secondary benefit is the ability to test with development versions of different libraries, including those with CUDA or OpenMP capabilities, particularly on systems equipped with GPUs or multicore nodes.

Community policies
The xSDK, upon its initial release, introduced a set of community policies aimed at enhancing the usability, adaptability, and durability of software packages. These policies specifically tackled the hurdles associated with software interoperability and performance portability. Being xSDK compatible results in integration with other packages, facilitating a cohesive software environment. Moreover, the community installation policies established by xSDK assist in the configuration and installation procedures across diverse platforms. Through the implementation of these policies, xSDK fosters long-term sustainability and promotes interoperability among packages, forming a foundation for complex applications.

Scientific applications
The xSDK's scientific applications encompass diverse research areas, including surface and subsurface hydrology. Scientists at the Department of Energy utilize software tools like Amanzi ]/ATS, CrunchFlow, ParFlow, and PFLOTRAN, along with xSDK numerical libraries such as hypre, PETSc, SuperLU, and Trilinos. They also incorporate Alquimia, a specialized xSDK package, to enhance biogeochemical functionality. These efforts contribute to the development of models for hydrological processes. One application of the xSDK is forecasting the impact of climate change on the Upper Colorado River System. Biogeochemistry models driven by genomic data are integrated with high-resolution hydrology models to understand carbon and nutrient cycles. Stream meanders in the floodplain and the exchange of water between streams and groundwater (hyporheic exchange) significantly affect these cycles. The interconnectedness of groundwater, land surface, and atmospheric feedback is also considered, leading to ongoing studies on ultra-high-resolution integrated hydrology models on regional and continental scales. These models are linked to terrestrial process models and atmospheric models to capture the complexity of the hydrological system.

Future initiatives
The xSDK project has been expanding its compatibility to include all ECP -funded library efforts, such as SUNDIALS ] and Magma, while addressing performance challenges in exascale computing platforms. Efforts to refine community policies and develop domain component collections tailored to specific communities are underway, enhancing interoperability among scientific libraries. Additionally, xSDK is exploring the use of community installation tools like Spack to ensure reliable installation of its libraries. The project aims to develop interfaces for transfer of computational resources between applications and libraries, optimizing performance in top-level MPI processes. In the future, xSDK plans to adapt its community policies to meet community needs and include appropriate packages into its framework. Testing will ensure reliable build and execution, while additional interoperability layers and new example codes will promote collaboration and interoperability between libraries. Specialized xSDK builds with features like CUDA or OpenMP capabilities will be developed to cater to systems equipped with GPUs or multicore nodes. These initiatives will foster collaboration within the scientific computing community.