The Open Source Checklist
About
It's easy to overlook important tasks when releasing and maintaining an open source project. This checklist helps ensure your project follows best practices for health, development, and security.
Use this checklist as a discussion starter for your team and a foundation for continuous improvement.
Archiving and Deprecating a Project
- Should use the platform's "Archival" function. This way, it becomes read-only, including the issues board, and is flagged as inactive.
- Should state in the README that the project is no longer maintained.
- Should be archived if there are no maintainers.
Documentation
-
Must ensure the project includes standard Community Health Files (CHANGELOG, CONTRIBUTING, CODE_OF_CONDUCT, etc.).
See the README.md Template Files section for a complete list. -
Should include usage documentation and architecture descriptions relevant to the project.
Legal and Licensing
- Must ensure the project's license doesn't conflict with third-party licenses.
- License declarations must follow the REUSE licensing specification, ensuring all materials have clear copyright information.
Naming and Trademarks Check
- Should ensure that the project name does not conflict with an existing project or infringe on trademarks.
- Conduct a general search engine check for the proposed project name.
- Perform a Trademark Search.
Note: It might be perfectly acceptable to use a name reminiscent of an existing trademark - if the existing trademark is used for other services/areas and is not recognized as a well-known trademark.
People & Maintenance
- Must ensure maintainers have education or experience with open source. For example, reading guides at https://opensource.guide.
- Must ensure maintainers have a plan for handling merge/pull requests (code reviews, etc.).
- Must ensure maintainers have a plan for community engagement (responding to issues, reviewing pull requests).
- Must ensure someone is responsible for security issues.
-
Must include a
Maintainersection in every project README (team, individual, or role). -
Should establish a release plan with clear announcement and promotion strategies.
- Should use a CODEOWNERS file for granular maintenance descriptions (complementing the README's general Maintainer section).
Project Quality
- Must verify that the project has undergone a code review.
- Should discuss and establish the project's testing goals and ambitions.
- Should make it easy to use the project - documentation, examples, pre-built releases, etc.
Release and Versioning
- Should use Semantic Versioning 2.0.0 and release tags.
Security
This part of the checklist is based on the Open Source Security Foundation (OpenSSF) guide for more secure open source development, version: 2023-06-14, (and companion post).
General
- Must use two-factor authentication (2FA) or multifactor authentication (MFA) to make it harder for account takeovers.
- Must limit merge and push rights to specific branches.
- Must have enabled branch protection.
-
Must have a practice of signed commits.
-
Should have a basic knowledge of committers and maintainers, and must do a periodic review of those.
- Should have automated testing and test coverage practices, including tests for negative cases, to detect bugs and secure the project.
Contribution
- Should have a practice of code reviews.
- Should have good readability and scope requirements to ensure new PRs are not obfuscated, and use of opaque binaries is minimized.
Dependencies and Vulnerabilities Detection
- Must use SCA-tools in the CI pipeline to detect vulnerabilities and license incompatibilities.
- Must use linter tools in the CI pipeline to detect vulnerabilities and bad development practices.
- Must use secret scanning tools to detect secrets (passwords, logs, tokens).
- Must use automated tooling to monitor dependency updates for critical vulnerabilities.
-
Must have maintenance to quickly handle updating vulnerabilities.
-
Should use SAST-tools in the CI pipeline to detect potential vulnerabilities and bad software practices.
- Should evaluate the health of every new direct project dependency that is added to the project.
- Should prefer using package managers (at the system, language, and container level) for automatic and consistent dependency updates.
Publishing
- Must produce an SBOM (Software Bill of Materials) for the project so that end-users and systems can verify vulnerabilities and license incompatibilities.
-
Must limit software publishing rights of artifacts.
-
Should sign any project releases.
- Should make it easy for end-users to upgrade to new releases. Use semantic versioning, support stable APIs, and flag deprecation early.
Policy
- Must have a security policy in place - it should contain information about where to report non-disclosure vulnerabilities and the process regarding the report.
Secure software practices and tooling from OpenSSF and OWASP:
Tooling
- OpenSSF guide to security tools.
- OWASP Application Security Tools
- OpenSSF Scorecards for repository security
Guides
- OpenSSF's Concise Guide for Evaluating Open Source Software
- CNCF Security TAG Software Supply Chain Best Practices guide.
- OWASP Cheatsheets.
- OWASP Software Developer Guide.
- Signing artifacts in the supply chain - OpenSSF sigstore project.
- OWASP Application Security Verification Standard - ASVS.
- Supply-chain Levels for Software Artifacts - (SLSA).
Workflows
- May discuss your GitHub workflow - a brief summary and suggestion can be found in CONTRIBUTING - Pull Request Lifecycle
Specifications and Standards to Follow
The following will help your Open Source Project to be collaborative, reusable, accessible, and up-to-date.
- REUSE License specification
-
Ensures clear and standardized license compliance across the project.
-
Provides a clear and structured project history through standardized commit messages.
-
Maintains a clear and user-friendly release history.
-
Provides consistent version numbering for releases.
-
Establishes a social contract for respectful and inclusive collaboration.
-
Helps assess and improve the security health of our project.
-
Facilitates easy metadata indexing for better discoverability of our project.
- Ensures the project meets criteria for public code quality and sustainability.