קוד כחול, קוד אדום, קוד פתוח - Open Source

מה זה קוד פתוח, קצת היסטוריה, והקשר לוורדפרס (Wordpress) מג'נטו (Magento) ו Dotnetnuke

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

אם את/ה לקוח/ה של אתרים ת.ר. אתר האינטרנט שלך בנוי על פלטפורמת קוד פתוח  ששמה וורדפרס (WordPress) מג'נטו (Magento) או Dotnetnuke. במאמר הזה אנסה להסביר בקצרה מהו "קוד פתוח", מאיפה הוא בא ומה הוא משרת. אבל קודם – אתייחס למשמעותו הישירה עבורכם, הלקוחות.

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

המצב בו אנו עומדים במבחן הלקוח לאורך זמן מכתיב לנו שני דברים חשובים:

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

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

קריאה בהמשך על ההיסטוריה והפילוסופיה של הקוד הפתוח תבהיר נקודות אלו באופן ברור יותר.

אז מה זה קוד פתוח?

הגדרות

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

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

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

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

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

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

מנגנוני הבקרה והסדרת תהליכי הפיתוח

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

סקירה היסטורית

בעולם המהיר שאנו חיים בו למילה "היסטוריה" יש משמעות מביכה קצת בהקשר של תוכנה. אולם, דווקא לקוד הפתוח יש היסטוריה משמעותית בת יותר מ 40 שנה. בשנות ה 60 של המאה שעברה חברות כמו IBM מכרו בעיקר חומרה בדמות מחשבי MainFrame  שנועדו למשימות בקנה מידה רחב (large scale) כאשר התכנה שנלוותה אליהם נחשבה רק כמוצר משלים והיתה בלתי נפרדת מה"ברזלים" שסופקו ללקוח. החשיבות של התכנה בימים אלו הייתה כה זניחה בעיני היצרנים עד כי הם שיחררו את הקוד יחד עם התכנה שמכרו, ומותר היה לכל אדם לשנות אותו ולעשות בו שימוש כרצונו. מחשבי MainFrame  היו מפלצות שמילאו חדר שלם ומתכנתים ומשתמשים  רבים חלקו את משאביו של כל מחשב כאשר חופש הפעולה שלהם היה נמוך מאוד.  במקביל להתפתחות מחשבי המיין פריים התפתחה קהילת מתכנתים שוקקת שייצרו תכנות מסוגים שונים וחלקו אותן ואת הקוד שלהן ביניהם, ללא תשלום. בתקופה זו ניטעו השורשים של תרבות פיתוח התכנה החפשית במשותף ויחד איתם נקבעו הכללים האתיים התקפים עד היום. המהות הקהילתית, לא מפוקחת לכאורה, הולידה כללים נוקשים שנשמרו ונבחנו בקנאות על ידי חברי הקהילה כך שבמפתיע נוצר קוד התנהגות חמור במיוחד שנאכף במנגנונים דמויי כיכר העיר באתונה. כמובן, שאיש לא התאסף בכיכר העיר וסקל באבנים את מפירי הכללים, אולם קבוצות הדיון (Usenet) המוקדמות, שהתפתחו לאחר מכן לפורומים המוכרים לנו היום, היו במידה רבה תחליף זהה.

בשנות ה 70 מספר המחשבים בעולם גדל ומחירם הוזל ומפתחי התכנה המסחריים כמו IBM החלו לראות את הערך הכלכלי של התכנה עצמה. הם פיתחו בשלב זה את מודל זכויות היוצרים (Intellectual Property) על התכנה שלהם באופן זהה לזה של יצרני המוזיקה, הסרטים והספרים. במקביל התפתח מודל מכירת תכנה תחת רישיונות המגבילים את אופן השימוש, ההפצה והשינוי של התכנה על  ידי רוכשיה. בשנות ה 80 הפכו מודלים אלו לנורמה.

