תרבות הקוד הפתוח וגיטהאב 🌱

ניהול גרסאות, פרסום קוד, ושיתוף פתוח

שני קונספטים מקבילים

היום נדבר על שני קונספטים שונים אבל מקבילים בעולם התוכנה: ניהול גרסאות (Version Control) ו-קוד פתוח (Open Source). בסוף נראה איך הם נפגשים בפלטפורמה אחת - GitHub.

קונספט מס׳ 1: Version Control

כל תוכנה, ובעצם כל יצירה, עוברת שלבים בתהליך שלה.

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

הצבת הפרויקט של דור אמיתי - 8 גרסאות שונות של אותו ספר
דור אמיתי, 2017 - 8 גרסאות פיזיות של אותו ספר, כל אחת ״ענף״ נפרד

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

גירסה פיזית של רעיון דיגיטלי

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

למה זה חשוב?

דיאגרמת branches - איך version control עובד
דיאגרמת ענפים: ענף ראשי (main) עם ענפים נפרדים ל-features, fixes ו-bugfixes

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

קונספט מס׳ 2: Open Source

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

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

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

קוד סגור מול קוד פתוח

🔒 קוד סגור (Closed Source)

הקוד נשמר בסוד מסחרי.

אסור להעתיק, אסור להפיץ, אסור לשנות.

זכויות יוצרים + פטנטים מגנים עליו.

🌱 קוד פתוח (Open Source)

הקוד פתוח לכולם, ברישיון.

מותר להשתמש, לשנות ולהפיץ - בתנאים.

הקהילה מתחזקת ומשפרת אותו יחד.

איך הכל התחיל - הסיפור של IBM

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

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

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

האם כל האינטרנט הוא ״קוד פתוח״?

מצד אחד, ראינו כבר שמאוד קל להציג את קוד המקור של אתר כלשהו (View Source) - אבל האם זה אומר שמותר לנו להשתמש בו?

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

☝️ View Source ≠ Open Source. הצגת הקוד היא תכונה טכנית של הדפדפן, לא רשיון שימוש.

רישיונות קוד פתוח

ישנם סוגים שונים של רישיונות בקוד פתוח - כמו MIT, Apache, GPL ועוד. כמעט כולם מבוססים על כמה רעיונות פשוטים:

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

דוגמאות לפרויקטים בקוד פתוח

🐧 Linux

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

📝 WordPress

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

📚 Wikipedia (Wikimedia)

האנציקלופדיה הפתוחה - גם התוכן וגם התוכנה שמפעילה אותה (MediaWiki) הם קוד פתוח.

🔀 Git

תוכנת ניהול הגרסאות שעליה מבוסס GitHub היא בעצמה תוכנת קוד פתוח. נכתבה ע״י לינוס טורבלדס (יוצר לינוקס).

📄 LibreOffice

חבילת תוכנות אופיס פתוחה - מעבד תמלילים, גיליון נתונים ותוכנת מצגות. חלופה חינמית ל-Microsoft Office.

🎨 Processing & p5.js

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

גיטהאב: פלטפורמה לשיתוף קוד פתוח

GitHub הוא אתר שמארח פרויקטים בקוד פתוח, באמצעות תוכנת git שעוקבת אחרי שינויים.

אפשר להיכנס לאתר ולבקר בפרויקטים שונים, ואפילו לראות אותם בשלבי עבודה שונים - כל קומיט שמור, וכל ענף נראה לעין.

☝️ ההבדל בין git ל-GitHub: git היא התוכנה שרצה במחשב שלכם ועוקבת אחרי שינויים. GitHub הוא אתר אינטרנט שמאחסן את המאגרים שלכם בענן ומאפשר שיתוף.

מילון מונחים

המושגים שצריך להכיר כדי להתחיל לעבוד עם GitHub:

