2018-09-24

ג'אווה 11 - 9: שאלות ותשובות - שכדאי להכיר

עולם הג'אווה הוא בעיקרון עולם משעמם למדי.

ג'אווה בהחלט הייתה טכנולוגיה חדשנית ומרגשת - אך זה היה לפני כ 20 שנה.
מאז גרסאות של ג'אווה שוחררו בקצב של אחת לכמה שנים, עם חידושים מעטים - יחסית לשפות אחרות: #C המקבילה, רובי, Go, ג'אווהסקריפט כמובן (שלא בטוח שקצב השינויים היה רק לטובה), סקאלה, קוטלין, Clojure, ועוד.
כבר לפני כמה שנים שמעתי על השוואה בין ג'אווה לקובול - שפה שחלשה על חלקים גדולים מהתעשייה, אך עם הזמן הפכה למיושנת להחריד.



החברה שפיתחה את ג'אווה במקור (Sun Microsystems) כשלה עסקית ונרכשה ע"י Oracle בשנת 2010 - שקיבלה את הנכס הנדיר שנקרא ג'אווה, אך נכס שגם דורש השקעה רבה ומחולק בחינם בעולם.

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

כשאנו מדברים על שינוים אנחנו לא מדברים רק על שינוים בשפת ג'אווה עצמה - אלא בעיקר על שינויים בפלטפורמת ה JVM, פלטפורמה שמשרתת את Scala, Closure, קוטלין, Groovy, JRuby, ועוד. חשוב לזכור שה JVM הוא גדול יותר מג'אווה.


ג'אווה גרסה 9 היא נקודת ציון בהיסטורית הגרסאות של ג'אווה - למרות שהיא עצמה חסרת חשיבות לחלוטין. ג'אווה 9 החלה כמה שינויים גדולים המגיעים לידי מימוש בגרסה 11 שיוצאת עכשיו (ספטמבר 2018):
  • Module System - מודולריזציה בתוך ה JDK, ולראשונה הסרה של קוד ישן (בכמויות לא-מבוטלות). המהלך מציע כמה יתרונות טכניים חשובים - אך משמעותו שלראשונה ה JDK הופך ל non-backward-compatible, מה שעשוי לפגוע לאורך שנים בקצב האימוץ של הגרסאות החדשות. הסרת קוד ישן מה JDK מתוכננת להמשיך בגרסאות עתידיות של ג'אווה גם כן.
  • New release cycle - הכולל releases "קטנים" כל חצי שנה, וגרסאות LTS.
  • גביית דמי-שימוש עבור עדכוני באגים ועדכוני-אבטחה - אורקל עושה מהלך משמעותי על מנת לסבסד את תחזוקת ג'אווה ע"י משתמשיה, ואולי אף יוביל לרווחים משמעותיים לאורקל עצמה.
    • יישור קו בין OracleJDK ל OpenJDK - צעד משנה למהלך הנ"ל.

גרסה 9 הציגה לראשונה התחלה של כל השינויים הנ"ל, אך הוכרז מראש שזו גרסה שתתמך לחצי-שנה בלבד, וגרסת היעד לתמיכה ארוכה (LTS, כלומר Long-term support) תהיה גרסה 11.
מאז יצאה גם ג'אווה 10 - גם היא גרסה מינורית ולא כ"כ נוספת, שסיפקה עוד כמה התקדמויות בנושאים הנ"ל (ומספר תוספות קטנות לשפה) - אבל חשיבות הגרסה הייתה בהיותה הכנה גנרלית לשחרור גרסה 11.

גרסה 11 היא זו שתעמת את קהילת ה JVM בפעם הראשונה באמת עם מציאות חדשה, והדילמות שנובעות ממנה. זו גרסת LTS שתתמך עכשיו עד 8 שנים קדימה, גרסת ג'אווה המשמעותית שתהיה זמינה בשנים הקרובות.
  • האם קהילת הג'אווה שהייתה רגילה לג'אווה חינמית תתחיל לשלם ל Oracle עבור עדכונים ותמיכה?
  • האם החלק הארי של הקהילה יישאר על גרסה 8, או שנראה אימוץ משמעותי גם של גרסאות 11 והלאה, כבר בשנים הקרובות?
