הבלוג של ארתיום
בלוג על לינוקס, תוכנה חופשית, מוזיקה, סלסה, ומה לא!
לירות לעצמך ברגל... או לא כל הרישיונות שווים
אחד היתרונות הגדולים של תוכנה חופשית היא העובדה שאתה כמעט ולא צריך להמציא גלגל מחדש, תמיד תוכל למצוא ספריית צד ג' שעושה את הדבר.
למשל, אתה רוצה לחשב md5sum? מה בעיה? מוצאים קטע קוד ומכניסים, רוצים ספריה אקזוטית אחרת, מחפשים ומוצאים. בשלב מסוים אתה מגלה, שהקוד שלך, למעשה, מכיל כמה עשרות קטעי קוד צד ג'.
פה מתחילה הבעיה... לכל קטע קוד יש רישיון אקזוטי משלו, למשל, עבור הבלוג הזה והתשתית שלו הייתי צריך להשתמש בקטעי הקוד תחת הרישיונות הבאים:
- רישיון MIT עבור ספריה קטנה לקריאת קובצי־mo.
- רישיון zlib עבור ספריה קטנה שמחשבת md5sum.
- רישיון BSD עבור ספריה שהופכת Markdown ל־HTML.
- קוד ב־Public Domain לחישוב hash (בקרוב ישולב).
- קוד תחת רישיון MIT שכמעט הוכנס למערכת (מימוש של rb-tree).
- קוד תחת LGPL, שמשום מה לא היה חלק מספריה, אלא הופיע ב"דוגמאות".
אני כבר לא מדבר על ספריות שאני עושה איתן link: תחת רישיונות LGPL, boost ועוד רישיון מוזר חופשי אבל לא מוכר במיוחד.
הכל טוב ויפה? כל הרישיונות מאפשרים לשלב את הקוד בכל מיני פרויקטים שונים, כולל סגורים. כך שהכל נראה ורוד ביותר. עכשיו נראה שלא כל־כך.
המשך...BSD או LGPL?
עם התקדמות הפרויקט שלי אני מתחיל להתלבט: האם בחירת רישיון BSD הייתה נכונה.
מה אני רוצה:
- שרישיון לא ימנע מפרויקטים לקחת את התשתית ולהשתמש בה, אפילו לצורך שימוש מסחרי.
- אני כן רוצה לאפשר static linking בגלל שזה פשוט מקל על תהליך deploy בצורה משמעותית.
- אני לא רוצה לתת את הספרייה לכל אחד לעשות את מה שחפץ לו: קרי לשנות אותה לפתח על בסיסה משהו אחר ולא לפתוח את הקוד.
מצד אחד, LGPL הוא טוב למטרה ראשונה והאחרונה, אבל עם השנייה יש בעיה: הוא לא מאפשר לבצע static link עם תוכנה בעלת רישיון אחר (אפילו מסחרי). וזה מאוד חשוב, כי קשה לעשות deploy לשרת מרוחק אם יש הרבה תלויות. (אפילו אני כשעושה deploy לשרת וירטואלי מקמפל עם גרסה סטטית של התשתית).
מצד, שני, רישיון BSD לא מסוגל לתת לי את מה שאני רוצה מבחינת הגנה על חופשיות הקוד. אבל במחשבה אחרת, האם זה מפריע לעשרות פרויקטים מוצלחים להישאר פתוחים כמו sqlilte, lighttpd ואחרים? האם אני באמת זקוק להגנה ש־LGPL נותן לי?
מה לעשות?.. שאלה קשה. עדיין לא החלטתי, אבל בינתיים אני נוטה להחליף רישיון ה־BSD ב־LGPL.
בכל אופן, אני לא רוצה רישיון בסגנון GPL או אחר בעל מגבלות דומות.
אז מה עדיף רישיון copyleft או non-copyleft?
בשימושים שלי אני די מעדיף להשתמש ברישיון שהוא non-copyleft כי אני יכול לקחת את הקוד כפישהו, לשנות ולשלב בתוכנה בלי ליצור ספריות נפרדות אלא ע"י static link למספר קובצי C (כמובן כשאני רוצה להכניס שינויים). אני לא יכול עשות את זה בצורה טריביאלית במקרה של LGPL. וזה תמיד מרתיע אותי ברישיונות כאלה. אני אפילו צריך לשכתב קטע קוד קטן ש"השאלתי" מ־contrib של CgiCC, בגלל שהוא LGPL ואז תוכנה שלא לא תהיה תואמת BSD.
מצד, שני, מי שיכול לקחת את הקוד הוא לאו דווקא אדם שישחרר את הקוד אחר כך, וזה כבר פחות מוצא חן בעיניי.
שאלה קשה... דעתכם?
רגע האמת... האם C++ באמת נתן יתרון בתחום Web?
אחרי כמעט חצי שנה של פיתוח תשתית C++ לפיתוח מערכות התוכן, אני מתקדם לגרסת בטא הראשונה. למעשה כל הרכיבים שתכננתי עבורה מוכנים והדבר היחיד שעוצר אותי בפני הכרזה על גרסת הבטא הראשונה זה חוסר תיעוד שעדיין אני צריך להכין.
המטרה של הפרויקט הייתה ליצור תשתית לפיתוח יעיל ומהיר ל־Web ב־C++ -- שפה שלא נפוצה בתחום זה, על מנת לקבל ביצועים יוצאים מן הכלל. בדרך גם למדתי הרבה על תשתיות דומות אחרות ועכשיו הכנתי השוואה ביצועים בין שתי מערכות:
- מערכת בלוגים פופולרית WordPress בעברית
- הבלוג שכתוב על בסיס CppCMS -- למעשה הבלוג הזה.
WordPress נבחרה בגלל ההכרות המצוינת שלי אתה ויכול להוציא ממנה את מירב הביצועים האפשריים שניתן לקבל בעזרת שפות תכנות דינמיות טיפוסיות כמו PHP.
המערכות הוגדרו ככה:
- שרת אינטרנט lighttpd 1.4.13
- ממשק שרת FastCGI
- PHP גרסה 5.2.
- Opcode Cache של PHP נעשה ע"י XCache 1.2.1
- בסיס הנתונים MySQL 5.0.
- תוסף caching עבור WordPress: WP-Cache-2 עם הטלאי שלי שמשפר את הביצועים שלו בעוד כ־60%.
- מערכת CppCMS עם ניהול ה־cache בזיכרון.
- חומרה: AMD Athlon XP 3000+ 64bit, 1G RAM
- מערכת הפעלה: Debian Etch 64 bit.
טלאי ל־WP-Cache-2
בקרוב אני הולך לבצע סדרה כבדה של השוואות ביצועים בין WordPress -- המערכת שאני מכיר אותה טוב על כל בעיותיה מול המערכת שבניתי על בסיס CppCMS.
מערכת ה־cache שפיתחתי עבור CppCMS היא די חכמה, היא שומרת כל דף בשני עותקים: אחד HTML המקורי והשני אותו דף דחוס עם gzip. זה מאפשר לשלוף דפים בצורה מאוד מהירה ולהעביר אותן לשרת בלי לבצע דחיסה מחדש.
מאחר ואני רוצה לבצע השוואה הוגנת, בדקתי את התוסף WP-Cache-2 שמאיץ את WordPress בצורה משמעותית וגילית שהוא שומר את הדפים רק כ־HTML ולכן, בכל פעם כשהדף נשלף מזיכרון מטמון הוא עדיין עובר דחיסה ע"י PHP או Apache. וזה גוזל הרבה משאבים.
כתבתי טלאי עבור התוסף ששומר כל דף בשני עותקים: מקורי ודחוס ומחזיר את הסוג הנדרש לפי בקשת הלקוח. הטלאי שיפר את הביצועים בכ־60%: עם התוסף המקורי WP היה מסוגל לספק כ־450 שאילתות בשנייה, אחרי הטלאי המספר הזה עלה לכ־720.
נ.ב.: בדיקות ביצועים של CppCMS יבואו בקרוב.
טיפים לבעלי "אתרים ביתיים"
החזקת אתר אינטרנט בבית מאוד נוחה: היא פותחת מגוון רחב של אפשרויות, גישות לכל טכנולוגיות אפשריות ללא מגבלות הספק וכל זה במחיר מאוד נמוך. אבל, גם לפתרון הזה יש חסרון משמעותי --- רוחב הפס.
רבים, שמעלים אתר אינטרנט בבית ואפילו מחזיקים אותו הרבה שנים כמו שלומי ישראל, לא מועדים בעיה העיקרית: אטיות של אתרים כאלה. העניין הוא שהבעיות האלו ניתנות לפתרון יחסית בקלות. ובכן נתחיל.
המשך...