בשנות ה 70 המאוחרות וה 80 המוקדמות שתי קבוצות מפתחים שונות הניחו את היסודות הפורמאליים לפילוסופית הקוד הפתוח. האחת, בראשותו וביזמתו של ריצ'ארד סטולמן, לשעבר מפתח תכנה באונ' MIT  במעבדה למחקר בינה מלאכותית (AI Lab)  והשניה בחוף המערבי של ארה"ב באוניברסיטת ברקלי בקליפורניה (Computer Science Research Group (CSRG) of the University of California at Berkeley)

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

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

מאפיינים אלו היו:

  1. Freedom0 – החופש להשתמש בתכנה לכל מטרה שהיא
  2. Freedom1 – החופש ללמוד איך תכנה עובדת ולהתאימה לצרכיך
  3. Freedom2 – החופש להפיץ את התכנה כרצונך כחלק מהרעיון של שכנות טובה ועזרה הדדית
  4. Freedom3 – החופש לשנות את התכנה, לשפר אותה, ולהפיץ את השינויים שלך לקהילה כך שהקהילה כולה תיהנה ממעשי ידיך

ראו במקור http://www.gnu.org/philosophy/free-sw.html

הגישה ל Source code – קוד התכנה, הסקריפט הניתן לקריאה על ידי כל אדם ומהווה מעין תכנית של התכנה ונבדל מהקוד הנקרא על ידי המחשב בלבד שהוא הפורמאט שבו בדרך כלל מופצת תכנה מסחרית, היא דרישה מקדמית לחופש 1-3. כמו כן מרכיב חשוב במבנה הרשיון לקוד פתוח הוא ההצהרה כי הרישיון אינו ניתן לשינוי בעתיד. הצהרה זו חיונית לויטאליות של פילוסופית הקוד הפתוח ושמירתו ככזה שכן הידיעה כי תוכל תמיד להשתמש בתכנה ללא חשש לשינוי בתנאי הרשיון הנלווים היא מרכיב מרכזי בהפצתה (בעיקר לגורמים עסקיים המקפידים על רישוי נכון מחד ומאידך לא יתקרבו לתכנה שיתכן ובעתיד יהיו ספקות לגבי חוקיות השימוש בה, אחרי שהמערכת שלהם כבר תלויה בה)

מעבר להפצת הפילוסופיה שלו ל"תכנה חופשית" , סטולמן פיתח פרויקט שמטרתו יצירת מערכת הפעלה חופשית לחלוטין שאמורה היתה לחליף את מערכת ההפעלה המסחרית הנפוצה אז UNIX וב 1984 הודיע על התחלת פעילותה של מערכת הפעלה זו וכינה אותה GNU, מעין בדיחה פנימית שמשמעותה "Gnu is Not for Unix"

במקביל, הקבוצה השניה שהזכרתי, באוני' ברקלי, עבדה על פיתוח שיפורים ל Unix והפיצה יישומים רבים הקשורים אליה, שמהר מאוד קיבלו את השם "BSD Unix"  והופצו כמובן באופן חפשי (במגבלה, מאחר ויוניקס עצמה היתה תחת רשיון מסחרי כך שרק בעלי גישה ליוניקס יכלו לעבוד איתה)

