SPC: https://standard.publiccode.net/criteria/ ( or https://github.com/publiccodenet/standard/tree/develop/criteria )
CIIBP: https://github.com/coreinfrastructure/best-practices-badge/blob/master/doc/criteria.md
In general, CIIBP goes into more detail, reflecting some of what Foundation for Public Code has been enumerating with the first steps to incubation: https://about.publiccode.net/activities/codebase-stewardship/product-assets-for-early-incubation.html
CIIBP adds term "SUGGESTED"
CIIBP is very "project" focused, SPC is very "codebase" focused
SPC "gaps" or differences to consider:
machine readability: perhaps SPC would want to have a "criteria" section in publiccode.yml ?
add using standard file names and file locations as part of Use Open Standards?
statement about using common/FOSS build tools?
Version Control
SPC has nothing around CVEs in Release_notes, should it?
discussions (regardless of type) to be searchable, addressed by url, no proprietary not covered … too specific or a SHOULD?
responses to issues/bugs
Tests in general:
vulnearbilities reporting, responding
specific developer skills
Bunch of stuff on cryptography:
Quality/security testing specifics:
CIIBP: Basics project website content
SPC: similar to Document your objectives, Use plain English, Welcome contributions
CIIBP: The project website MUST succinctly describe what the software does (what problem does it solve?).
SPC GAP: implied
CIIBP: The project website MUST provide information on how to: obtain, provide feedback (as bug reports or enhancements), and contribute to the software.
SPC: Welcome contributions
CIIBP: The information on how to contribute MUST explain the contribution process
SPC: Welcome contributions
CIIBP: The information on how to contribute SHOULD include the requirements for acceptable contributions
SPC: Welcome contributions
CIIBP: OSS License
SPC: Publish with an open source license
CIIBP: Documentation
SPC: Document your code
CIIBP: The project MUST provide basic documentation for the software produced by the project.
SPC: explicit in Document your code
CIIBP: The project MUST provide reference documentation that describes the external interface (both input and output) of the software produced by the project.
SPC: no mention of APIs in standard, but seen in early incubation assets
CIIBP: The project sites (website, repository, and download URLs) MUST support HTTPS using TLS.
SPC: no mention of HTTPS or TLS
CIIBP: The project MUST have one or more mechanisms for discussion (including proposed changes and issues) that are searchable, allow messages and topics to be addressed by URL, enable new people to participate in some of the discussions, and do not require client-side installation of proprietary software.
SPC: The project MUST have communication channels for users and developers, for example email lists
CIIBP: Change Control
SPC: Maintain version control, Require review of contributions, Code in the open, Welcome Contributions, Pay attention to codebase maturity
CIIBP: The project MUST have a version-controlled source repository that is publicly readable and has a URL.
SPC: A codebase MUST be versioned. All source code for any policy and software in use (unless used for fraud detection) MUST be published and publicly accessible.
CIIBP: The project's source repository MUST track what changes were made, who made the changes, and when the changes were made.
SPC: no specific menion of tracking who/when, rather: All decisions MUST be documented in commit messages
CIIBP: To enable collaborative review, the project's source repository MUST include interim versions for review between releases; it MUST NOT include only final releases.
SPC: All files in a codebase MUST be version controlled. All decisions MUST be documented in commit messages. Every commit message MUST link to discussions and issues wherever possible
CIIBP: It is SUGGESTED that common distributed version control software be used (e.g., git) for the project's source repository.
SPC: nothing about distributed rcs
CIIBP Unique version numbering
CIIBP: The project results MUST have a unique version identifier for each release intended to be used by users.
SPC: You SHOULD mark different versions of your codebase, for example using revision tags or textual labels
CIIBP: It is SUGGESTED that the Semantic Versioning (SemVer) format be used for releases.
SPC: A codebase that is not yet ready to use MUST have one of these labels: prototype, alpha, beta, pre-release
CIIBP: It is SUGGESTED that projects identify each release within their version control system. For example, it is SUGGESTED that those using git identify each release using git tags.
SPC: You SHOULD mark different versions of your codebase, for example using revision tags or textual labels.
CIIBP: Release notes
SPC: Pay attention to codebase maturity
CIIBP: The project MUST provide, in each release, release notes that are a human-readable summary of major changes in that release to help users determine if they should upgrade and what the upgrade impact will be. The release notes MUST NOT be the raw output of a version control log (e.g., the "git log" command results are not release notes).
SPC: A codebase SHOULD contain a log of changes from version to version, for example in the CHANGELOG
CIIBP: The release notes MUST identify every publicly known vulnerability with a CVE assignment or similar that is fixed in each new release, unless users typically cannot practically update the software themselves.
CIIBP: Bug-reporting process
CIIBP: The project MUST provide a process for users to submit bug reports (e.g., using an issue tracker or a mailing list).
SPC: The codebase MUST allow anyone to submit suggestions for changes to the codebase. The documentation MUST link to both the public issue tracker and submitted codebase changes, for example in a README file
CIIBP: The project SHOULD use an issue tracker for tracking individual issues.
SPC: The codebase MUST have a public issue tracker that accepts suggestions from anyone
CIIBP: The project MUST acknowledge a majority of bug reports submitted in the last 2-12 months (inclusive); the response need not include a fix.
SPC: nothing specific about issue acknowledgement
CIIBP: The project SHOULD respond to a majority (>50%) of enhancement requests in the last 2-12 months (inclusive).
SPC: nothing about request responsiveness
CIIBP: The project MUST have a publicly available archive for reports and responses for later searching.
SPC: implied, not stated
CIIBP: Vulnerability report process
CIIBP: The project MUST publish the process for reporting vulnerabilities on the project site.
SPC: The codebase MUST include an email address for security issues and responsible disclosure
CIIBP: If private vulnerability reports are supported, the project MUST include how to send the information in a way that is kept private.
SPC: no statement
CIIBP: The project's initial response time for any vulnerability report received in the last 6 months MUST be less than or equal to 14 days.
SPC: no statement
CIIBP: Working build system
CIIBP: If the software produced by the project requires building for use, the project MUST provide a working build system that can automatically rebuild the software from source code.
SPC: Continuous integration tests SHOULD validate that the source code and the policy are executed coherently
SPC: The documentation of your codebase MUST contain a description of how to install and run the source code, examples demonstrating the key functionality
CIIBP: It is SUGGESTED that common tools be used for building the software.
CIIBP: The project SHOULD be buildable using only FLOSS tools.
CIIBP: Automated test suite
CIIBP: The project MUST use at least one automated test suite that is publicly released as FLOSS.
SPC: All functionality in the source code MUST have automated tests. Contributions MUST pass all automated tests before they are admitted into the codebase.
CIIBP: A test suite SHOULD be invocable in a standard way for that language.
SPC: no mention
CIIBP: It is SUGGESTED that the test suite cover most (or ideally all) the code branches, input fields, and functionality.
SPC: All functionality in the source code MUST have automated tests.
CIIBP: It is SUGGESTED that the project implement continuous integration
SPC: Contributions MUST pass all automated tests before they are admitted into the codebase
CIIBP: New functionality testing
CIIBP: the project MUST have a general policy (formal or not) that as major new functionality is added to the software produced by the project, tests of that functionality should be added to an automated test suite.
SPC: All functionality in the source code MUST have automated tests
CIIBP: The project MUST have evidence that the test_policy for adding tests has been adhered to in the most recent major changes to the software produced by the project.
CIIBP: It is SUGGESTED that this policy on adding tests (see test_policy) be documented in the instructions for change proposals.
SPC: The codebase MUST include contribution guidelines explaining how contributors can get involved, for example in a CONTRIBUTING file
CIIBP: Warning flags
CIIBP: Secure development knowledge
CIIBP: Use basic good cryptographic practices
CIIBP: The software produced by the project MUST use, by default, only cryptographic protocols and algorithms that are publicly published and reviewed by experts
CIIBP: If the software produced by the project is an application or library, and its primary purpose is not to implement cryptography, then it SHOULD only call on software specifically designed to implement cryptographic functions; it SHOULD NOT re-implement its own.
CIIBP: All functionality in the software produced by the project that depends on cryptography MUST be implementable using FLOSS.
CIIBP: The security mechanisms within the software produced by the project MUST use default keylengths that at least meet the NIST minimum requirements through the year 2030 (as stated in 2012). It MUST be possible to configure the software so that smaller keylengths are completely disabled.
CIIBP: The default security mechanisms within the software produced by the project MUST NOT depend on broken cryptographic algorithms
CIIBP: The default security mechanisms within the software produced by the project SHOULD NOT depend on cryptographic algorithms or modes with known serious weaknesses (e.g., the SHA-1 cryptographic hash algorithm or the CBC mode in SSH).
CIIBP: The security mechanisms within the software produced by the project SHOULD implement perfect forward secrecy for key agreement protocols so a session key derived from a set of long-term keys cannot be compromised if one of the long-term keys is compromised in the future.
CIIBP: If the software produced by the project causes the storing of passwords for authentication of external users, the passwords MUST be stored as iterated hashes with a per-user salt by using a key stretching (iterated) algorithm (e.g., PBKDF2, Bcrypt or Scrypt).
CIIBP: The security mechanisms within the software produced by the project MUST generate all cryptographic keys and nonces using a cryptographically secure random number generator, and MUST NOT do so using generators that are cryptographically insecure.
CIIBP: Secured delivery against man-in-the-middle (MITM) attacks
CIIBP: The project MUST use a delivery mechanism that counters MITM attacks. Using https or ssh+scp is acceptable.
CIIBP: A cryptographic hash (e.g., a sha1sum) MUST NOT be retrieved over http and used without checking for a cryptographic signature.
CIIBP: Publicly known vulnerabilities fixed
CIIBP: There MUST be no unpatched vulnerabilities of medium or high severity that have been publicly known for more than 60 days.
CIIBP: Projects SHOULD fix all critical vulnerabilities rapidly after they are reported.
CIIBP: Other security issues
CIIBP: Static code analysis
CIIBP: At least one static code analysis tool (beyond compiler warnings and "safe" language modes) MUST be applied to any proposed major production release of the software before its release, if there is at least one FLOSS tool that implements this criterion in the selected language.
CIIBP: It is SUGGESTED that at least one of the static analysis tools used for the static_analysis criterion include rules or approaches to look for common vulnerabilities in the analyzed language or environment.
CIIBP: All medium and high severity exploitable vulnerabilities discovered with static code analysis MUST be fixed in a timely way after they are confirmed.
CIIBP: It is SUGGESTED that static source code analysis occur on every commit or at least daily.
CIIBP: Dynamic code analysis
CIIBP: It is SUGGESTED that at least one dynamic analysis tool be applied to any proposed major production release of the software before its release.
CIIBP: It is SUGGESTED that if the software produced by the project includes software written using a memory-unsafe language (e.g., C or C++), then at least one dynamic tool (e.g., a fuzzer or web application scanner) be routinely used in combination with a mechanism to detect memory safety problems such as buffer overwrites.
CIIBP: It is SUGGESTED that the software produced by the project include many run-time assertions that are checked during dynamic analysis.
CIIBP: All medium and high severity exploitable vulnerabilities discovered with dynamic code analysis MUST be fixed in a timely way after they are confirmed.