
ओपन सोर्स प्रोजेक्ट्स के लिए रिपॉजिटरी, योगदानकर्ता और डिपेंडेंसी मेट्रिक्स से क्रिटिकलिटी स्कोर की गणना करता है, ताकि सुरक्षा सुधारों को प्राथमिकता दी जा सके।
यह प्रोजेक्ट Securing Critical Projects WG के सदस्यों द्वारा अनुरक्षित है।
हर ओपन सोर्स प्रोजेक्ट के लिए एक क्रिटिकैलिटी स्कोर तैयार करें।
उन महत्वपूर्ण प्रोजेक्ट्स की सूची बनाएं जिन पर ओपन सोर्स समुदाय निर्भर है।
इन महत्वपूर्ण प्रोजेक्ट्स की सुरक्षा स्थिति को सक्रिय रूप से बेहतर बनाने के लिए इस डेटा का उपयोग करें।
किसी प्रोजेक्ट का क्रिटिकैलिटी स्कोर उस प्रोजेक्ट के प्रभाव और महत्व को परिभाषित करता है। यह 0 (सबसे कम महत्वपूर्ण) और 1 (सबसे अधिक महत्वपूर्ण) के बीच की संख्या है। यह Rob Pike द्वारा निम्नलिखित एल्गोरिदम पर आधारित है:
हम किसी ओपन सोर्स प्रोजेक्ट के लिए क्रिटिकैलिटी स्कोर प्राप्त करने हेतु निम्नलिखित डिफ़ॉल्ट पैरामीटर का उपयोग करते हैं:
नोट:
$ go install github.com/ossf/criticality_score/v2/cmd/criticality_score@latest
$ export GITHUB_TOKEN=... # requires a GitHub token to work
$ gcloud auth login --update-adc # optional, add -depsdev-disable to skip
$ criticality_score -gcp-project-id=[your projectID] https://github.com/kubernetes/kubernetes
repo.name: kubernetes
repo.url: https://github.com/kubernetes/kubernetes
repo.language: Go
repo.license: Apache License 2.0
legacy.created_since: 87
legacy.updated_since: 0
legacy.contributor_count: 3999
legacy.watchers_count: 79583
legacy.org_count: 5
legacy.commit_frequency: 97.2
legacy.recent_releases_count: 70
legacy.updated_issues_count: 5395
legacy.closed_issues_count: 3062
legacy.comment_frequency: 5.5
legacy.dependents_count: 454393
default_score: 0.99107
स्कोर की गणना कैसे की जाए यह निर्दिष्ट करने के लिए -scoring-config पैरामीटर का उपयोग करके और एक अलग कॉन्फ़िगरेशन फ़ाइल प्रदान करके स्कोर बदला जा सकता है।
डिफ़ॉल्ट रूप से original_pike.yml कॉन्फ़िगरेशन का उपयोग स्कोर की गणना के लिए किया जाता है। हालाँकि, अलग-अलग स्कोर उत्पन्न करने के लिए अन्य कॉन्फ़िगरेशन फ़ाइलें भी प्रदान की जा सकती हैं। अधिक जानकारी के लिए config/scorer देखें।
बेझिझक किसी एक कॉन्फ़िगरेशन की प्रतिलिपि बनाएं और अपनी आवश्यकताओं के अनुसार भार (weights) और थ्रेशोल्ड (thresholds) समायोजित करें।
क्रिटिकैलिटी स्कोर चलाने से पहले, आपको यह करना होगा:
GITHUB_AUTH_TOKEN में सेट करना होगा। यह बिना प्रमाणीकरण के अनुरोधों के साथ GitHub की एपीआई दर सीमाओं से बचने में मदद करता है।# For posix platforms, e.g. linux, mac:
export GITHUB_AUTH_TOKEN=<your access token>
# For windows:
set GITHUB_AUTH_TOKEN=<your access token>
वर्तमान में तीन प्रारूप हैं: text, json, और csv। भविष्य में अन्य जोड़े जा सकते हैं।
इन्हें -format फ़्लैग के साथ निर्दिष्ट किया जा सकता है।
क्रिटिकैलिटी स्कोर प्रोजेक्ट में क्रिटिकैलिटी स्कोर डेटा उत्पन्न करने और उसके साथ काम करने के लिए अन्य कमांड भी शामिल हैं।
enumerate_github: न्यूनतम संख्या में स्टार वाले GitHub रिपॉजिटरी के समूह को सटीक रूप से एकत्र करने के लिए एक उपकरणcollect_signals: Scorecard प्रोजेक्ट के बुनियादी ढांचे का लाभ उठाकर बड़े पैमाने पर कच्चे सिग्नल एकत्र करने के लिए एक वर्कर।scorer: इनपुट CSV फ़ाइल के आधार पर क्रिटिकैलिटी स्कोर की पुनर्गणना करने के लिए एक उपकरण।यदि आप उनके क्रिटिकैलिटी स्कोर के साथ महत्वपूर्ण प्रोजेक्ट्स की सूची देखने में रुचि रखते हैं, तो हम उन्हें csv प्रारूप और BigQuery डेटासेट में प्रकाशित करते हैं।
यह डेटा GCP में चल रहे क्रिटिकैलिटी स्कोर प्रोजेक्ट के प्रोडक्शन इंस्टेंस का उपयोग करके उत्पन्न किया गया है। इसे कैसे तैनात किया जाता है, इसका विवरण infra निर्देशिका में पाया जा सकता है।
नोट: वर्तमान में, ये सूचियाँ केवल GitHub पर होस्ट किए गए प्रोजेक्ट्स से ली गई हैं। हम निकट भविष्य में अन्य सोर्स कंट्रोल सिस्टम पर होस्ट किए गए प्रोजेक्ट्स को शामिल करने के लिए इनका विस्तार करने की योजना बना रहे हैं।
डेटा Google Cloud Storage पर उपलब्ध है और इसे इसके माध्यम से डाउनलोड किया जा सकता है:
gsutil कमांड-लाइन टूल: gsutil ls gs://ossf-criticality-score/यह डेटा सार्वजनिक BigQuery डेटासेट में उपलब्ध है।
GCP खाते के साथ आप डेटा पर क्वेरी चला सकते हैं। उदाहरण के लिए, यहाँ एक क्वेरी है जो स्कोर के आधार पर शीर्ष 100 रिपॉजिटरी लौटाती है:
SELECT repo.url, default_score
FROM `openssf.criticality_score_cron.criticality-score-v0-latest`
ORDER BY default_score DESC
LIMIT 100;
यदि आप शामिल होना चाहते हैं या आपके पास चर्चा के लिए विचार हैं, तो हम इस प्रोजेक्ट पर Securing Critical Projects WG बैठकों में चर्चा करते हैं।
शेड्यूल और मीटिंग आमंत्रण के लिए सामुदायिक कैलेंडर देखें।
योगदान करने के तरीके के मार्गदर्शन के लिए योगदान दस्तावेज़ देखें।
| Parameter (Si) | Weight (αi) | Max threshold (Ti) | विवरण | तर्क |
|---|
| created_since | 1 | 120 | प्रोजेक्ट बनाए जाने के बाद का समय (महीनों में) | पुराने प्रोजेक्ट के व्यापक रूप से उपयोग होने या उस पर निर्भर होने की अधिक संभावना होती है। |
| updated_since | -1 | 120 | प्रोजेक्ट को अंतिम बार अपडेट किए जाने के बाद का समय (महीनों में) | जिन प्रोजेक्ट्स का रखरखाव नहीं होता और जिनमें हालिया कमिट नहीं होते, उन पर कम निर्भर होने की अधिक संभावना होती है। |
| contributor_count | 2 | 5000 | प्रोजेक्ट योगदानकर्ताओं की संख्या (कमिट के साथ) | विभिन्न योगदानकर्ताओं की भागीदारी प्रोजेक्ट के महत्व को दर्शाती है। |
| org_count | 1 | 10 | उन विभिन्न संगठनों की संख्या जिनसे योगदानकर्ता जुड़े हैं | क्रॉस-संगठन निर्भरता को दर्शाता है। |
| commit_frequency | 1 | 1000 | पिछले वर्ष में प्रति सप्ताह कमिट की औसत संख्या | उच्च कोड परिवर्तन (code churn) प्रोजेक्ट के महत्व का हल्का संकेत देता है। साथ ही, कमजोरियों के प्रति अधिक संवेदनशीलता भी। |
| recent_releases_count | 0.5 | 26 | पिछले वर्ष में रिलीज़ की संख्या | बार-बार रिलीज़ उपयोगकर्ता निर्भरता को दर्शाती है। चूंकि इसका हमेशा उपयोग नहीं होता, इसलिए कम भार दिया गया है। |
| closed_issues_count | 0.5 | 5000 | पिछले 90 दिनों में बंद किए गए इश्यू की संख्या | उच्च योगदानकर्ता भागीदारी और उपयोगकर्ता इश्यू बंद करने पर ध्यान केंद्रित करने को दर्शाता है। चूंकि यह प्रोजेक्ट योगदानकर्ताओं पर निर्भर है, इसलिए कम भार। |
| updated_issues_count | 0.5 | 5000 | पिछले 90 दिनों में अपडेट किए गए इश्यू की संख्या | उच्च योगदानकर्ता भागीदारी को दर्शाता है। चूंकि यह प्रोजेक्ट योगदानकर्ताओं पर निर्भर है, इसलिए कम भार। |
| comment_frequency | 1 | 15 | पिछले 90 दिनों में प्रति इश्यू टिप्पणियों की औसत संख्या | उच्च उपयोगकर्ता गतिविधि और निर्भरता को दर्शाता है। |
| dependents_count | 2 | 500000 | कमिट संदेशों में प्रोजेक्ट के उल्लेखों की संख्या | रिपॉजिटरी के उपयोग को दर्शाता है, आमतौर पर वर्जन रोल (version rolls) में। यह पैरामीटर सभी भाषाओं में काम करता है, जिनमें C/C++ भी शामिल हैं जिनके पास पैकेज डिपेंडेंसी ग्राफ़ नहीं होते (हालांकि थोड़ा हैक-जैसा है)। निकट भविष्य में पैकेज डिपेंडेंसी ट्री जोड़ने की योजना है। |