נותר רק להמתין ולראות כיצד הדברים יתפתחו.



בואו נתחיל לסגור פינות...


אם התיאור הנ"ל משאיר אתכם עם סימני שאלה - זה מובן לחלוטין. אנסה להתחיל ולענות על השאלות העיקריות שצצות מהשינויים הללו.


מה ההבדל בעצם בין OpenJDK ו OracleJDK? ומה השתנה?

החל מגרסה 7 החלה להיות משוחררת ההפצה של OpenJDK, שהיא הפצה תחת רישיון GNU GPL v2 עם החרגה ל linking - רישיון Open Source חופשי, המאפשר שימוש בג'אווה בכדי לכתוב תוכנה מסחרית ולמכור אותה.

היוזמה הייתה עוד של חברת Sun, והגנה על האופי הפתוח של ג'אווה.

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

החל מגרסה 9, הפצות ה OpenJDK וה OracleJDK מתאחדות. זה לא יקרה ע"י הסרה של תוכן מתוך ה OracleJDK אלא בעיקר ע"י פתיחה של התוספות שאורקל סיפקה להיות OpenSource. כמה תכונות עם רישיון מסחרי (כמו ה Java Web Start) אכן יוסרו מה JDK, אבל בעיקר בגלל שהאימוץ שלהן נמוך למדי. התהליך מסתיים עכשיו בשחרור גרסה 11, בו תוכן ההפצות הוא זהה - וההבדל ביניהן הוא רק הרישיון.

למה לי לשלם לאורקל כסף על מה שזמין בחינם וזוכה לתמיכה של הקהילה (כלומר: OpenJDK)?

שאלה מצוינת! ביחד עם ההחלטה ליישר בין ההפצות, יש החלטה יותר משמעותית לצמצם את התמיכה שאורקל סיפקה ל OpenJDK בחינם. כלומר: קיבלנו (אנחנו הקהילה) עוד כמה ספריות וכלים (כגון Flight Recorder ו Mission Control - כלי בעל יכולות לניטור ביצועים על מערכת חיה לאורך), אבל אנחנו מפסיקים לקבל מאורקל תיקוני באגים ותיקוני אבטחה זמן ארוך לאחר שגרסת הג'אווה שוחררה. מעתה - התיקונים שאורקל תספק ל OpenJDK בחינם יהיו רק לפרקי זמן קצרים לאחר שחרור הגרסה.

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


כיצד אורקל עומדת לצמצם את התמיכה שמסופקת ב OpenJDK וכיצד זה קשור למחזור שחרור הגרסאות החדש?

ג'אווה 9 הציגה מחזור חדש של שחרור גרסאות שנראה כך:



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

החל מגרסה 9, אורקל מתחייבת שחרר גרסה פעמיים בשנה, מה שיאפשר לשחרר תוספות לשפה וה JVM בתדירות גבוהה יותר.
הבחירה במספרים שלמים עבור הגרסאות הללו לא מצביע על כמות התוכן שיתווסף, אלא על אופנה של השנים האחרונות ״לרוץ״ עם מספרי גרסאות (למשל: ראקט הייתה בגרסה 0.14 לפני שלוש שנים - אך כיום היא כבר בגרסה 16.5. אנגולר הייתה בגרסה 2.0 ב 2014, אך עוד מעט משתחררת גרסה 7.0).

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



תיקוני באגים ותיקוני אבטחה ישוחררו רק על הגרסה האחרונה (בחינם), או על גרסאות LTS (בתשלום). אם חשוב לנו לקבל עדכונים שוטפים יש לנו שלוש ברירות:
  • לעדכן את גרסת ה JVM/ג'אווה שלנו כל 6 חודשים כמו שעון. כל יום שאנו לא על הגרסה האחרונה הוא יום שבוא יכול להשתחרר עדכון אבטחה קריטי שלא נקבל.
  • להשתמש ב OracleJDK בתשלום ולעבוד על גרסאות LTS על מנת לקבל עדכוני אבטחה שוטפים. התשלום הוא כ $2.5 דולר לחודש ל Desktop/Laptop ו $25 לחודש לכל Core פיסי של שרת [1].
  • לקנות תמיכה מספק צד-שלישי, כגון Azul או RedHat כאשר הם אלו שיספקו תיקונים לבאגים ובעיות אבטחה. כל חברה - עם המדיניות שלה.
    • למשל, ל Azul יש תוכנית בשם Medium Term Support (בקיצור MTS), שבה היא תתמוך לאורך שנתיים וחצי בכל גרסה שניה של ג'אווה שאיננה LTS. יתרון גדול בגישה הזו היא חפיפה בתמיכה בין גרסאות ה MTS - מה שלא קיים בתמיכה ה"חינמית" של אורקל .
    • חשוב לספקי צד-שלישי יספקו גם תמיכה לג'אווה גרסה 8 לעוד כמה שנים - היכן שבכל מקרה רוב התעשייה צפויה להיות בזמן הזה. הנה למשל הצהרה של יבמ.
