השאלה מגיעה כשאלת רישוי, אבל התשובה מתחילה במלאי. ממשק VPN, מנוע ה-OpenVPN שהוא מפעיל, ספריית TLS ומתקין יכולים להיות בעלי ארבע קבוצות תנאים שונות, והמראה של המוצר לא אומר לכם דבר על איזה קובץ שייך לאיזו קבוצה. עברו על החפצים לפי הסדר שבו הם מופצים, והשאלה המשפטית הופכת הרבה יותר צרה עד שתמסרו אותה למישהו שמוסמך לענות עליה. כל שלב מצמצם אותה עוד: מה מופץ, מה שונה ואיך החלקים מתקשרים.

התחילו במה שהמתקין מניח על הדיסק

קחו את המתקין או החבילה שפורסמו, לא עותק פיתוח, ורשמו כל קובץ שהוא מניח על מכונה נקייה. תעדו גרסאות לממשק, למנוע ולספריית ה-TLS, וציינו אם המנוע הוא קובץ הרצה נפרד או ספרייה שנטענת באותו תהליך.

העובדה האחרונה הזו מעצבת את כל מה שאחריה. קובץ הרצה נפרד שמופעל דרך שקע מעלה קבוצה שונה של שאלות מאשר קוד שנבנה לקובץ בינארי אחד, ומתקין שרק מניח את שניהם זה לצד זה לא מכריע את העניין לשום כיוון. אריזה היא החלטת אריזה, ואילו היחס בין התוכנות הוא החלטה ארכיטקטונית.

רשמו את הרשימה עם הגרסאות, כי התנאים שונים בין מהדורות ראשיות.

dpkg -L openvpn | head -n 40
openssl version -a

הפרידו בין הממשק למנוע

קובץ ההעתקה של OpenVPN מציין GPL גרסה 2 ומתעד חריגת קישור עבור OpenSSL, שהיא הרשאה ספציפית עם היקף מוגדר ולא רישיון כללי לערבב תנאים.

תעדו את טקסט הרישיון שמופץ עם הבנייה שלכם, לא זה שבאתר הפרויקט היום. מהדורה שנעצה ענף ישן יותר נושאת את המסמך של אותו ענף. צילומי מסך של עמוד מאגר אינם תחליף, כי הקובץ שאתם צריכים הוא זה שבתוך החפץ. שמרו אותו לצד המתקין כדי שהחבילה תהיה שלמה.

לאחר מכן תארו את האינטגרציה בכנות: האם הממשק מפעיל את המנוע כתהליך בן ומדבר פרוטוקול טקסט, או שהוא מקשר ספרייה ומחליף מבנים פנימיים? ההסדר השני צמוד באופן שהראשון אינו, וההבחנה הזו היא מה שסוקר ישאל עליו קודם.

ציינו אילו קבצים שיניתם

קוד מקור ששונה משנה את הניתוח יותר מכל פרט אריזה. אם תיקנתם את המנוע, התיקון עצמו הוא יצירה נגזרת, והחובה מוטלת על מי שמפיץ את התוצאה.

תעדו כל תיקון, את מטרתו ואם נשלח למעלה, כי תיקון שמעולם לא עזב את המאגר שלכם הוא עדיין חלק ממה שאתם מפיצים אם אתם מפיצים את הבינארי.

קובצי תצורה, ערכות נושא ותרגומים חיים בדרך כלל עם הממשק, אבל תרגום שמשבץ מחרוזות מקוד המקור של המנוע הוא תזכורת קטנה שהגבול הוא לפי קובץ ולא לפי תיקייה. שמרו הבדל בין מהדורת המעלה לבנייה שלכם כדי שהתשובה תהיה זמינה לפי בקשה במקום להיבנות מחדש אחר כך. ההבדל הזה הוא גם החפץ השימושי ביותר כשמבקר שואל מה השתנה.

בדקו את גרסת OpenSSL בנפרד

OpenSSL 3.0 ואילך מופצים תחת Apache License 2.0, ואילו מהדורות ישנות יותר נושאות את תנאי OpenSSL/SSLeay. אלה מסמכים שונים עם חובות שונות, ומנוע ארוז עשוי לקשר כל אחד מהם שמערכת הבנייה שלכם מצאה.

אשרו את הגרסה שמופצת בפועל ולא את זו הנקובה בסקריפט בנייה.

תלות ב-OpenVPN אינה הופכת כל שינוי ב-OpenSSL לקוד GPL, וחריגת הקישור אינה מסירה את שאר החובות שמגיעות עם הפצה מחדש של הספרייה. התייחסו לחריגה כאל סעיף אחד בניתוח רחב יותר, ותעדו את ההודעות של ספריית ה-TLS עצמה לצד כל השאר.

אספו את חבילת הראיות

בחבילה ארבעה חלקים: מלאי הקבצים עם גרסאות, תיאור האינטגרציה, רשימת השינויים עם הבדלים וטקסטי הרישיון כפי שמופצים. הוסיפו את קובץ ההודעות שאתם מפיצים ואת המקום שבו מוצע קוד המקור, אם החובות שלכם דורשות הצעה.

החזיקו את החבילה תחת בעלים אחד כדי ששום מהדורה לא תצא בלעדיה.

שום דבר מזה לא מכריע שאלה משפטית, וזו הנקודה: זה נותן לסוקר מוסמך את העובדות במקום תקציר שמישהו הרכיב מהזיכרון. תיאור שיווקי של ספק אינו ראיה לארכיטקטורה שלו, וגם הניחוש שלכם לגביה אינו ראיה.

מאמרים קשורים