Eric Herman
    • Create new note
    • Create a note from template
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Write
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee
    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Engagement control
    • Transfer ownership
    • Delete this note
    • Save as template
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Versions and GitHub Sync Sharing URL Create Help
Create Create new note Create a note from template
Menu
Options
Engagement control Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Write
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee
  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       owned this note    owned this note      
    Published Linked with GitHub
    Subscribed
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    Subscribe
    # Standard for Public Code & CII Best Practices Criteria for FLOSS 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 The following are Eric's rough notes from a first read of the CIIBP ---- ## Similarities and differences to consider * 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 * The SPC is a bit like a high level Interface and the assets are like an Implementation, with some lower-level detail * the CIIBP seems much more implementation-like and low-level in several places * CIIBP adds term "SUGGESTED" * perhaps SPC would wish to adopt? Probably not, it's compelling, but non-standard * CIIBP is very "project" focused, SPC is very "codebase" focused * this should not change, "project" is a word which means too many things * 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? * tweak wording? Or only as guidance to Designers and developers? * statement about using common/FOSS build tools? * Version Control * in Maintain Version Control include a SHOULD criterion for a public URL to the codebase repo? * Maintain Version Control include more what/who/when ? * Code in the Open or Maintain Version Control include more about being able to view between releases? * Maintain Version Control state that a codebase SHOULD use *distributed* rcs? e.g. git,bzr * does SPC want to mention Semantic Versioning as further reading? * https://semver.org/ * https://github.com/coreinfrastructure/best-practices-badge/blob/master/doc/criteria.md#version_semver * 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 * issue acknowledgement criterion? * setting expectations is probably more important than drawing a line at X hours or Y days * request responsiveness criterion? * criteria describing the public availablity/searchability of archives for reports and responses for later searching? * Tests in general: * statement about tests also being FOSS? * test suite SHOULD be invocable in a standard way? * mention of testing evidence or coverage metrics? * vulnearbilities reporting, responding * statement about private reporting of vulnearbility? * criteria covering vulnerability reporting response times? * no unpatch known vulnerabilities older than 60 days? * "rapidly" fix all reported critical vulnerabilities? * timely fixing of severity exploitable vulnerabilities discovered with static code analysis? * "timely" fixes of medium and high severity exploitable vulnerabilities discovered with dynamic code analysis? * specific developer skills * developer(s) with secure development knowledge? * dev(s) with vulnerabilities & mitigation knowledge? * Bunch of stuff on cryptography: * add requirement to only use cryptography publicly published and reviewed by experts? * don't roll-your-own-crypto? * need only FOSS crypto? * crypto keylenghts? * don't depend on known-to-be-broken crypto? * don't depend on known-to-be-weak crypto if safer available? * implement perfect forward secrecy? * require password salting? * only cryptographically secure PRNGs for security? * Quality/security testing specifics: * avoid MITM via https or ssh? * check cryptographic hash signatures & use https? * Static code analysis? * add static code analysis to continuous integration? * rules approach to look for common vulnerabilities? * suggest fuzz testing or Zed Attack Proxy? Further reading? * scan and test for memory safety violations? * suggest using lots of dynamic asserts? * statement on compiler flags/warnings, linting? strictness? # some more detailed comparison notes: ---- * CIIBP encourages machine readability of statements about compliance via criteria/criteria.yml * perhaps SPC would want to have a criteria section in publiccode.yml ? ---- 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 * in general very similar. SPC is a bit more strict choice of license. CIIBP more strict for "The project MUST post the license(s) of its results in a standard location in their source repository." * consider adding using standard names and locations as part of Open Standards? ---- 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 * searchable, addressed by url, no proprietary not covered -- issue? ---- 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. * mention URL as SHOULD? * 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 * expand to include more what/who/when ? * 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 * nothing about review between releases * 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 * make this a SHOULD for Public Code? ---- 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 * does SPC want to mention Semantic Versioning? Probably not. * consider adding further reading? https://github.com/coreinfrastructure/best-practices-badge/blob/master/doc/criteria.md#version_semver * 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. * SPC: has nothing around CVEs in release notes ---- 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 * does SPC want/need an issue acknowledgement criterion? * CIIBP: The project SHOULD respond to a majority (>50%) of enhancement requests in the last 2-12 months (inclusive). * SPC: nothing about request responsiveness * does SPC want/need a request responsiveness criterion? * CIIBP: The project MUST have a publicly available archive for reports and responses for later searching. * SPC: implied, not stated * more specific? ---- 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 * does SPC want/need statement about private reporting of vulnearbility? * 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 * does SPC want/need criteria covering vulnerability reporting response times? ---- 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. * SPC: no statement about using common build tools * CIIBP: The project SHOULD be buildable using only FLOSS tools. * SPC: no statement about using FOSS build 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. * should add FOSS to tests? * 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. * SPC: no mention of testing evidence or metrics * 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: The project MUST enable one or more compiler warning flags, a "safe" language mode, or use a separate "linter" tool to look for code quality errors or common simple mistakes, if there is at least one FLOSS tool that can implement this criterion in the selected language. * SPC: no statement on compiler flags * CIIBP: The project MUST address warnings. * SPC: no statement on addressing warnings * CIIBP: It is SUGGESTED that projects be maximally strict with warnings in the software produced by the project, where practical. * SPC: no statement on maximal strictness with warnings ---- CIIBP: Secure development knowledge * CIIBP: The project MUST have at least one primary developer who knows how to design secure software. * SPC: nothing on Secure development knowledge? * CIIBP: At least one of the project's primary developers MUST know of common kinds of errors that lead to vulnerabilities in this kind of software, as well as at least one method to counter or mitigate each of them. * SPC: nothing on dev with vulnerabilities & mitigation 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 * SPC: add only use cryptography 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. * SPC: don't roll your own crypto? * CIIBP: All functionality in the software produced by the project that depends on cryptography MUST be implementable using FLOSS. * SPC: need only FOSS crypto? * 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. * SPC: crypto keylenghts? * CIIBP: The default security mechanisms within the software produced by the project MUST NOT depend on broken cryptographic algorithms * SPC: don't depend on known-to-be-broken crypto? * 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). * SPC: don't depend on known to be weak, if safer available? * 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. * SPC: implement perfect forward secrecy? * 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). * SPC: require password salting? * 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. * SPC: only cryptographically secure PRNGs for security? ---- 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. * SPC: avoid MITM via https or ssh? * CIIBP: A cryptographic hash (e.g., a sha1sum) MUST NOT be retrieved over http and used without checking for a cryptographic signature. * SPC: check cryptographic hash signatures & use https ---- 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. * SPC: no unpatch known vulnerabilities older than 60 days? * CIIBP: Projects SHOULD fix all critical vulnerabilities rapidly after they are reported. * SPC: rapidly fix all reported critical vulnerabilities ---- CIIBP: Other security issues * CIIBP: The public repositories MUST NOT leak a valid private credential (e.g., a working password or private key) that is intended to limit public access. * SPC: Contributors MUST NOT upload sensitive information regarding users, their organization or third parties to the repository. Examples of sensitive information include configurations, usernames and passwords, public keys and other real credentials used in the production system. ---- 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. * SPC: Static code analysis? * 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. * SPC: rules approach to look for common vulnerabilities? * CIIBP: All medium and high severity exploitable vulnerabilities discovered with static code analysis MUST be fixed in a timely way after they are confirmed. * SPC: timely fixing of severity exploitable vulnerabilities discovered with static code analysis? * CIIBP: It is SUGGESTED that static source code analysis occur on every commit or at least daily. * SPC: add static code analysis to continuous integration? ---- 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. * SPC: suggest fuzz testing or Zed Attack Proxy? * 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. * SPC: scan and test for memory safety violations? * CIIBP: It is SUGGESTED that the software produced by the project include many run-time assertions that are checked during dynamic analysis. * SPC: suggest dynamic asserts? * CIIBP: All medium and high severity exploitable vulnerabilities discovered with dynamic code analysis MUST be fixed in a timely way after they are confirmed. * SPC: "timely" fixes of medium and high severity exploitable vulnerabilities discovered with dynamic code analysis? ---- Misc notes: ----

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password

    or

    By clicking below, you agree to our terms of service.

    Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully