node.js כן או לא ?

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

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

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

אבל יש לי עם זה בעיה, שגורמת לי לחשוב ולרעוד מפחד, כל פעם שאני מסתכל לכיון node.js.
גוגל החליטה לפני שנה לעשות fork לwebkit שהוא עצמו fork של khtml, וקראה לפרויקט שלה blink.
היא עשתה זאת, מבחירה מסחרית גרידא ("אנחנו בידלנו את עצמנו בצורת פרוססים וטרדים שלנו, ולכן עשינו fork").

אמנם node.js לא משתמש ב webkit או ב blink, אבל הוא יוצר לי בעיות קשות:

  1. האם v8 ישאר גם מחר ?
  2. האם יהיה fork ?
  3. האם הוא ימשיך להיתמך ?
  4. האם הכיון שלו כיום ישאר, או אולי ישוכתב/ישתנה לגמרי בגרסאות חדשות יותר ?

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

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

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

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

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

15 מחשבות על “node.js כן או לא ?

  1. עודד

    אני לא רואה פה בעיה. v8 הוא פרוייקט קוד פתוח, ואם גוגל יזנחו אותו, אז יהיו מספיק מפתחים שמשיכו לתחזק אותו – או שלא, זה לא משנה: אחד היתרונות של node הוא שהוא מבוסס על שפת תכנות סטנדרטית עם הרבה ישומים איכותיים בקוד פתוח. אם v8 יפסיק להיות רלוונטי, אז המפתחים יכולים, בקלות יחסית, להחליף אותו ב-spider monkey או Rhino או Tamarin או Narcisus או מנוע Javascript אחר שמוזילה יחליטו לפתח.

    1. ik_5 מאת

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

      1. עודד

        אני לא באמת רואה מה ההבדל במקרה הזה בין v8 לבין ּRhino\SpiderMonkey – אף אחד לא נותן את המילה שלו לאף אחד אחר – המפתחים עובדים על הפרוייקטים שלהם:
        1) כדי שיתנו ערך למוצר העיקרי (בין עם זה Chrome או Firefox)
        2) בתקוה שזה יהיה שימושי גם למישהו אחר (ואז אולי יהיה שיתוף פעולה)

        הנקודה הראשונה היא החשובה, והשניה זה רק Wishful thinking. כש-Adobe תרמו את Tamarin למוזילה, אף אחד לא חשב ש-Adobe מתחייבים לכך שהם עכשיו יפתחו מנועי Javascript ל-Firefox – הם זרקו עליהם קוד בתקווה שיהיה שימושי, ואולי יהיו לו עדכונים בעתיד. מוזילה לקחו את זה ורצו עם זה.

        Node אותו הדבר – כל עוד הם ממשיכים לקבל עדכונים ל-v8 ממעלה הזרם, שהם עדכונים שטובים להם ולא שוברים שום דבר (וכאן סט בדיקות אוטומטיות זה אחד הדברים החשובים ביותר, וקהילה שמריצה גרסאות בטא גם חושב, אם כי קצת פחות), אז הם ימשיכו להנות מתוכנה טובה בחינם. ברגע שזה לא יהיה המצב, הם ימשיכו לרוץ עם הגרסה האחרונה שעבדה, ויפתחו אותה לבד (או שלא, כפי שציינתי למעלה). זה לא שדברים כאלה לא קרו בעבר – ראה למשל את 5000 הפיצולים של webkit (ש-Blink הוא רק אחד מהם – לדוגמה גם ב-GTK וגם ב-QT יש פיצולים שמתוחזקים בנפרד).

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

        1. ik_5 מאת

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

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

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

          זה מה שהביא אותי לחששות האלו.

          1. עודד

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

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

    1. ik_5 מאת

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

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

      1. עודד

        אגב, מה עם PHP? גם אותו הדבר – המנוע שלהם מפותח על ידי חברה מסחרית (Zend) שתורמת את המנוע לקהילה, עד שיום אחד היא תחליט להפסיק, או לעשות שינויים מהותיים במערכת, שישברו את כל מה שהקהילה בנתה.

        ומה עם Rails? היא מבוססת על Ruby, שהמנוע שלה לא רק שהשתנה דרסטית כבר פעם אחת (MRI הוחלף ב-YARV ששבר הרבה דברים) אלא שמדברים על להחליף את זה שוב פעם.

        ומה עם כל מערכות ה-MVC שמבוססות על Java? פה זה כבר ממש בעיה – Java נשלטת על ידי תאגיד ענק דורסני, שנוהג לתבוע ישומים מתחרים של השפה (ראה אורקל נגד גוגל).

        1. ik_5 מאת

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

          1. ik_5 מאת

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

          2. צפריר כהן

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

          3. ik_5 מאת

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

  2. פינגבק: מזלגות נעוצים | לראות שונה

כתיבת תגובה

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

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s