המסע שלי ב-GSoC: תרומה לתוספים ל-Chrome

תאריך פרסום: 28 באוקטובר 2025

שמי הארש סינג, ואני סטודנט בשנה האחרונה לתואר ראשון בהנדסה כימית ב-IIT (ISM) Dhanbad.בשנת 2025 השתתפתי בתוכנית Google Summer of Code ‏ (GSOC). בפוסט הזה אני משתף את המסע שלי עד שהתקבלתי ל-GSoC, וכמה מהדברים שלמדתי במהלך ההשתתפות שלי.

לפני GSoC: גילוי פיתוח תוספים

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

התנסיתי בהרבה ממשקי API של תוספים, ואפילו הייתי עד למעבר מ-Manifest V2 ל-V3. הצלחתי לבנות פרויקט קטן באמצעות התוספים, התקבלתי ל-CyberLabs, ואז הייתי עסוק בלימודים ולא פיתחתי תוספים במשך תקופה.

לאחרונה, כשחשבתי להגיש בקשה להשתתפות בתוכנית Google Summer of Code ‏ (GSoC), נתקלתי בפרויקט בנושא ממשקי API של תוספים ל-Chrome. הנוסטלגיה הכתה בי בעוצמה – "איזה כיף יהיה ליצור הפעם API שבעתיד, סטודנט בשנה השנייה ישתמש בו כדי להיכנס ל-CyberLabs? זה יהיה הכי טוב". מכיוון שאני כבר מבין את רוב המונחים שקשורים לתוספים מהעבודה הקודמת שלי, הפרויקט הזה מתאים לי מאוד.

הכנה להגשת בקשה

מתוך אינטואיציה, החלטתי לפנות לאוליבר, מהנדס קשרי מפתחים בצוות התוספים ל-Chrome. שאלתי אותו מה צריך לעשות כדי להתקבל לתוכנית GSoC של Chromium. הוא השיב לי תוך כמה ימים! האימייל שלו היה מעודד מאוד. הוא כתב שהם רק רוצים לראות שאני יכול לחקור את בסיס הקוד ולכתוב קוד C++.

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

My GSoC proposal

השלב הבא היה שליחת ההצעה ל-GSoC. התיאור הראשוני של הפרויקט, SidePanel APIs & DNR APIs, היה רחב מאוד, ולכן לא הייתי בטוח אילו משימות ספציפיות לכלול ברשימה או איך ליצור ציר זמן בהצעה שלי. שלחתי אימייל לאוליבר בנושא הזה, והוא השיב לי שהוא עדכן את תיאור הפרויקט. לשמחתי, הוא הוסיף כמה ממשקי API, כולל sidePanel.getPosition API שכבר עבדתי עליו.

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

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

במסגרת פרויקט התוספים ל-Chromium, הגוף המרכזי הוא WECG (WebExtensions Community Group, קבוצת הקהילה של WebExtensions). שם מתקיים דיון רשמי על עיצובים חדשים של API. במהלך תקופת GSoC, יכול להיות שהמשתתפים יצטרכו להציג את הצעות ה-API שלהם לקבוצה הזו. לכן, אם יש לכם רעיון לעיצוב שמוכן להצעה שלכם ל-GSoC, זה יתרון עצום, כי זה מראה למנטורים שאתם מוכנים לשלב החשוב הזה ושתוכלו להצליח במהלך תקופת GSoC.

בתחילת מאי קיבלתי את האימייל – התקבלתי! 🙂

התוכן שהוספתי במהלך GSoC

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

בהתחלה פתחתי כמה רשימות שינויים. ההתקדמות שלי הואטה בהמשך בגלל תהליך הלוך ושוב של בדיקות קוד, אבל שמחתי להמשיך. התרומות העיקריות שלי למיזוג היו ל-Side Panel API:

השינויים האחרים שלי ברשימת השינויים ב-Commands API עדיין בתהליך (תלוי כמה אהיה פעיל אחרי GSoC 🙂). אפשר לראות פירוט בדוח הסופי שלי, שזמין בקישור 'view code' בדף הפרויקט שלי ב-GSoC.

תודה מיוחדת לאוליבר דאנק (Oliver Dunk), סולומון קינארד (Solomon Kinard), קלווין ג'יאנג (Kelvin Jiang), דבלין קרונין (Devlin Cronin), טום לוקשביץ' (Tom Lukaszewicz) ואנדריאה אורו (Andrea Orru), שבדקו כמעט את כל רשימות השינויים שלי. זה מדהים לראות את הקוד שלי הופך לחלק מ-Chrome. המשוב שקיבלתי מהמנטורים שלי היה שיש לי תחושת אחריות חזקה, וזה היה מחמאה גדולה בשבילי.

סיכום

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

אני מקווה שהסיפור שלי יעזור לאנשים אחרים שרוצים לתרום ל-Chromium או להשתתף בתוכנית Google Summer of Code.

טיפים לאנשים שמגישים מועמדות ל-GSoC

  1. בוחרים רעיון שבאמת אוהבים. האינטרס שלכם צריך להיות בראש סדר העדיפויות. תמיד אפשר לשפר את הכישורים, אבל התשוקה היא מה שתעזור לכם להמשיך כשדברים מסתבכים. הייתי בשני הצדדים, ותאמין לי: כשעובדים על משהו שלא מעניין אותך, מאשימים אחרים כשמשהו משתבש. אבל אם אתם אוהבים את העבודה, תראו בה אתגר שצריך להתמודד איתו.
  2. אל תפחדו מתחרות. ראיתי הרבה אנשים שאיבדו את המוטיבציה אחרי שראו מי עוד הגיש בקשה בערוצי הקהילה. בכל פרויקט טוב תהיה תחרות. התמקדו בחוזקות שלכם. אם עבדתם עם ספרייה כלשהי בעבר, חפשו פרויקט שמשתמש בה. היתרון שלכם הוא שאתם יכולים להביא לשולחן את הניסיון הייחודי שלכם.
  3. הכירו בכך שהיה לכם מזל והתמקדו בתקשורת. אם נהיה כנים, יש גם קצת מזל ב-GSoC. יש פרויקטים פופולריים שמקבלים יותר מ-300 הצעות ל-1-2 מקומות. אני בספק אם המנטורים יכולים לקרוא כל אחת מהן בפירוט. לכן חשוב ליצור קשר מוקדם. כדאי להשתתף בפרויקט מראש, ולוודא שההצעה שלכם מוצקה וממוקדת.
  4. אם לא נבחרתם, זה לא סוף הסיפור. עכשיו יש לכם תרומות חשובות לקוד פתוח בקורות החיים. אפשר להשתמש במידע הזה כדי להגיש מועמדות להזדמנויות אחרות בקיץ. כבר עשית את העבודה הקשה!

ואחרון חביב:

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

תודה שקראתם.