מונח הסבר
Repository תיקייה שנמצאת על המחשב שלכם / בגיטהאב / גם וגם - והיא למעשה מכילה את כל הפרויקט.
Commit נקודה בתהליך שאתם רוצים ״לשמור״, בין אם זה כדי לשתף עם העולם או עם קולגות, או אפילו בשביל לסמן את השינוי לעצמכם. יש מתכנתים שעושים קומיט על כל פיפס קטן, ויש כאלה ששוכחים מזה ואז עושים קומיט פעם בכמה ימים.
Branch כל פרויקט מתחיל עם ענף (גזע?) מרכזי אחד - main. אפשר בכל שלב לעשות checkout - שזה אומר לפצל ענף חדש מתוך הענף הנוכחי ולעבוד עליו בנפרד. הענף יכול להיות גירסה של הפרויקט, או משהו אחר לגמרי (למשל אתר שמפרסם את הפרויקט או מדריך למשתמש).
Publish אחרי שפותחים repository במחשב, אפשר ״לפבלש״ אותו בגיטהאב - כלומר להעלות אותו לראשונה לענן.
Push העתקה של הקומיטים שעשיתם במחשב לגיטהאב.
Pull העתקה של הקומיטים שלכם ומיזוג שלהם לענף הראשי. בד״כ לפני זה עושים Pull Request - מין ״מכתב״ שנשלח בתוך גיטהאב לענף הראשי ובו מפורטים השינויים שעשיתם. אם אתם עובדים בצוות, זו הזדמנות שחבר צוות/מנהל יסתכל על השינויים ויוודא שהם בסדר לפני שממזגים.
Fork שכפול של פרויקט קיים ל-repository חדש משלכם. למשל אם ראיתם פרויקט שהייתם רוצים להשתמש בו כנקודת מוצא לפרויקט משלכם, או כדרך להציע שינויים לפרויקט שאינו שלכם.
Fetch משיכת שינויים מענף הפרויקט בגיטהאב למחשב שלכם.
Update from main מיזוג שינויים מהענף הראשי לתוך הענף שלכם, אם אתם עובדים בצוות דרך גיטהאב.

דוגמאות לפרויקטים יפים בגיטהאב

שווה לבקר ולהציץ איך נראה פרויקט קוד פתוח בעולם האמיתי:

✏️ תרגיל: היכרות עם GitHub Pages

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

שלב א׳: הכנה - חשבון וכלים

1. פתיחת חשבון GitHub

היכנסו ל-github.com/signup ופתחו חשבון חדש.
בחרו שם משתמש שתשמחו לחיות איתו - הוא יופיע בכל כתובת של פרויקט שתעלו (למשל github.com/your-name/your-project).

2. התקנת GitHub Desktop

הורידו והתקינו את GitHub Desktop - אפליקציה גרפית שעוטפת את git ועושה את העבודה הרבה יותר נוחה.
בפעם הראשונה - התחברו עם החשבון שפתחתם בשלב 1.

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

שלב ב׳: תרגול על דף ״Hello World״

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

3. יצירת Repository ראשון לתרגול

ב-GitHub Desktop, בחרו File → New Repository.
תנו לפרויקט שם כמו hello-github, ובחרו תיקייה במחשב שתשמש כ-repository.

בתיקייה החדשה, צרו קובץ index.html פשוט עם תוכן כמו:

<!DOCTYPE html>
<html lang="he">
<head><meta charset="UTF-8"><title>Hello GitHub</title></head>
<body>
  <h1>שלום, גיטהאב!</h1>
  <p>זה האתר הראשון שלי באינטרנט.</p>
</body>
</html>

חזרו ל-GitHub Desktop - תראו שהשינוי מופיע. כתבו תיאור קצר ב- Summary (למשל ״קומיט ראשון״) ולחצו Commit to main.

4. Publish ל-GitHub

בראש החלון תראו כפתור Publish repository. לחצו עליו.
בחלון שנפתח - בטלו את הסימון של ״Keep this code private״ כדי שהפרויקט יהיה ציבורי (כי אנחנו רוצים להפעיל GitHub Pages חינם).

אחרי כמה שניות הפרויקט יהיה זמין בכתובת:
github.com/[שם-המשתמש-שלכם]/hello-github

5. הפעלת GitHub Pages

היכנסו לדף הפרויקט באתר GitHub → לשונית Settings → תפריט שמאלי Pages.

תחת Source בחרו Deploy from a branch, ותחת Branch בחרו main ולחצו Save.

אחרי דקה-שתיים, הדף שלכם יהיה חי בכתובת:
https://[שם-המשתמש].github.io/hello-github/

🎉 זהו - יש לכם דף חי באינטרנט! נסו לעשות שינוי קטן ב-index.html, לעשות Commit ואז Push - ותראו שהאתר מתעדכן אוטומטית.

🔥 התרגיל המסכם: העלאת הפרויקט האישי

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

חזרו על השלבים 3-5, אבל הפעם:

💡 טיפ: אם אתם רוצים שהאתר יהיה זמין ישירות בכתובת [שם-המשתמש].github.io (בלי שם פרויקט בסוף) - קראו ל-repository בדיוק [שם-המשתמש].github.io. זה ה״אתר אישי״ של חשבון הגיטהאב שלכם.

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

קישורים וכלים

כלי GitHub מומלצים:


בפרקים הקודמים: