واجهة VPN ومحرّك GPL وبرنامج تثبيت: ما الذي يُوزَّع؟
ارسم خريطة لما يُوزَّع وما عُدِّل وكيف تتواصل الأجزاء قبل أن تقرّر كيف تنطبق شروط GPL وOpenSSL على حزمة واجهة VPN لديك.
يأتي السؤال بوصفه مسألة ترخيص، لكن الجواب يبدأ بجرد. يمكن أن تكون لواجهة VPN والمحرّك OpenVPN الذي تشغّله ومكتبة TLS وبرنامج التثبيت أربع مجموعات مختلفة من الشروط، ولا يكشف مظهر المنتج شيئًا عن الملف الذي ينتمي إلى أي مجموعة. اعمل على العناصر بالترتيب الذي تُوزَّع به، وسيصبح السؤال القانوني أضيق بكثير حين تسلّمه إلى شخص مؤهّل للإجابة عنه. كل خطوة تضيّقه أكثر: ما يُوزَّع، وما تغيّر، وكيف تتواصل الأجزاء.
ابدأ بما يضعه برنامج التثبيت على القرص
خذ برنامج التثبيت أو الحزمة الصادرة، لا نسخة تطوير، واسرد كل ملف يضعه على جهاز نظيف. سجّل إصدارات الواجهة والمحرّك ومكتبة TLS، ولاحظ ما إذا كان المحرّك ملفًا تنفيذيًا منفصلًا أم مكتبة تُحمَّل في العملية نفسها.
هذه الحقيقة الأخيرة تشكّل كل ما يلي. الملف التنفيذي المنفصل الذي يُشغَّل عبر مقبس يطرح مجموعة أسئلة مختلفة عن الشيفرة المجمّعة في ملف ثنائي واحد، وبرنامج تثبيت يضع الاثنين جنبًا إلى جنب لا يحسم المسألة في أي اتجاه. التجميع قرار يتعلق بالتغليف، أما العلاقة بين البرنامجين فقرار معماري.
اكتب القائمة مرفقة بالإصدارات، لأن الشروط تختلف بين الإصدارات الرئيسية.
dpkg -L openvpn | head -n 40
openssl version -aافصل الواجهة عن المحرّك
يذكر ملف النسخ الخاص بـ OpenVPN الإصدار 2 من GPL ويوثّق استثناء ربط من أجل OpenSSL، وهو إذن محدّد بنطاق معيّن لا ترخيص عام لخلط الشروط.
التقط نص الترخيص الذي يُوزَّع مع بنائك، لا النص الموجود على موقع المشروع اليوم. الإصدار الذي ثبّت فرعًا أقدم يحمل مستند ذلك الفرع. لقطات الشاشة لصفحة مستودع ليست بديلًا، لأن الملف الذي تحتاجه هو الموجود داخل العنصر. خزّنه بجانب برنامج التثبيت ليكون الملف كاملًا.
ثم صف التكامل بصدق: هل تشغّل الواجهة المحرّك كعملية فرعية وتتحدث بروتوكولًا نصيًا، أم تربط مكتبة وتتبادل بنى داخلية؟ الترتيب الثاني وثيق الصلة بطريقة لا ينطبق عليها الأول، وهذا الفرق هو ما سيسأل عنه المراجع أولًا.
دوّن الملفات التي غيّرتها
الشيفرة المصدرية المعدّلة تغيّر التحليل أكثر من أي تفصيل في التغليف. إذا رقّعت المحرّك، فالترقيع نفسه عمل مشتق، والالتزام يقع على من يوزّع النتيجة.
سجّل كل ترقيع وغرضه وما إذا أُرسل إلى المنبع، لأن ترقيعًا لم يغادر مستودعك قط يظل جزءًا مما توزّعه إذا وزّعت الملف الثنائي.
تعيش ملفات التهيئة والسمات والترجمات عادة مع الواجهة، لكن ترجمة تُضمّن سلاسل من شيفرة المحرّك تذكير صغير بأن الحدود لكل ملف لا لكل مجلد. احتفظ بفروق بين إصدار المنبع وبنائك ليكون الجواب متاحًا عند الطلب بدل إعادة بنائه لاحقًا. هذه الفروق هي أيضًا أنفع عنصر عندما يسأل مدقق عما تغيّر.
تحقّق من إصدار OpenSSL منفردًا
يُوزَّع OpenSSL 3.0 وما بعده بموجب ترخيص Apache 2.0، بينما تحمل الإصدارات الأقدم شروط OpenSSL/SSLeay. تلك مستندات مختلفة بالتزامات مختلفة، وقد يربط محرّك مُجمَّع أيًّا منهما وجده نظام البناء لديك.
أكّد الإصدار الذي يُوزَّع فعليًا لا الإصدار المذكور في نص بناء.
لا يحوّل اعتماد OpenVPN كل تعديل على OpenSSL إلى شيفرة GPL، ولا يزيل استثناء الربط الالتزامات الأخرى التي تأتي مع إعادة توزيع المكتبة. تعامل مع الاستثناء كبند واحد في تحليل أوسع، وسجّل إشعارات مكتبة TLS نفسها إلى جانب كل شيء آخر.
جمّع حزمة الأدلة
تتكوّن الحزمة من أربعة أجزاء: جرد الملفات مع الإصدارات، ووصف التكامل، وقائمة التعديلات مع الفروق، ونصوص التراخيص كما تُوزَّع. أضف ملف الإشعار الذي توزّعه والمكان الذي يُعرض فيه المصدر، إذا كانت التزاماتك تشترط عرضًا.
أبقِ الحزمة تحت مسؤول واحد حتى لا يصدر إصدار من دونها.
لا شيء من هذا يحسم مسألة قانونية، وهذا هو المقصود: يمنح مراجعًا مؤهلًا الوقائع بدل ملخّص جمعه أحدهم من الذاكرة. وصف التسويق من المورّد ليس دليلًا على هندستهم المعمارية، وتخمينك أنت بشأنها ليس دليلًا أيضًا.