Skip to content

Latest commit

 

History

History
74 lines (60 loc) · 8.17 KB

software.md

File metadata and controls

74 lines (60 loc) · 8.17 KB
id title custom_edit_url
open-source-software
Open Source Software

Open source software (OSS) refers to software whose source code is freely available for anyone to use, study, modify, and distribute. This collaborative approach to software development fosters innovation, transparency, and community-driven improvement. The open source movement is guided by a set of principles and practices that promote accessibility, collaboration, and continuous enhancement.

Saint Louis University is an Associate member of the Linux Foundation.

Shared Infrastructure

Open source software has become a critical shared infrastructure that underpins many aspects of modern life. From operating systems and web browsers to cloud computing platforms and mobile applications, open source software plays a vital role in powering the digital world. Even proprietary software relies on open source languages, libraries, and operating systems. By leveraging the collective efforts of a global community, open source projects have produced robust, secure, and feature-rich software solutions that are widely adopted and trusted.

The open and collaborative nature of open source development allows for rapid innovation and the ability to address emerging challenges swiftly. This shared infrastructure enables interoperability, vendor independence, and cost-effective solutions, benefiting individuals, businesses, and governments alike.

Research Software Engineering

In the realm of research, open source software has become a crucial component of research software engineering. Researchers rely on open source tools and libraries for data analysis, visualization, simulation, and computational workflows. By embracing open source practices, researchers can ensure reproducibility, foster collaboration, leverage community contributions, enable customization and extension, and promote open science. By embracing open source software in research, the scientific community can drive innovation, enhance software quality, and contribute to a culture of openness, collaboration, and reproducibility in academia.

Key Principles of Open Source Software

  • Open Access: The source code of the software is openly accessible, enabling transparency and scrutiny.
  • Free Redistribution: Open source software can be freely redistributed, without restrictions or royalties.
  • Derived Works: Modifications and derived works are allowed, encouraging collaborative improvement and customization.
  • Non-Discrimination: Open source software must be available to anyone, without discrimination against persons, groups, or fields of endeavor.
  • License Compatibility: Open source licenses should be compatible, allowing for the combination and integration of various open source components.
  • Technology Neutrality: Open source software should not be restricted to specific technologies or interfaces, promoting interoperability and platform independence.

Key Practices of Open Source Software Development

  • Code sharing: Open source software starts with publicly sharing the human-readable code that defines how a piece of software works. Source code is usually published on the internet, and often on popular code sharing platforms such as GitHub, GitLab, or GitTea.
  • Licensing: Granting an explicit legal license for use of source code is the foundational practice that transforms sharing into open source software. There is significant discussion amongst practitioners about the merits and priorities of different well-known public licenses
  • Community Collaboration: Open source projects thrive on the contributions and collaboration of a global community of developers, fostering knowledge sharing and collective problem-solving. Good practices for open source software encourage maintainers of a piece of software to include guidance on how to collaborate, including open communication channels.
  • Open Communication: Maintaining open communication channels (e.g., mailing lists, forums, issue trackers) for community discussions, bug reporting, and feature requests. Usually the maintainers of an open source project will establish infrastructure and patterns for open communication.
  • Version Control: Utilizing version control systems (e.g., Git) as a technical mechanism to manage code changes, enable collaboration, and track project history. Git is currently the predominant version control tool, and is the foundation for many code sharing platforms.

Key Practices of Research Software Engineering

Research software engineering involves the development, maintenance, and management of software used in academic and scientific research. Research software engineering improves on naive research software development by embracing rigorous software engineering best practices intended to make projects more sustainable, secure, efficient, and adaptable. This list is not really unique to research software engineering. These are general good practices of software engineering (with the addition of community engagement, which comes from the open source aspect). There are significant overlaps between research software engineering and open source software in both required practices as well as good practices. To ensure high-quality, reproducible, and sustainable research software, the following practices are commonly employed in research software enineering:

  • Version Control:
    • Utilizing version control systems (e.g., Git) to track changes, enable collaboration, and manage code revisions.
    • Encouraging the use of distributed version control systems for improved collaboration and backup capabilities.
  • Automated Testing:
    • Implementing unit tests, integration tests, and regression tests to ensure code correctness and catch regressions early.
    • Adopting test-driven development (TDD) and continuous integration (CI) practices for efficient testing and code quality assurance.
  • Code Review:
    • Establishing peer review processes for code contributions, ensuring code quality, maintainability, and adherence to project standards.
    • Utilizing code review tools and platforms (e.g., GitHub, GitLab) to streamline the review process and facilitate collaboration.
  • Reproducible Environments:
    • Utilizing container technologies (e.g., Docker, Singularity) to encapsulate software dependencies and ensure reproducible computational environments.
    • Leveraging environment management tools (e.g., conda, virtualenv) for managing and isolating dependencies.
  • Code Refactoring and Optimization:
    • Regularly refactoring code to improve maintainability, readability, and performance.
    • Profiling and optimizing critical code sections for improved computational efficiency.
  • Continuous Integration and Deployment (CI/CD):
    • Implementing CI/CD pipelines for automated building, testing, and deployment of research software.
    • Leveraging CI/CD tools (e.g., Jenkins, Travis CI, GitHub Actions) to streamline software release processes.
  • Release Management:
    • Following structured release cycles and versioning schemes to manage software updates and maintain backwards compatibility.
    • Maintaining binary repositories containing each version of released software.
  • Community Engagement:
    • Encouraging community involvement and contributions to research software projects.
    • Participating in open source communities, conferences, and workshops to share knowledge and collaborate with others.
  • Documentation:
    • Providing comprehensive documentation, including installation guides, usage instructions, API references, and code comments.
    • Adopting documentation tools and platforms (e.g., Read the Docs, Sphinx) for improved readability and discoverability.
  • Software Licensing:
    • Applying appropriate open source licenses (e.g., MIT, Apache, GPL) to research software to enable reuse, redistribution, and collaboration.
    • Ensuring compliance with license terms and tracking third-party dependencies and their respective licenses.
  • Software Sustainability:
    • Developing strategies and plans for long-term software maintenance and sustainability.
    • Ensuring proper documentation, knowledge transfer, and succession planning for research software projects.