עוד פרט שכדאי לציין הוא שהרישיון של OracleJDK (לפחות לגרסה 11) מאפשר שימוש ללא הגבלה לצורך פיתוח. התשלום הוא רק עבור שימוש production (שאותו ישלם לקוח המריץ את הקוד On-Premises, או ספק SaaS - עבור המכונות שהוא מריץ).



האם ההצהרה על שחרור גרסת ג'אווה כל 6 חודשים היא לא מטעה? בעצם נראה שגרסאות ה LTS הן אלו שמשנות - והן ימשיכו בקצב אטי יחסית של כל 3 שנים?

באמת היא כנראה איפשהו באמצע. אורקל מצהירה שכל גרסה שתשוחרר תעבור Quality cycle מפרך כמו של גרסה מ'אגורית עד היום. כמו כן יש הצהרה שהיא תשחרר לפחות שני עדכונים (תיקוני באגים ואבטחה) מינוריים - לכל גרסה שתצא. גרסאות שאינן LTS  הן לא גרסאות "בטא" - ע"פ ההצהרה.
סביר להניח ששחרור גרסאות תכוף יאפשר לג'אווה להתפתח מהר יותר - אך במידה. מי שצפוי לעבוד באמת עם גרסאות שאינן LTS הוא רק פלח צר של Early adopters (למשל: סטארטאפ בתחילת דרכו), במיוחד בשנים הראשונות.


האם מה שאורקל עושה הוא "בסדר"? האם זה לא "מחטף מרושע"?

אין לי תשובה ברורה. בד"כ כשארגון רוצה לקבל הכנסות מפרויקט Open Source - הוא מציע ערך נוסף על הקיים בכדי לקבל עליו תשלום: Premium support או יכולות נוספות (למשל: Redis modules).
אורקל בעצם ממשיכה לגבות תשלום על תמיכה, תוך כדי שהיא מפסיקה בפועל את התמיכה-בחינם שהיא סיפקה לאורך שנים רבות. אם היה מדובר בפרויקט קטן - זה אולי לא היה מתקבל בשמחה, אך זה לא היה עושה הרבה רעש. ג'אווה היא אחת מהתשתיות (ביחד עם לינוקס, MySQL ועוד כמה) המשמעותיות ביותר המסופקות בחינם. ההשפעה - היא משמעותית!

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

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

כאב ראש לאנשים רבים בעולם - ככל הנראה ייגרם בכל זאת.



"איך אתה מתכנן להגיב לשינוי בתהליך שחרור הגרסאות של ג'אווה" מתוך סקר של ה JVM Ecosystem





דיברנו על איזו בעיה של תאימות לאחור, במה בדיוק מדובר?


ג'אווה 9 הציגה לראשונה את ה Module System (הידוע לשעבר כ Project Jigsaw או super packages) - כלי מודולריזציה בשפה.

packages, כלי ארגון הקוד עד עכשיו, הוא כלי נחמד - אבל עם מגבלה עיקרית: הוא עוזר לארגן את תוך ה package (למשל: ניתן להגדיר מחלקות כ private ל package) אך הוא לא מתמודד עם ניהול תלויות בין packages.
  • אין לי יכולת אמיתית לחשוף מחלקות מסוימות בצורה סלקטיבית ל packages אחרים - הרזולוציה היא רק private או public.
  • אין ניהול רציני של התלויות בין ה packages. 
    • כל מחלקה יכולה להוסיף כל תלות שהיא רוצה ל package אחר. כלומר: התלויות בין ה packages מגודרות שוב ושוב, ומפוזרות בין ה classes השונים של המחלקה - שזה לא DRY, וקשה מאוד לבקרה.
    • כל מחלקה יכולה להוסיף את עצמה לכל package - כך שאין שליטה ממה מורכב בדיוק ה package. זו בעיה משנית.
