ソフトウェアに欠陥や脆弱性がないことを保証できる一連のプラクティスはありません。正式な手法であっても、仕様や仮定が間違っていれば失敗する可能性があります。また、プロジェクトが健全で機能的な開発コミュニティを維持することを保証できる一連のプラクティスもありません。
しかし、ベストプラクティスに従うことで、プロジェクトの成果を向上させることができます。たとえば、リリース前に複数人によるレビューを可能にするプラクティスもあります。これは、発見しにくい技術的な脆弱性を発見するのに役立ち、異なる組織の開発者の間で信頼を築き、繰り返しやりとりすることができます。
このページでは、Open Source Security Foundation (OpenSSF) のベストプラクティス バッジのために開発された、Free/Libre and Open Source Software (FLOSS) プロジェクトのためのベストプラクティスのセットについて説明します。これらのベストプラクティスに従っているプロジェクトは、自主的に自己認証を行い、関連するバッジを達成したことを示すことができます。プロジェクトは、Webアプリケーション (BadgeApp) を使用して、どのようにしてこれらのベストプラクティスとその詳細な基準を満たしているかを説明することで、無料でこれを行うことができます。
これらのベストプラクティスは、以下の目的で作成されました。
イディオム「ベストプラクティス」とは、「組織、業界などで推奨または標準と見なされる手順または一連の手順」を意味します。 (出典:Dictionary.com)。これらの基準は、より広いFLOSSコミュニティで広く「推奨または標準と見なされている」と私たちが信じているものです。
これらの基準がどのように開発されたかの詳細については、OpenSSF Best PracticesバッジGitHubサイトを参照してください。
また、完全な基準を見ることもできます。
ベストプラクティスの基準は次の3レベルに分かれています。
各基準には短い名前が付けられており、基準テキストの後の角括弧内に上付きのテキストとして表示されています。
Linux Foundationは、「高品質のフリーおよびオープンソース ソフトウェア(FOSS)コンプライアンス プログラム」の基準を特定する OpenChain Projectも後援しています。OpenChainは、組織がFLOSSを最適に使用し、FLOSSプロジェクトに貢献する方法に焦点を当てていますが、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と答えてください。
暗黙の合格基準が1つあります。すべてのプロジェクトには、安定したURLを持つ公開Webサイトが必要(MUST)です。これは、最初にバッジエントリを作成するために必要です。
ソフトウェア開発やFLOSSプロジェクトの実行に慣れていない場合は、KarlFogelによるオープンソース ソフトウェアの作成などの資料が役立つ場合があります。
重要な用語をいくつかご紹介します。
基準とは:
合格レベルの基準には、たとえば多額の資金を必要とするものなど、1人で行うプロジェクトでは現実的ではないような基準は含まれていません。多くのFLOSSプロジェクトは小規模であり、彼らの権利を奪うことは避けたいと考えています。
私たちのアプリケーションはすべてのプロジェクトエントリに一意のIDを与えますが、それはプロジェクトを検索する人々を助けません。アプリケーションにとって、プロジェクトの実名はそのリポジトリのURLであり、それが利用できない場合は、プロジェクトの「フロントページ」のURLです。このURLへの変更をレート制限して、無意味な変更を防止しています。通常、プロジェクトには人間が読める名前が付いていますが、これらの名前は一意ではありません。
論文Open badges for education: what are the implications at the intersection of open systems and badging?(教育のためのオープン バッジ:オープン システムとバッジ機能の接点がもたらす成果)では、バッジシステムが有効な一般的な理由として、以下の3つを挙げています(すべて当てはまります)。
私たちが自己認証を採用した理由は、多くのプロジェクト(小さなプロジェクトであっても)が参加できるようにするためです。何百万ものFLOSSプロジェクトがあり、サードパーティにお金を払って個々に評価することはできません。プロジェクトが虚偽の主張をするリスクはありますが、そのリスクは小さく、ユーザーが自分で主張を確認でき、虚偽の主張を無効にすることができます。また、自動化を使用して虚偽の主張を無効にできるため、結果に自信を持つことができます。