License compliance check: מה נשבר בצינור הבנייה
אירוע רישוי כמעט לעולם לא נראה כמו אירוע. בזמן שהשחרור נבנה, איש לא שם לב שתלות טרנזיטיבית נוספת סחבה תנאים האוסרים שימוש במוצר סגור.
בדיקת רישיונות בבנייה מתקיימת כסקריפט נפרד על המחשב של המהנדס — לכן רישיונות אסורים בתלויות מגיעים לפרודקשן בשקט, וצפים בביקורת או בעסקה, כשכבר יקר לשנות את ההרכב.
יש שלוש סיבות. עץ התלויות מתעדכן מהר יותר מכפי שמישהו מספיק לקרוא את התנאים: עריכה אחת של קובץ נעול מוסיפה עשרה חבילות חדשות. הצינור מושך מקורות שונים — מנהל חבילות, אימג'ים מהמאגר, מודולים בינאריים מוכנים, שאליהם המנתח לא נכנס כברירת מחדל. ובדיקה ידנית אחת לרבעון לא מספיקה לקצב השינויים ומהר מאוד מפסיקה להיות שלב חובה.
המחיר של החמצה — לא שורה בדוח. סיכוני רישוי של השחרור הופכים לדרישה להסיר או לשכתב פונקציונליות, ולפעמים לתביעה מבעל זכויות ולעצירת אספקה. צריך לגלגל אחורה לא שינוי אחד, אלא את כל שרשרת התלויות, כולל הטרנזיטיביות.
זה נסגר על ידי העברת license compliance check אל תוך הצינור: שלב נפרד משווה את עץ התלויות למדיניות — רישיונות מותרים, מותרים בתנאי ואסורים — לפני פרסום הארטיפקט. הבנייה נעצרת בשלב הבדיקה, לא בפרודקשן. נפרט איך זה בנוי והיכן עובר הגבול בין חסימה לאזהרה.
מה נותנת בדיקה אוטומטית בכל מיזוג
בדיקת רישיונות המשולבת בצינור מסתכלת לא על השחרור כולו, אלא על קבוצת שינויים מסוימת במיזוג: תלויות חדשות ומעודכנות, חבילות טרנזיטיביות, החלפת גרסאות. להלן מה הצוות מקבל בצורה מדידה.
- כיסוי שינויים — הכלל מופעל בכל מיזוג לענף הראשי, לא לפני השחרור; שיעור השינויים שעברו בדיקת תלויות אוטומטית מגיע ל-100% בלי בקרה ידנית.
- זמן ניתוח רישיונות — הדוח מגיע עם ניתוח מוכן: איזה רישיון, איזו חבילה הביאה אותו ומי משך את התלות. ניתוח מיזוג אחד לוקח דקות במקום שעות של השוואת מניפסטים.
- סוג כשל שהוסר — רישיונות עם חובת חשיפת קוד מקור לא מגיעים לשחרור: המיזוג נחסם, והמהנדס רואה מיד חבילת חלופית מתאימה.
- פורמט דוח אחיד — התוצאות נשמרות בפורמט קריא למכונה (SPDX), ולכן ייצוא אחד מתאים גם לבדיקה משפטית וגם כהיסטוריית החלטות לכל חבילה.
- חריגים תחת בקרה — חבילות שאושרו ידנית נרשמות עם נימוק ומועד סקירה, ולכן אישורים לא הולכים לאיבוד בין שחרורים.
- משוב לפני השחרור — המפתח לומד על הבעיה במיזוג שלו, לא בקבלה; היקף העבודות מחדש יורד יחד עם מספר הרישיונות הבלתי צפויים.
בסך הכול זה מעביר את הניקיון הרישיוני מפעולה חד-פעמית לפני שחרור לרקע קבוע: כל שינוי עובר בדיקה, לא רק זה שנכנס למדגם ידני. בהמשך נפרט איך מגדירים בדיקה כזאת ומה מונע ממנה להרעיש.
מצבי בדיקה: חוסם, מזהיר, נדחה
מצב בדיקה הוא פשרה בין המחיר של התראת שווא למחיר של רישיון שהוחמץ. במקרה הראשון השחרור נעצר ומהנדסים בודקים ידנית אם הרכיב באמת לא תואם; במקרה השני קוד שנוי במחלוקת יוצא לאספקה, וצריך להתמודד כבר עם השלכות משפטיות.
עומק ניתוח התלויות מוגדר בנפרד מהמצב: אפשר לבדוק רק תלויות ישירות או לנתח את כל העץ, כולל טרנזיטיביות. השני כן יותר, אך דורש גרסאות נעולות — אחרת הכלל מופעל על רכיב שלא נכנס לבנייה בכלל.
| מצב | מתי מתאים | מגבלות |
|---|---|---|
| חוסם | ענפי שחרור ובניות שנכנסות לאספקה ללקוח | עוצר שחרור בכל אי-התאמה; בלי רשימת רישיונות מותרים מכוילת נותן התראות שווא |
| מזהיר | ענפי פיתוח, שלבים מוקדמים של עבודה על משימה | לא עוצר דבר: ממצאים מצטברים ויוצאים לשחרור אם איש לא מנתח את הדוח באופן קבוע |
| בדיקת רישיונות נדחית | תלויות חיצוניות וטרנזיטיביות, מרשם רכיבים | לא משפיע על הבנייה: אי-התאמה מתגלה מאוחר יותר, כשהקוד כבר בענף הראשי |
בפועל משלבים בין המצבים: חוסם מפעילים בענפי שחרור, שבהם כל דקת השבתה חשובה; מזהיר — בשאר, ובדיקה נדחית מופעלת לפי לוח זמנים כדי לעקוב אחרי החלפת רישיונות ברכיבים חיצוניים. מערך כזה נותן קפדנות היכן שהיא מוצדקת, ולא מפריע לעבודה היומיומית.
הטמעה בשלבים: ממלאי ועד תקנון
סדר השלבים כאן אינו פורמליות: אם מתחילים בהגדרת חסימות, הצינור ייעצור במיזוג הראשון והבדיקה תכובה. לכן קודם אוספים עובדות על מה שכבר בשימוש, אחר כך מנסחים כללים, ורק אז מפעילים אותם בעבודה.
- מלאי תלויות. אוספים מרשם מלא: ספריות ישירות וטרנזיטיביות, אימג'ים, רכיבים חיצוניים — עם רישיון וגרסה לכל אחד. מפרידים בין מה שנכנס למוצר המסופק לבין מה שקיים רק בבנייה: הדרישות אליהם שונות.
- מדיניות קבלת רישיונות. מחלקים רישיונות לשלוש קבוצות: מותרים ללא שאלות, כאלה שדורשים תנאים (ייחוס יוצרים, שמירת הטקסט), ואסורים. מקרים שנויים במחלוקת נרשמים בנפרד — עם נימוק, מי קיבל את ההחלטה ועל איזה בסיס.
- הגדרת בדיקה בצינור. מעבירים את הכללים לבדיקה אוטומטית שמופעלת בכל שינוי ובודקת מניפסטים וקובצי נעילה. הפרה עוצרת את הבנייה עם ציון התלות והרישיון הספציפיים — המהנדס רואה מיד מה לתקן.
- בדיקה במיזוג ניסיוני. מריצים את הכלל על בקשה אמיתית, לא על דוגמה לתרגול: בודקים כמה התראות שווא יש, האם הבדיקה מעכבת את הבנייה, והאם הודעת השגיאה ברורה. בהמשך מגדירים חריגים — מדויק יותר מכיבוי הכלל כולו.
- נוהל טיפול בהפרות. מסכמים מה עושים כשהכלל מופעל: להחליף ספרייה, לקבל אישור בכתב, לרשום חריג עם מועד. בלי שלב זה הבדיקה הופכת לוויכוח מתמיד עם המפתחים.
- מסירת תקנון. מוסרים מסמך עם קבוצות רישיונות, הוראות לטיפול בהפרות ונקודות שבהן הכלל חי בקוד. התקנון מתעדכן כשהמדיניות משתנה — אחרת הוא מאבד תוקף כעבור חודשיים.
ארטיפקטים של הטמעה: מדיניויות קבלה, תרשימים, תקנונים
התוצאה של העבודה אינה כלי מוגדר שחי כל עוד מהנדס נמצא לידו, אלא מערכת ארטיפקטים שלפיה הצוות משחזר בעצמו בדיקת ניקיון רישיוני (license compliance check). הכול נמצא במאגר לצד הקוד, עובר רוויו ומנוהל בגרסאות יחד עם השירותים.
- מדיניויות קבלת רישיונות — כללים בחלוקה לפי אופן השימוש: מה מותר לשירות פנימי, מה למוצר מסופק, ומה עובר לאישור ידני.
- תרשים זרימת הבדיקה — מקיבוע התלויות ועד חסימת הבנייה: נקודת כניסה, שלבי חובה, מקום להחלטת אדם.
- מרשם חריגים — טבלה עם נימוק לכל חריגה, בעלים ותאריך סקירה, כדי שהקלות לא יהפכו לקבועות.
- תיעוד רישיונות — רשימת רכיבים והתנאים שלהם: אילו התחייבויות נוצרות בעת אספקה ומה לצרף לשחרור.
- תקנון לצוות — מה לעשות כשהבדיקה מופעלת: איך לנתח את הסיבה, למי לפנות, איך לרשום חריג.
- נוהל עדכון כללים — מי מוסיף רישיון חדש לרשימות, איך השינוי עובר רוויו ואיך הצוות לומד עליו.
- דוחות לפי שחרור — מה נבדק, מה נשאר מחוץ לבדיקה, ואיפה הצטברו חריגים.
הפורמטים פתוחים: מדיניויות — קובצי טקסט, תיעוד — קובצי טקסט רגילים לצד הקוד. מערך כזה שורד החלפה של כלים ואנשים.
מקרה בוחן: הסרנו סוג של כשלים בשחרורים בגלל רישיונות
השחרור נעצר יומיים לפני העלאה: לבנייה נכנסה בדרך טרנזיטיבית ספרייה ברישיון שדורש חשיפת קוד נגזר, ומודל ההפצה של המוצר לא אפשר זאת. הניתוח דרש שלוש פגישות — המשפטנים חיפשו מי ומתי הוסיף את החבילה, והמהנדסים בדקו אם אפשר להחליף אותה בלי לשכתב את המודול. השחרור נדחה, אף שהקוד היה מוכן ונבדק: הבעיה התבררה לא בלוגיקה, אלא בהרכב הבנייה.
לפני: בדיקה בסוף הדרך
בקרת רישיונות נערכה בשלב הכנת השחרור, אחרי הקפאת הקוד, כשמחיר התיקון הוא מקסימלי. שמונה מתוך עשרה מקרים צפו בימים האחרונים שלפני ההעלאה, והתיקון דרש להחזיר את המשימה לפיתוח ולהריץ מחדש רגרסיה. היסטוריית הבדיקות לא הצטברה — כל אירוע נותח מאפס.
אחרי: בקרה בזמן המיזוג
הבדיקה הועברה לרגע המיזוג: לכל שינוי נאספת רשימת תלויות והרישיונות שלהן, סריקה מבוססת ScanCode משווה אותה למדיניות — רשימות מתירות ואוסרות בתוספת חריגים עם תאריך סקירה. המסקנה מגיעה לדיון על השינוי בתוך דקות, לצד השינויים בקוד, והמחבר רואה מיד את החבילה שהפרה את הכלל.
שיעור אי-ההתאמות שנמצאו בשלב השחרור ירד מכ-80% לכ-10%, עיכוב השחרור בגלל בדיקות — מימים אחדים לשעות, וניתוח אירוע אחד אורך 10–15 דקות במקום סדרת ישיבות. סירובים וחריגים נרשמים במדיניות, רשימת הרישיונות מצטברת אוטומטית, ולכן אין עוד צורך בניתוח חוזר ידני.
במה מדיניות ציות נבדלת מאיתור פגיעויות?
מדיניות ציות ואיתור פגיעויות מסתכלים על אותה קבוצת תלויות, אך עונים על שאלות שונות. הראשונה — על זכויות: האם בכלל מותר להשתמש ברכיב הזה במוצר ובאילו תנאים. השנייה — על אבטחה: האם ברכיב יש חור ידוע והאם הוא בר-השגה בתרחיש שלנו.
מכאן גם האותות השונים ביציאה. רישיון עם חובת חשיפת קוד נגזר במוצר סגור אינו פגם אבטחה, וסורק פגיעויות פשוט לא יציג אותו. המצב ההפוך נפוץ לא פחות: פגיעוּת קריטית ברכיב ברישיון מתיר אינה מפרה זכויות, אבל דורשת עדכון דחוף.
גם התגובות ובעלי הממצאים שונים. מקרה רישוי נסגר בהחלפת רכיב, בידודו לשירות נפרד או החלטה מודעת ברמת המוצר. פגיעוּת נסגרת בתיקון, עדכון גרסה או אמצעי מפצה בפרימטר — וכאן ההחלטה היא של מהנדס, לא של משפטן. גם המועדים שונים: חור מתקנים לפי קריטיות, רישיון — לפני השחרור.
בדיוק משום כך בצינור מציבים את שתי הבדיקות זו לצד זו, אבל לא מערבבים אותן לדוח אחד. ניתוח אחד של הרכב הבנייה נותן שני פסקי דין בלתי תלויים: לפי זכויות ולפי אבטחה, עם כללי חסימה שונים. אם מאחדים אותם לרשימה אחת, ממצא רישיוני יטובע בין מאות אזהרות של הסורק ויעבור לפרודקשן.
שילוב הבדיקות בצינור נותן חיסכון בזמן: התלויות מנותחות פעם אחת, והכללים מיושמים פעמיים. שער האיכות עם זאת משותף — הבנייה לא ממשיכה אם הופרה מדיניות ציות או חרגנו מסף הקריטיות לפגיעויות. כך ההבדל בין הבדיקות נשאר גלוי, וההחלטה על שחרור מתקבלת לפי שני בסיסים בבת אחת.
שאלות טכניות: חריגים, מגבלות, מקרי קצה
בדיקת תאימות רישיונות נשענת על מטא-נתונים של חבילות, לא על טקסט קובץ הרישיון בתוך הארכיון. רישוי כפול, תנאים מקוננים וחבילות בלי תווית מפורשת מסומנים על ידה כשנויים במחלוקת — וזה נכון: הכלי מצמצם את המעגל, ואת פסק הדין נותן אדם.
מה לעשות עם תלויות שכבר עובדות בפרודקשן?
הבדיקה קוראת מניפסטים וארטיפקטים של הבנייה, לא את מה שרץ בשרתים, ולכן ההרצה הראשונה תציג את כל הזנב המצטבר בבת אחת. אין לכבות אותו בחסימה: קודם מלאי — אילו חבילות בתנאים מגבילים, היכן הן נקראות בפועל, והאם יש חלופה. כללי חסימה מפעילים על קבוצה מוסכמת, והשאר עובר לתור עם תאריך ניתוח.
איך לרשום חריג מוסכם?
החריג חי במאגר לצד המניפסט — בקובץ המדיניות, לא בהתכתבות. לרשומה יש שם חבילה, טווח גרסאות, סיבה, מי אישר ותאריך סקירה; רשומה שפג תוקפה מפילה שוב את הבנייה, ולכן החריג לא הופך לנצחי. כשהמגבלה מגיעה מבעל זכויות, מתעדים את האישור בכתב ומצרפים לרשומה — עד לתשובה החבילה נשארת ברשימה.
עד כמה הבדיקה מאטה את הבנייה?
ניתוח עץ התלויות נשמר במטמון בין הרצות, ולכן הבדיקה מוסיפה שניות, לא דקות. הדוח נוצר בשלב נפרד: נופל כלל מסוים, לא כל הצינור, ובניית האימג' לא נעצרת. את הגבולות מכירים מראש — חבילות עם מטא-נתונים סגורים וספריות שנארזות מקומית הבדיקה לא רואה, ואותן סוגרים בכללים נפרדים.
נדון במשימה: מה לברר לפני תחילת העבודה
לפני שמתחילים חשוב להבין איך בנוי מרשם התלויות שלכם ובאיזה מקום בשחרור בדיקת רישיונות תיתן אפקט, ולא רק תוסיף רעש. מבררים את מקורות הרכיבים, את כללי האישור הנהוגים, וכמה עמוק צריך לנתח תלויות טרנזיטיביות. מזה תלוי גם היקף העבודה וגם הערכת לוחות הזמנים להגדרה.
- מרשם תלויות: אילו מנהלי חבילות בשימוש, האם יש מראות פרטיות ופנימיות, ומה חלקם של רכיבים ישירים וטרנזיטיביים.
- מדיניות רישיונות: אילו סוגים מותרים, מה נחשב בלתי מקובל במוצר מסופק, את מי ליידע במקרה של רישיון שנוי במחלוקת.
- נקודות בקרה בבנייה: באיזה שלב הבדיקה חוסמת שחרור, ואיפה די באזהרה ורישום בדוח.
- נוהל חריגים: איך נרשם אישור זמני, מי מאשר אותו ומתי סוקרים אותו.
- ארטיפקטים ודיווח: האם צריך רשימת כל רכיבי הבנייה עם רישיונות, ובאיזה פורמט להעביר אותה הלאה.
- לגאסי באספקה: רכיבים שכבר נשלחים, והדרישות לניתוח נפרד שלהם.
- קריטריוני קבלה: שיעור הרכיבים עם רישיון מאושר וזמן ריצה סביר של הבדיקה על הבנייה.
הנתונים שנאספו מספיקים כדי לחזור עם תוכנית הטמעה של בדיקת רישיונות: שלבים, הרכב השינויים בבנייה, נקודות חסימה והערכת לוחות זמנים להגדרה. תארו את המשימה — נדון בה לעומק ונציע סדר עבודה שמתאים לתהליך השחרור שלכם.







