没有一套实践可以保证软件永远不会有缺陷或漏洞。即使是形式化方法,如果规范或假设错误也可能失败。也没有任何一套实践可以保证项目将维持一个健康且运作良好的开发社区。
然而,遵循最佳实践可以帮助改善项目的成果。例如,一些实践能够在发布前进行多人审查,这既有助于发现其他难以发现的技术漏洞,又有助于在来自不同组织的开发者之间建立信任并促进重复互动的意愿。
本页讨论为开源安全基金会(OpenSSF)最佳实践徽章开发的自由/开放源代码软件(FLOSS)项目的最佳实践集。遵循这些最佳实践的项目将能够自愿自我认证并展示他们已获得相关徽章。项目可以免费使用Web应用程序(BadgeApp)来解释他们如何满足这些实践及其详细条款。
这些最佳实践的创建是为了:
"最佳实践"这个成语的意思是"在一个组织、行业等中被优选或视为标准的程序或一套程序"(来源:Dictionary.com)。这些条款是我们认为在更广泛的FLOSS社区中被广泛"优选或视为标准"的内容。
有关这些条款如何制定的更多信息,请参阅OpenSSF最佳实践徽章GitHub网站。
您也可以查看完整条款。
最佳实践条款分为三个级别:
每个条款都有一个简短的名称,在条款文本后的方括号内以上标文本显示。
Linux基金会还赞助OpenChain项目,该项目确定"高质量自由和开源软件(FOSS)合规计划"的条款。OpenChain专注于组织如何最好地使用FOSS并为FOSS项目做出贡献,而OpenSSF最佳实践徽章专注于FLOSS项目本身。OpenSSF最佳实践徽章和OpenChain共同努力,帮助改进FLOSS以及FLOSS的使用方式。
在某些情况下,如果项目遵循标准惯例并托管在具有良好API支持的网站(例如GitHub)上,我们会自动测试并填写信息。
我们打算在未来改进这种自动化。欢迎改进自动化的贡献!
然而,我们有意优先考虑"什么是重要的",即使无法负担得起自动化。我们喜欢自动化测量,但并非所有重要的事情都可以自动化或可以负担得起自动化。
我们预计这些实践及其详细条款将随着时间的推移而更新。我们计划添加新条款,但将其标记为"未来"条款,以便项目可以添加该信息并保持其徽章。
非常欢迎通过GitHub网站以问题或拉取请求的形式提供反馈。还有一个用于一般讨论的邮件列表。
本文档中的关键词"MUST"、"MUST NOT"、"SHOULD"、"SHOULD NOT"和"MAY"应按照RFC 2119中的描述进行解释。添加了附加术语SUGGESTED。总之,这些关键词具有以下含义:
标准通常表述为应该(SHOULD)做某事,或者建议(SUGGESTED),因为实现可能困难或成本可能很高。
要获得徽章,必须满足所有"必须"(MUST)和"禁止"(MUST NOT)标准,所有"应该"(SHOULD)标准必须满足或提供不满足的理由,并且必须考虑所有"建议"(SUGGESTED)标准(必须评级为满足或不满足,但除非另有说明,否则不需要理由)。在允许的情况下,N/A("不适用")的答案被视为满足。在某些情况下,特别是在较高级别的徽章中,可能需要理由和/或网址(URL)。
某些标准具有影响此要求的特殊标记:
项目必须达到前一级别才能达到下一级别。在某些情况下,"应该"(SHOULD)标准在更高级别的徽章中变成"必须"(MUST),并且一些较低级别的"建议"(SUGGESTED)标准在更高级别的徽章中变成"应该"(SHOULD)或"必须"(MUST)。较高级别还需要更多理由,因为我们希望其他人了解标准如何得到满足。
(许多)加密标准并不总是适用,因为某些软件不需要直接使用加密功能。在这些情况下,请回答N/A。
有一个隐含的通过标准 - 每个项目必须有一个具有稳定网址(URL)的公共网站。这是首先创建徽章条目所必需的。
如果您不熟悉软件开发或运行FLOSS项目,诸如Producing Open Source Software by Karl Fogel等材料可能对您有所帮助。
以下是一些关键术语:
条件:
通过级别不包括对单人项目不切实际的标准,例如需要大量资金的标准。许多FLOSS项目规模很小,我们不想剥夺它们的权利。
我们的应用程序为每个项目条目提供唯一的id,但这对搜索项目的人没有帮助。就我们的目的而言,项目的真实名称是其仓库的网址(URL),如果不可用,则是项目"主页"网址(URL)。我们限制对仓库网址(URL)的更改速率以防止一些无意义的行为。项目通常具有人类可读的名称,但这些名称不够唯一。
论文 开放徽章在教育中的应用:在开放系统和徽章交叉点的意义是什么? 确定了徽章系统的三个一般原因(所有这些都适用于此):
我们选择使用自我认证,因为这使得大量项目(甚至小型项目)能够参与。有数百万个自由开源软件项目,支付第三方独立评估每个项目的费用无法扩展。项目可能会做出虚假声明的风险是存在的,但我们认为风险很小,用户可以自己检查声明,并且可以覆盖虚假声明。我们还使用自动化来覆盖虚假声明,前提是我们对结果有信心。