ה Module System (בקיצור: MDS) של ג'אווה מאפשר להגדיר קובץ בשם module-info.java המגדיר מודול ואת התלויות שלו. הנה דוגמה לכזו הגדרה:

module monitor.rest {
    requires spark.core;
    requires monitor.statistics;
    exports monitor.rest;
}

הקומפיילר יתייחס להגדרות ויאכוף אותן (יופי!).
חשוב לציין שמילים שמורות חדשות, כמו module ו requires הן בעלות משמעות רק בקובץ ה module-info, ולא ישפיעו על שאר קוד הג'אווה.

קישורים: Java 9 modules cheat sheet, מדריך, ועוד כמה מקורות טובים

ג'אווה השתמשה ב MDS בעצמה עבור ה JDK. במידה מסוימת זה היה סוג של "eat your own dog food", אבל מצד שני - זה היה צורך מרכזי של ה JDK עצמו, שעם השנים התלויות הרבות והמיותרות בו הפכו אותו לקשה מאוד לתחזוקה. באורקל טוענים שזו אחת הסיבות לשחרור הכל-כך איטי של שינויים בג'אווה.

במעבר מ Java 8 ל Java 11, אורקל חילקה את ה JDK לכ 80 מודולים שונים, חלקים יצאו מה JDK ויהיו זמינים כספרייה נפרדת, או שנפרד מהם לגמרי. הנה רשימת היכולות שהוסרו מה JDK:
  • corba - לזקנים ביננו, שזכו להכיר את המפלצת.
  • java.transaction (מדובר בטרנזקציות אפליקטיביות, לא של JDBC. כאלו כמו שהיו ב EJB גרסה 1).
  • java.xml.ws וספריות נוספות של טיפול ב XML (למשל JAXB). בתחילת שנות ה 2000 התייחסו ל XML כ "פורמט שהולך לתאר את כל המידע בעולם". תזכרו את זה כשאתם מתחילים להתלהב מטכנולוגיה חדשה.
  • JavaFX - טכנולוגיית Desktop UI של ג'אווה שלא ממש הצליחה. לג'אווה יש היסטוריה מרשימה ביותר של טכנולוגיות UI כושלות (אפשר לדבר בהזדמנות גם למה...)
    • JavaFX תמשיך להיות זמינה כמודול עצמאי שלא קשור ל JDK.
  • Applets
  • Java WebStart (טכנולוגיה להתקנה ועדכון אוטומטי של אפליקציות ג'אווה)
  • Nashorn שהחליף את Rhino כמפרשן JavaScript שרץ על גבי ג'אווה ומסופק כחלק מה JDK. 
    • נשהורן הוא חדש, אך שפת ג'אווהסקריפט מתפתחת בקצב כ"כ מהיר, שהייתה מספיקה גרסה אחת בכדי להבין שלא ישים לתחזק עוד מפרשן JavaScript כחלק מה JDK.
בנוסף, בג'אווה 9 עד 11 הסירו כמה פונקציות שהיו deprecated לאורך זמן רב. זו הפעם הראשונה בהיסטוריה של ג'אווה שקוד באמת מוסר מה JDK.
אם אתם משתמשים באחת מהטכנולוגיות או ה APIs שהוסרו מה JDK - יהיה עליכם ליבא אותן בצורה מפורשת (למשל: באמצעות מייבן) או למצוא חלופה (למשל ל Applets או Nashron - שלא ייתמכו יותר).

המודולריזציה של ה JDK תסייע גם להלחם בצריכת הזיכרון הגבוהה של ג'אווה, ובגודל ה distributables. ג'אווה עובדת עם Dynamic linking (קישור של קוד בזמן ריצה, ולא בזמן קומפילציה). יש בכך כמה יתרונות (קל מאוד לייצר Plugin architecture, ניתן לבצע אופטימזציות מסוימות) אבל המחיר הוא קבצי jars גדולים מהנדרש (אנו כוללים את כל הקוד בספריה, אפילו אם אנו זקוקים רק ל 5% ממנה) וגם צריכת זיכרון גבוהה יותר.

בעולם ה micro-services וה FaaS (למשל: AWS lambda) - התכונות הללו הן מגבלה רצינית של ג'אווה. למבדה קטנה בג'אווה יכולה בקלות לדרוש jar file של עשרות MB ולצרוך מאות MBs של זיכרון. למבדה דומה ב ++C או Go תדרוש שבריר מהמשאבים של ג'אווה. כנ"ל לגבי ג'אווהסקריפט או פייטון - אבל מסיבות קצת שונות.

ג'אווה 9 הוסיפה כלי בשם jlink המאפשר לבנות אפליקציית ג'אווה עם static linking. השימוש העיקרי הוא FaaS או הפצה של ג'אווה למכשירים עם מגבלות במשאבים. החיסרון של jlink הוא שהתוצר לא ניתן לעדכון ללא החלפה מלאה של התוצר הבינרי. היום ניתן לעדכן גרסאת JRE ולקבל עדכוני אבטחה / באגים קריטיים מבלי לעדכן את קוד האפליקציה. אפליקציה שנבנתה עם jlink תדרוש בנייה מחדש ו deploy מחדש - על מנת להחיל את אותם העדכונים.





הסכנה שבשינוי


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

המעבר בין ג'אווה 8 לג'אווה 11, או בין JDK 8 ל JDK 11 (למי שמשתמש בשפת JVM שאיננה ג'אווה) - עומד להיות עניין גדול יותר.

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

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

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

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


בואו ניזכר שנייה מה קרה בפייטון:

ראשי הקהילה תיארו זאת כך:

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

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

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

וכך - כל העגלה נתקעה. קריאה לקהילה לבצע את המעבר לא נענתה בחיוב, או לפחות לא בקצב מהיר. הוקמו אתרים כמו http://py3readiness.org ו http://python3wos.appspot.com שמדדו ועודדו - את האימוץ של פייטון 3.

פייטון 3 שוחררה ב 2008, אבל לקח בערך עשור עד שרוב הקהילה הצליחה לעשות את המעבר.

-----------------


השינויים הנדרשים במעבר מג'אווה 8 לג'אווה 11 - הם קטנים יותר משמעותית מאלו שהיו בפייטון 3. בעיקר צריך לעדכן תלויות של מודולים ומחלקות, בעוד בפייטון היו נדרשים שינויים בקוד עצמו = הרבה יותר עבודה.
המודעות לסיכונים, כנראה גדולה - הסיפור של פייטון 3 הדהד בכל התעשייה במשך שנים ככישלון צורב.

האם המעבר לג'אווה יהיה מהיר יחסית, או שיגרר לאורך שנים?

נחכה ונראה.

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

קישורים: מדריך לעדכון פרויקט מייבן לג'אווה 11.



שיהיה בהצלחה!



----

[1] החישוב הוא באמת יותר מורכב, ופחות קל להבנה. לארכיטקטורות שונות של חומרה, יש הגדרה שונה למהו "Processor". רישיונות הוא בד"כ נושא סבוך בחברות Enterprise - אז אל תניחו שהסיבוכיות הזו היא "תרגיל" של אורקל.


18 תגובות:

  1. עבור יצירת sdk להטמעה אצל לקוחות באיזו גירסה היית ממליץ להשתמש ?

    השבמחק
    תשובות
    1. אתה מתכוון SDK שאתה מספק ללקוחות על מנת להשתמש ב API שלך?
      נראה שחשוב לספק תמיכה גם בגרסה 8 (לכלל הלקוחות, לכמה השנים הקרובות לכל הפחות), וגם לגרסה 11 (ל early adopters).

      כלומר: לוודא שה SDK שלך עובד על שתי הגרסאות. אני לא חושב שמלבד מקרים מעטים (נניח: תלויות בקוד שהוסר) - לא צריכות להיות 2 הפצות / binaries. קוד שקומפל בגרסה 11 עדיין ירוץ על JVM גרסה 8.

      מחק
  2. מישהו25/9/18 01:43

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

    השבמחק
    תשובות
    1. המממ... שתי הערות:
      * בקנה מידה קורפורטיבי, נראה שאורקל התנהלה בצורה סבירה בעניין הזה. סיבוכיות? - זה DNA ארגוני. אני בטוח שהם עשו מאמץ לפשט את הדברים... לתפיסתם.
      * קוטלין רצה גם היא על ה JVM. עד כמה שנראה שקוטלין היא החלופה הטבעית לג׳אווה (עכשיו יש עוד סיבה: כשהעליה ל Java 11 תיקח זמן) - היא עדיין תלויה ב JVM באותה המידה.

      מחק
  3. אנונימי25/9/18 10:28

    תודה, כיף לקרוא.
    בעיקר מעצבן אותי המרווח הכל כך קטן שאורקל השאירו בין הפסקת התמיכה בגירסה 8 לבין היציאה של גירסה 11. שום ארגון גדול לא יכול לעשות את המעבר בכזה זמן.
    עלתה לי גם שאלה לגבי התמחור של FaaS - מעכשיו כל core בענן של aws ישלם עבור הרצה של java 11? זה יכול ממש לייקר את העלות שימוש בלמבדה.

    השבמחק
    תשובות
    1. >> מעכשיו כל core בענן של aws ישלם עבור הרצה של java 11?

      בעיקרון כן.
      התמחור של אורקל הוא 25$ ל core לחודש, שזה כ 3c לשעה.
      core יחיד מריץ בממוצע אלפי הרצות למבדות בשעה - אני אני לא חושב שהשינוי במחיר יהיה משמעותי בכלל.
      כמו כן $25 הוא מחיר מחירון. ארגונים גדולים יקבלו הנחה, ו AWS הוא ארגון ענק, אולי הגדול ביותר.
      אמזון יפחיתו עלויות. הם יכולים להשתמש בתמיכה של צד-שלישי (כמו Azul) שם מחיר המחירון צפוי להיות זול יותר או אפילו לתמוך בג׳אווה על AWS בעצמם (כמו שיש להם distro של לינוקס).

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

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

      מחק
  4. תודה רבה על המידע
    רק תיקון קטן - השם הוא Nashorn, ולא Nashron

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

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

      מחק
  6. בקטנה-clojure לא closure.
    ופוסט מעולה כרגיל

    השבמחק
  7. הי ליאור,

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

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

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

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

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

    האם לדעתך אני מגזים בפרשנות שלי על המשמעות האפשרית של השינוי? ומה לדעתך יכולה להיות פלטפורמה אלטרנטיבית לJVM?

    השבמחק
    תשובות
    1. היי!

      > אם אני מבין נכון העלות של שרתים מסוימים באמזון תעלה יותר מכפול עבור השימוש בג'אווה.

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


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

      אני חושב שזה עוד מחיר שישפיע על הפלטפורמה ואימוץ ה JVM - בעיקר בקרב סטארט-אפים. כנראה יגדיל מעט את השימוש בפייטון / Go / ג'אווהסקריפט - כפי שציינת. האמת שציפיתי לרעש תקשורתי גדול בהרבה מזה שהיה.
      אני חושב שבתכלס זה לא מחיר כ"כ גבוה (אנחנו עובדים עם קוטלין והאופציה להחליף פלטפורמה בגלל השינוי לא עלתה לרגע בדעתי).

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

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

      אם אפליקציות שולחניות היה ה main business שלי - כנראה השינוי הזה היה מפריע לי יותר, וגורם לי לשאול את עצמי האם אפליקציות שולחניות לא הפכה להיות Second class citizen, הלכה למעשה, בעולם הג'אווה.

      בלוגו של אורקל ג'אווה מציינים 3 מיליארד התקנות של ג'אווה (על גרסותיה השונות) ברחבי העולם.
      אני לא אתפלא אם תוך שנים ספורות המספר הזה ירד ל 2 מיליארד ופחות.

      מחק
  8. פוסט נהדר, כרגיל.
    אפשר הסבר קצת יותר מעמיק למה בלולואה
    array[idx++] += "a"
    יש באג בג'אווה 9?
    שים לב שיש הבדל בין הכותרת לדוגמאת קוד (האחד משתמש במודולו size(

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

    השבמחק