ما SPDX؟
SPDX (Software Package Data Exchange) مشروع تابع لمؤسسة لينكس، وهو معيار للتعبير عن مكونات البرمجيات ومعلومات تراخيصها بصيغة يقرؤها الحاسوب. وأصبح عام 2021 معيارًا دوليًا باسم ISO/IEC 5962:2021. وأكثر أجزائه استخدامًا هو المعرّفات القصيرة في قائمة تراخيص SPDX. فهي اتفاق على كتابة MIT وحده بدلًا من أسماء متفاوتة مثل 'MIT License' و'The MIT license' و'ترخيص MIT'.
سطرا ترويسة الملف
إذا وضعت السطرين التاليين كتعليق في أعلى الملف المصدري يستطيع البشر والأدوات معرفة صاحب حقوق الملف وترخيصه فورًا.
// SPDX-FileCopyrightText: 2026 Jane Doe <jane@example.com>
// SPDX-License-Identifier: MIT
- في
SPDX-License-Identifierيُكتب معرّف الترخيص أو تعبير (MIT OR Apache-2.0). SPDX-FileCopyrightTextهو إشعار حقوق النشر. وإذا تعدد الأشخاص تُكتب عدة أسطر.- اعتمدت نواة لينكس منذ 2017 أسلوب الاكتفاء بهذا السطر بدلًا من نص الإشعار الطويل، فقلّصت آلاف الأسطر من النصوص المكررة.
يُنشئ تبويب ترويسة الملف في المولّد هذين السطرين بسبع صيغ تعليق.
انتبه إلى المعرّفات المُهملة
منذ الإصدار 3.0 من قائمة تراخيص SPDX (ديسمبر 2017) صار بند الإصدار في تراخيص GNU يظهر في المعرّف.
| المعرّف المُهمَل | المعرّف الحالي |
|---|---|
GPL-2.0 | GPL-2.0-only |
GPL-2.0+ | GPL-2.0-or-later |
GPL-3.0 | GPL-3.0-only |
LGPL-2.1 | LGPL-2.1-only |
AGPL-3.0 | AGPL-3.0-only |
فإذا كتبت GPL-3.0 وحده فلا يُعرف أهو 'only' أم 'or later'. وقد لخّصنا الفرق بين الأسلوبين في only مقابل or-later.
بيانات الحزمة الوصفية
يقبل معظم مديري الحزم معرّفات SPDX أو تعبيراتها.
| المنظومة | الملف | مثال |
|---|---|---|
| npm | package.json | "license": "MIT" · وللمغلق "UNLICENSED" |
| Rust | Cargo.toml | license = "MIT OR Apache-2.0" |
| Python | pyproject.toml | license = "Apache-2.0" (PEP 639) |
| Maven | pom.xml | الاسم وعنوان URL داخل <licenses> |
UNLICENSED في npm يختلف تمامًا عن 'Unlicense'، فهو إشارة إلى حزمة مغلقة لا يُسمح باستخدامها. وتكثر الأخطاء بسبب تشابه التهجئة.
REUSE: جعل المستودع كله مقروءًا آليًا
تحدد مواصفة REUSE من مؤسسة البرمجيات الحرة الأوروبية (FSFE) طريقة تطبيق ترويسات SPDX بشكل متسق على المستودع كله.
- ضع جميع نصوص التراخيص في مجلد
LICENSES/باسممعرّف_SPDX.txt(مثلLICENSES/MIT.txt). - أضف
SPDX-FileCopyrightTextوSPDX-License-Identifierإلى كل ملف. - للملفات التي لا تقبل التعليقات (الصور وJSON وغيرها) اكتب المعلومات في ملف مجاور
اسم_الملف.licenseأو فيREUSE.tomlفي جذر المستودع. - افحص بأداة
reuse lintللتأكد من عدم وجود ملفات ناقصة.
نصائح عملية
- اكتب المعرّف كما هو في القائمة مع مراعاة حالة الأحرف (
Apache-2.0لاapache2). - اكتب التراخيص الخاصة غير المدرجة في القائمة بالبادئة
LicenseRef-(مثلLicenseRef-Proprietary). - وجود المعرّف دون النص الأصلي يصعب معه اعتبار التزام الإشعار مستوفى. ضع ملف النص الأصلي على حدة.
هذا المقال معلومات عامة وليس استشارة قانونية. استشر مختصًا في القرارات المهمة.
المصادر
- SPDX License List — https://spdx.org/licenses/
- SPDX Specification, Annex: Using SPDX short identifiers in source files — https://spdx.github.io/spdx-spec/v2.3/using-SPDX-short-identifiers-in-source-files/
- REUSE Specification — https://reuse.software/spec/
- npm Docs, package.json license — https://docs.npmjs.com/cli/configuring-npm/package-json#license
- PEP 639 — https://peps.python.org/pep-0639/