הבלוג של ארתיום
בלוג על לינוקס, תוכנה חופשית, מוזיקה, סלסה, ומה לא!
לירות לעצמך ברגל... או לא כל הרישיונות שווים
אחד היתרונות הגדולים של תוכנה חופשית היא העובדה שאתה כמעט ולא צריך להמציא גלגל מחדש, תמיד תוכל למצוא ספריית צד ג' שעושה את הדבר.
למשל, אתה רוצה לחשב md5sum? מה בעיה? מוצאים קטע קוד ומכניסים, רוצים ספריה אקזוטית אחרת, מחפשים ומוצאים. בשלב מסוים אתה מגלה, שהקוד שלך, למעשה, מכיל כמה עשרות קטעי קוד צד ג'.
פה מתחילה הבעיה... לכל קטע קוד יש רישיון אקזוטי משלו, למשל, עבור הבלוג הזה והתשתית שלו הייתי צריך להשתמש בקטעי הקוד תחת הרישיונות הבאים:
- רישיון MIT עבור ספריה קטנה לקריאת קובצי־mo.
- רישיון zlib עבור ספריה קטנה שמחשבת md5sum.
- רישיון BSD עבור ספריה שהופכת Markdown ל־HTML.
- קוד ב־Public Domain לחישוב hash (בקרוב ישולב).
- קוד תחת רישיון MIT שכמעט הוכנס למערכת (מימוש של rb-tree).
- קוד תחת LGPL, שמשום מה לא היה חלק מספריה, אלא הופיע ב"דוגמאות".
אני כבר לא מדבר על ספריות שאני עושה איתן link: תחת רישיונות LGPL, boost ועוד רישיון מוזר חופשי אבל לא מוכר במיוחד.
הכל טוב ויפה? כל הרישיונות מאפשרים לשלב את הקוד בכל מיני פרויקטים שונים, כולל סגורים. כך שהכל נראה ורוד ביותר. עכשיו נראה שלא כל־כך.
ובכן, נתחיל:
קודם כל, למרות ש־LGPL מאפשר לשלב את הקוד בפרויקטים שונים, אני חייב ליצור ספריה דינמית עבור מי שירצה להחליף אותה לפי הדרישות של LGPL.
לצערי, קטעה הקוד הזה מהווה חלק מקוד המקור של CgiCC אבל מופיע ב־contrib ולא חלק מהספריה הסטנדרטית שאתה יכול לעשות אתה link. כך שאחרי הרבה מחשבות, שִכתבתי את קטע הקוד הזה בעצמי. בסה"כ, זה לא היה מסובך בכלל -- אחרי שקראתי היטב את הקוד המקורי, הבנתי מה הוא עושה ובזבזתי כמה שעות לכתיבה ודיבוג.
נמשיך, הבעיה השנייה, היא קוד תחת BSD. מודבר ב־4 Clause BSD שלא תואם GPL. אני משתמש בספריה הזו רק בקוד של הבלוג. מכיוון שאני כתבתי אותו ואני בעל זכויות היוצרים, אין לי בעיה לשחרר את הקוד תחת GPL ולכתוב הסתייגות עבור הספריה הספציפית הזו. מצד שני, אני לא אוכל להכניס את הקוד לספריות התשתית, כי אני רוצה שהן תישארנה תחת רישיון Modified BSD נקי או אולי LGPL. כך שמי שירצה להשתמש בספריה יצטרך לכתוב הסתייגויות מפורשות עבור הספריה הספציפית.
בינתיים שלחתי דוא"ל למפתח הספריה, בתקווה שהוא יסכים להחליף את הרישיון שלו לתואם GPL.
נמשיך...
היה לי קל לעבור על הספריות האלו על מנת להבין איזו מהן תואמות GPL ואלו לא -- קיימת רשימה מצוינת למטרה זו. אבל כל זה טוב רק עבור הבלוג שמשוחרר תחת GPL. השאלה היא, איזה מהספריות שאני משתמש בהן תואמות BSD ואלו לא? אני כנראה הולך לשחרר את קוד התשתית של CppCMS תחת Modified BSD Licence או אולי אפילו MIT.
השאלה היא, איזה מהרישיונות האלה תואם BSD או תואם MIT? אם לא? אז אני אצטרך לכתוב באופן מפורש רשימה של כל הרישיונות. אז מי שיבוא וישאל את עצמו: "תחת איזה רישיון ספריות התשתית שוחררו?" הוא יגלה שהן שוחררו תחת 5 רישיונות שונים! במקרה הטוב הוא פשוט יבזבז כמה דקות, על מנת לוודא כי הרישיונות האלה תואמים את הרישיון של הקוד שהוא רוצה לכתוב, במקרה הגרוע, יחליט לא להתעסק עם תכנה בעלת רישיון לא ברור או מפוקפק.
מה שמעניין, שלרוב המפתחים שכותבים את הקוד שלהם ומשחררים אותו תחת רישיונות חופשיים יש כוונות טובות; והעיקרית ביניהם -- שיתוף פעולה. אבל הפסיפס הצבעוני של עשרות רישיונות שונים ומשונים דווקא פוגע במטרה החשובה: שיתוף הידע והקוד.
פעם דוביקס כתב:
אני מעדיף להפיץ רק תוכנה חופשית, כי אז אני לא צריך להסתובב עם עורך־דין צמוד.
נראה לי שהוא טעה, אם אתה רוצה להיות מפתח תכנה חופשית, אתה זקוק לעורך־דין צמוד או השכלה משפטית בסיסית על מנת להבין את ה"עורך־דינית" של הרישיונות האלה.
קישורים מעניינים:
- דיון ב־WhatsUp בנוגע לתאימת הרישיונות.
- על שילוב קוד תחת רישיונות הלא־תואמים GPL.
- רשימה של רישיונות תואמים ולא תואמים GPL.
תגובות
רשיון BSD המקורי הוא שגיאה הסטורית בניסוח. אנשים שמבינים שלרשיון יש משמעות הבינו את זה כבר מזמן ושינו את הרשיון של כמעט כל הקוד בהפצות BSD השונות. כדאי פשוט להתרחק מקוד שמשתמש ברשיון BSD המקורי (לדוגמה: openssl). זהו רשיון שהוכח כגרוע. וממילא אף אחד לא אוכף את אותו סעיף פרסום.
וכאמור, לדעתי אתה מגזים בחשיבות המגבלות של LGPL.
אבל מה לעשות שהקוד שאני ממש זקוק לו: המימוש היחיד של Markdown בשפת C, וגם מימוש די טוב ומלא שוחרר תחת הרישיון הזה?
בכל אופן, עדיין, יש בעיה של תאימות של רישיונות Permissive למיניהם בינם לבין עצמם.
לגבי המגבלה של LGPL, מסכים, אבל בכל אופן אני לא יכול לקחת סתם ככה קובץ תחת רישיון LGPL ולשלב אותו בקוד BSD ולהגיד הקוד שלי הוא כזה. בכל אופן, כבר שכתבתי והתאמתי את הקוד לצרכים שלי.
הנקודה שלי: יש יותר מידי רישיונות ויותר מידי באלאגן בכל נושא התאימות. זה לא מתפוצץ, כי בסופו של דבר כל מי שמפרסם קוד תחת רישיון חופשי רוצה לתת אותו לשימוש של אחרים. מזל שמתכנתים הם אינם עורכי־דין... אחרת היה לנו כל־כך הרבה כאב ראש שאנחנו חוסכים לעצמנו ע"י התעלמות מבעיות.
לירות לעצמך ברגל... או לא כל הרישיונות שווים
אחד היתרונות הגדולים של תוכנה חופשית היא העובדה שאתה כמעט ולא צריך להמציא גלגל מחדש, תמיד תוכל למצוא ספריית צד ג' שעושה את הדבר.
למשל, אתה רוצה לחשב md5sum? מה בעיה? מוצאים קטע קוד ומכניסים, רוצים ספריה אקזוטית אחרת, מחפשים ומוצאים. בשלב מסוים אתה מגלה, שהקוד שלך, למעשה, מכיל כמה עשרות קטעי קוד צד ג'.
פה מתחילה הבעיה… לכל קטע קוד יש רישיון אקזוטי משלו, למשל, עבור הבלוג הזה והתשתית שלו הייתי צריך להשתמש בקטעי הקוד תחת הרישיונות הבאים:
1. רישיון MIT עבור ספריה קטנה לקריאת קובצי־mo.
2. רישיון zlib עבור ספריה קטנה שמחשבת md5sum.
3. רישיון BSD עבור ספריה שהופכת Markdown ל־HTML.
4. קוד ב־Public Domain לחישוב hash (בקרוב ישולב).
5. קוד תחת רישיון MIT שכמעט הוכנס למערכת (מימוש של rb-tree).
6. קוד תחת LGPL, שמשום מה לא היה חלק מספריה, אלא הופיע ב"דוגמאות".
אני כבר לא מדבר על ספריות שאני עושה איתן link: תחת רישיונות LGPL, boost ועוד רישיון מוזר חופשי אבל לא מוכר במיוחד.
הוסף תגובה:
חובה לאפשר JavaScript כדי להגיב.