שני ראשים אלו של פיתוח תכנה חפשית נתמכו בעיקר על ידי Defense Advanced Research Projects Agency – DARPA  (שאחראית לרבות מהטכנולוגיות שבהן אנו עושים שימוש כעת כולל חלק ניכר ומשמעותי מזו שבה את\ה משתמש\ת כעת לקריאת מאמר זה. לקריאה נוספת ראו http://www.darpa.mil/index.html ולמאמר פופולארי יותר ראו בוויקיפדיה) וכן על ידי רשת צפופה של מפתחי יוניקס מכל העולם שעזרו בשימוש, פיתוח, מציאת באגים והפצה של המערכת.

לשתי הקבוצות היה חסר מרכיב מרכזי במערכת שבלעדיו לא ניתן היה להתקדם לעבר מערכת הפעלה חפשית אמיתית – הגרעין (Kernel) שהוא רכיב תכנה מורכב ויסודי בכל מערכת הפעלה. אולם במהלך שנות ה 80 ותחילת ה 90 קהילת התכנה החפשית המשיכה והתפתחה על ידי קבוצות מבודדות בעולם. אט אט החלה התגבשות של התכנות שפותחו (נזכור כי הכל קורה בסביבה בה הקוד פתוח לכולם ומשופר על ידי כולם) לכדי מערכות יציבות ואף נעשה בהן שימוש על ידי גורמים מסחריים רבים.

ב 1992-1991ביל ג'וליטז ( Bill Jolitz) מקליפורניה פיתח קרנל עבור  BSD Unix ובפינלנד פיתח לינוס טורוולדס Linus Torvalds  גירסא מוקדמת של קרנל שנקרא על ידו Linux ושחרר אותו לציבור תחת רשיון חפשי. Linux אומץ במהרה  על ידי  GNU יחד עם מערכת ממשק משתמש חלונאית חפשית בשם X וכך נולדה מערכת הפעלה חדשה, חפשית לכל ובהתאם לכללי החופש שהגדיר סטולמן. כל מערכות ההפעלה המבוססות כיום על לינוקס מושתתות למעשה על שיתוף פעולה זה.

במשך הזמן התברר כי תכנה חפשית, בשל המספר הרב של המפתחים, המשתמשים ובעיקר הפילוסופיה סביבה, שלפיה יכול כל אחד לשפר את התכנה, למצוא בה באגים וכן הלאה, הופכת להיות הרבה טובה יותר מתכנות מסחריות בתשלום. המשפט האחרון כמובן נתון למחלוקת מרה בעולם, אולם יש לזכור כי נקודת מבט המשתמשים המתוחכמים של תכנות, כמו צוותי ה IT בחברות ענק, חברות בינוניות ובודאי בקהילת המפתחים עצמה שונה לחלוטין מנקודת המבט של משתמש הקצה הרגיל כפי שאנו מכירים מחיי היום יום שלנו. ההעדפות של משתמש קצה יהיו למשל (ובצדק, לדעתי) כי מערכת ההפעלה או התכנה שהוא משתמש בה תהיה ידידותית מאוד ולא יהיה עליו לקרוא ספרות עניפה כדי ללמוד להפעיל אותה, בעוד משתמשים מומחים (Power Users) המנהלים ומפעילים מערכות קריטיות יעדיפו מערכות יציבות שניתן לסמוך עליהן גם אם הפעלתן כרוכה במומחיות גבוהה (שלא להזכיר את נטייתם של מומחים רבים למסך דווקא את פעילותם, ועל תחושת השייכות הנוצרת אצל קבוצות העושות שימוש במשהו שאפשרי "למומחים בלבד").

תוך כדי התהליך, ובעיקר עם התפתחות האינטרנט ותופעת דוט.קום הבחינו מספר מפתחים בכירים ואוונגליסטים (מי שעושה נפשות לתחום מסוים) של התכנה החפשית וביניהם Eric S. Raymond ו Bruce Perens בתופעה מעניינת. מצד אחד, ניתן לרתום את תהליך פיתוח התכנה החפשית לטובת עסקים גדולים, אולם מצד שני עסקים אלו נרתעים משימוש בתכנה שהאוירה סביבה היא של "חופש" היכול להתפרש במובנים שונים ואפילו עד כדי הפקרות (בעיני העסקים הללו, כמובן). ריימונד ופרנס הבינו כי על מנת לקדם את פילוסופית התכנה החפשית חובה לרתום את העסקים הגדולים הללו לעשות שימוש במערכת ההפעלה החדשה ולפיכך יש לשנות את אופן ההצגה של התכנה החפשית לציבור על מנת שתמשיך ותשגשג.

OPEN SOURCE – המונח קוד פתוח הוא התוצאה של החשיבה החדשה שייצגו ריימונד ופרנס. הם יזמו והקימו ארגון חדש שנקרא היזמה לקוד פתוח Open Source Initiative, ששם לו למטרה להסדיר את פיתוח התכנה תחת פילוסופית ה"תכנה החפשית" ובמקביל גם לדאוג לכך שהקהילה העסקית תכיר בחשיבות ותשתמש בתכנות שאינן תחת רשיונות מסחריים. האבחנה בין פילוסופית הקוד הפתוח לזו של התכנה החפשית אינה סמנטית בלבד. התכנה החפשית היא יותר תנועה חברתית,  בעוד שהפילוסופיה של הקוד הפתוח פרגמטית יותר ומתוארת לעתים אפילו כמתודולגית פיתוח.

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

Dotnetnuke

עד שנת 2002 ראתה מיקרוסופט בתנועת התכנה החפשית לא יותר ממטרד  שאין צורך להתייחס אליו ברצינות. אולם בתקופה זו כבר התחילה להתברר עצמתה של הפילוסופיה העומדת ביסודות התנועה ולא ניתן היה להתעלם ממנה. עם הוצאת הגרסא הראשונה של של פלטפורמת .NET של מיקרוסופט והמהלך השיווקי העצום שעמד מאחוריה, ברור היה כי יש לנקוט בפעולה שתפנה לאותו פלח מפתחים שנשבה בקסמה של הפילוסופיה. מיקרוסופט שחררה לשוק תכנה המדגימה את יכולות הפלטפורמה החדשה יחד עם קוד המקור תחת רשיון ליברלי למדי בשם IBuySpy.  (אגב, ב 2003 תחת קוד זה פיתחתי אתר אינטרנט נחמד בשם סופרליסט שאפשר עריכת רשימות קניות ונסקר על ידי YNET  ב 2004).

 בסוף 2002 שון ווקר (Shaun Walker) מייסד Dotnetnuke שחרר לקהילת משתמשי דוטנט גרסא משודרגת של IBuySpy שאומצה מיידית על ידי מפתחים רבים. הגרסא כללה שיפורים רבים וכלים נוספים שהפכו את הקוד ליעיל ופונקציונאלי הרבה יותר. תוך זמן קצר התפתחה קהילה פעילה ושיתופית מאוד סביב המערכת החדשה שסיפקה משוב מצוין ובעיקר השתתפה בפיתוח פעיל של המערכת תחת רשיון הקוד הפתוח. הכינוי Dotnetnuke ניתן למערכת כמחווה טריביאלית לפלטפורמת דוטנט שעליה הושתתה, בתוספת "ניוק" בשל היותה של מילה זו כמעט מילה נרדפת באותה תקופה לקוד פתוח (אני חושב שהמונח ניוק התפתח בהקשר של המשחק הפופולארי אז, שאיתו  ביליתי שעות רבות,  דיוקנוקםDukeNukem שהיה פופולארי עד זרה באותה תקופה וגיבורו היה דמות שוביניסטית ויהירה, ומעל לכל משעשעת).

Dotnetnuke היום, היא פלטפורמה מקובלת בעולם לפיתוח מערכות ניהול תוכן (CMS) באינטרנט ובאינטראנט. לפלטפורמה קהילת מפתחים שוקקת, שאנחנו נמנים עליה, וכוללת מעל 700,000 חברים (בפורום הקהילה) ומאות אלפי אתרים המבוססים על הפלטפורמה.

בגיליון הבא של ה Newsletter יופיע חלק ב' של המאמר, הסוקר את מערכת Dotnetnuke, ומבהיר מדוע בחרנו דווקא בה.

לקריאה נוספת:

פיתוח על גבי פלטפורמה

יכולות המערכת

יהודה

אתרים ת.ר.