Java (פלטפורמת תוכנה)

פלטפורמת התוכנה ג'אווה (באנגלית: Java software platform) היא מכלול מוצרי תוכנה ומפרטים של חברת סאן מיקרוסיסטמס (כיום חברת בת של חברת אורקל), אשר ביחד מרכיבים מערכת לפיתוח יישומים ולפריסתם על גבי פלטפורמות שונות (cross-platform). ג'אווה נמצאת בשימוש במגוון רחב של פלטפורמות מחשוב, החל במערכות משובצות מחשב וטלפונים סלולריים וכלה בשרתים ומחשבי-על. כתיבה בשפת התכנות Java היא הדרך העיקרית ליצירת קוד שיעבור הידור ל-Java bytecode, שפת ביניים הניתנת להרצה על גבי כל פלטפורמה שקיים עבורה מימוש של המכונה הווירטואלית של ג'אווה - JVM. קיימים גם מהדרי bytecode עבור שפות אחרות, כגון Ada, JavaScript, Python ו-Ruby. כמו כן פותחו גם כמה שפות חדשות המיועדות לרוץ על גבי ה-Java Virtual Machine, כגון: Scala, Clojure ו-Groovy. התחביר של שפת Java הושפע רבות מהשפות C ו-++C, אבל עקרונות התכנות מונחה-עצמים ב-Java מבוססים על השפות Smalltalk ו-Objective-C. בג'אווה לא נעשה שימוש במבנים ברמה הנמוכה (low-level) כגון מצביעים, ויש לה מודל זיכרון פשוט מאוד שבו כל אובייקט מוקצה על גבי ה-Heap, וכל המשתנים של טיפוסים מורכבים הם references. ניהול הזיכרון מבוצע באמצעות איסוף זבל אוטומטי על ידי ה-JVM. בשנת 2006 הפכה סאן מיקרוסיסטמס את מרבית המימוש של ג'אווה לזמין תחת הרישיון הציבורי הכללי של גנו, אם כי ישנם עדיין חלקים המופצים כקבצים בינאריים שהודרו מראש בעקבות בעיות זכויות יוצרים. הפלטפורמה של ג'אווה אינה ספציפית לסוג מעבד או מערכת הפעלה מסוימים. הפלטפורמה מורכבת ממנוע להרצת תוכניות (אשר נקרא מכונה וירטואלית), מהדר, וקבוצה של ספריות תוכנה הממומשות עבור מגוון סוגי חומרה ומערכות הפעלה שונות, כך שתוכניות ג'אווה תוכלנה לרוץ באופן זהה בכל סביבה (ראו: תוכנה חוצת פלטפורמות). הפלטפורמה מורכבת מכמה תוכנות, שכל אחת מהן מספקת חלק מהיכולות הכוללות של הפלטפורמה. לדוגמה, המהדר של ג'אווה, אשר ממיר קוד מקור של ג'אווה ל-Java bytecode (שפת ביניים עבור המכונה הווירטואלית של ג'אווה - JVM), מסופק כחלק מה-Java Development Kit. סביבת ההרצה של ג'אווה (Java Runtime Environment) משלימה את ה-JVM עם מהדר ה-just-in-time שממיר בזמן ריצה (on the fly) את קוד הביניים bytecode לשפת מכונה (native code). כמו כן מסופקות ספריות נרחבות שמכילות רכיבים נוספים, חלקם זמינים רק עבור מהדורות מסוימות. הרכיבים החיוניים בפלטפורמה הם: המהדר לשפת Java, הספריות, וסביבת ההרצה (JRE) שבה קוד הביניים Java bytecod "רץ" בהתאם לכללים המוכתבים על ידי המפרט של המכונה הווירטואלית. נכון לחודש ספטמבר 2020, הגרסה העדכנית של פלטפורמת ג'אווה היא 15.0.0 או 15 (שני המספרים מציינים את אותה הגרסה). גרסה 15 היא גרסת המוצר ו-15.0.0 היא גרסת הפיתוח. ערך מורחב – Java Virtual Machine לבהּ של הפלטפורמה של ג'אווה היא "מכונה וירטואלית" אשר מריצה תוכניות Java bytecode. ה-bytecode זהה לכל סוגי החומרה ומערכות ההפעלה שהוא רץ תחתן. במכונה הווירטואלית של ג'אווה (JVM) ישנו מהדר (JIT (just-in-time אשר מתרגם בזמן ריצה את ה-Java bytecode להוראות מעבד בשפת מכונה (native code), ושומר את ה-native code בזיכרון המטמון (cache) למשך זמן הריצה של התוכנית. השימוש ב-bytecode כשפת ביניים מאפשר לתוכניות לרוץ על גבי כל פלטפורמה שקיים עבורה מימוש של המכונה הווירטואלית. בזכות השימוש במהדר JIT, לאחר עיכוב קצר לצורך טעינה של התוכניות, וכשהן "מתחממות" לאחר שכל הקוד שלהן או רובו עבר הידור JIT, תוכניות Java נוטות לרוץ בערך באותה המהירות כמו תוכניות native שעברו הידור מקדים לשפת מכונה. מאז גרסה 1.2 של ה-JRE, מימוש ה-JVM של סאן כולל מהדר just-in-time במקום מפרש. הקוד של ה-JVM שמריצה את התוכניות הללו תלוי בפלטפורמה - קיים מימוש שונה של ה-JVM עבור כל מערכת הפעלה שתומכת בג'אווה. מרבית מערכות ההפעלה המודרניות מספקות גופי קוד גדולים הניתנים לשימוש חוזר, על מנת להקל על עבודת המתכנת. בדרך כלל הקוד הזה מסופק בצורה של ספריות הניתנות לטעינה דינאמית, שיישומים יכולים לקרוא להן בזמן ריצה. כיוון שהפלטפורמה של ג'אווה אינה תלויה במערכת הפעלה מסוימת, יישומי ג'אווה אינם יכולים להסתמך על שום ספרייה של מערכת ההפעלה שנכתבה מראש. במקום זאת, הפלטפורמה של ג'אווה מספקת קבוצה מקיפה של ספריות סטנדרטיות משלה, שנקראות class libraries, אשר מכילות את רוב הפונקציות הניתנות לשימוש חוזר, שבדרך כלל ניתן למצוא במערכות הפעלה מודרניות. מרבית הספריות של ג'אווה ממומשות בשפת ג'אווה גם כן. לדוגמה, הספרייה Swing מציירת את ממשק המשתמש ומטפלת באירועים בעצמה, ובכך מבטלת הרבה מההבדלים הקטנים הקיימים בדרך שבה פלטפורמות שונות מטפלות אפילו ברכיבים דומים. ה-class libraries משרתות שלוש מטרות בפלטפורמה של ג'אווה. הראשונה, כמו במקרה של ספריות קוד סטנדרטיות אחרות - הספריות של ג'אווה מספקות למתכנת קבוצת פונקציות מוכרות היטב, לצורך ביצוע של משימות נפוצות, כגון תחזוקה של רשימות פריטים או ביצוע ניתוח מחרוזות (parsing) מורכב. המטרה השנייה של ספריות ג'אווה היא לספק ממשק אבסטרקטי עבור משימות שבדרך כלל תלויות מאוד בחומרה ובמערכת ההפעלה. משימות כגון גישה לרשת וגישה לקבצים בדרך כלל "מסובכות" עם המימושים הייחודיים של כל פלטפורמה. הספריות java.net ו-java.io מממשות שכבת אבסטרקציה בקוד native למערכת ההפעלה, ולאחר מכן מספקות ממשק סטנדרטי עבור יישומי ג'אווה, לצורך ביצוען של המשימות הללו. ולבסוף, כאשר פלטפורמת בסיס מסוימת אינה תומכת בכל התכונות שיישום ג'אווה מצפה להן, הספריות של ג'אווה פועלות כדי לכסות בצורה אלגנטית על הרכיבים החסרים, באמצעות אמולציה על מנת לספק תחליף, או לפחות על ידי מתן דרך עקבית לבדוק האם תכונה מסוימת קיימת או לא. מהדורה (edition) של Java platform היא חבילת תוכנות מקושרות של סאן, המאפשרות פיתוח והרצה של תוכניות שנכתבות בשפת התכנות Java. (Java SE (Standard Edition - מיועדת לשימוש כללי על גבי מחשבים אישיים, שרתים ומכשירים דומים. (Java EE (Enterprise Edition - מורכבת מ-Java SE בצירוף ממשקי תכנות יישומים השימושיים לפיתוח תוכנות enterprise בארכיטקטורת שרת-לקוח רב-שכבתית. (Java ME (Micro Edition - מפרט של כמה קבוצות שונות של ספריות (נקראות profiles), עבור מכשירים בעלי שטח אחסון, תצוגה וכוח מוגבלים. משמשת בעיקר לפיתוח יישומים למכשירים ניידים, מחשבי כף יד, ממירי טלוויזיה דיגיטליים ומדפסות. Java Card - טכנולוגיה המאפשרת לתוכניות קטנות מבוססות ג'אווה (applets) לרוץ בצורה בטוחה על גבי כרטיסים חכמים ומכשירים דומים בעלי זיכרון מצומצם. המילה Java לבדה בדרך כלל מתייחסת לשפת התכנות Java אשר תוכננה לשימוש עם הפלטפורמה של Java. בדרך כלל שפות תכנות אינן נכללות בתחום המושג "פלטפורמה", אבל שפת התכנות Java נחשבת לאחד מרכיבי הליבה בפלטפורמת Java. לפיכך, השפה וסביבת ההרצה (runtime) בדרך כלל נחשבות ליחידה אחת. עם זאת, קיימים גם מהדרים ומפרשים עבור ה-JVM, אשר פותחו על ידי חברות צד שלישי. חלקם מיועדים עבור שפות קיימות, בעוד שאחרים הם עבור הרחבות לשפת Java. בהם נכללים: Scala Groovy Clojure Jython – מפרש לשפת Python אשר כולל את jythonc, מהדר bytecode מ-Python ל-Java. JRuby – מפרש לשפת Ruby BeanShell – שפת סקריפטים קלה לג'אווה. Rhino – מפרש לשפת JavaScript ערכת הפיתוח של ג'אווה (JDK) (אנ') היא מוצר של סאן המיועד עבור מפתחי ג'אווה. מאז הופעתה של ג'אווה, ה-JDK הייתה ערכת פיתוח התוכנה (Software Development Kit, SDK) הנפוצה ביותר עבור ג'אווה. ה-JDK כוללת מהדר לשפת Java, עותק מלא של סביבת ההרצה של ג'אווה (JRE), והרבה כלי פיתוח חשובים נוספים. הפלטפורמה של ג'אווה ושפת ג'אווה החלו את דרכן כמיזם פנימי בחברת סאן מיקרוסיסטמס בדצמבר 1990, במטרה ליצור אלטרנטיבה לשפות התכנות C ו-++C. המהנדס פטריק נוטון היה מתוסכל ממצבם של ממשקי תכנות היישומים של סאן בשפות C ו-++C. בזמן ששקל לעזוב לחברת NeXT, נוטון קיבל הזדמנות לעבוד על יצירת טכנולוגיה חדשה, וכך החל ה"פרויקט החשאי" (Stealth Project). זמן קצר לאחר מכן, שמו של "הפרויקט החשאי" שונה ל"הפרויקט הירוק" (Green Project), עם ג'יימס גוסלינג ומייק שרידן שהצטרפו אל נוטון. ביחד עם מהנדסים נוספים, הם החלו את עבודתם בעיר מנלו פארק שבקליפורניה. הם ניסו לפתח טכנולוגיה חדשה לתכנות הדור הבא של מכשירים חכמים (smart appliances), שסאן ציפתה שיפתחו עבורה הזדמנויות חדשות. בהתחלה, הצוות שקל להשתמש ב-++C, אבל הרעיון נדחה ממספר סיבות. כיוון שהם פיתחו מערכות משובצות מחשב בעלות משאבים מצומצמים, הם החליטו ש-++C תדרוש יותר מדי זיכרון ושהמורכבות שלה תוביל לשגיאות פיתוח. מכיוון שב-++C אין איסוף זבל, על המתכנת לדאוג לנהל את זיכרון המערכת בעצמו, וזוהי משימה לא פשוטה שלעיתים קרובות גוררת שגיאות. לצוות הפיתוח הפריע גם שב-++C חסרות יכולות כגון אלמנטים ניידים (portable facilities) לצורכי אבטחה, תכנות מבוזר ושימוש בתהליכונים. ולבסוף, הם רצו פלטפורמה שניתן יהיה להעביר אותה בין כל סוגי המכשירים. ביל ג'וי חזה שֹפה חדשה המשלבת בין השפות Mesa ו-C. במאמר תחת הכותרת Further ("הלאה"), הוא הציע לסאן שהמהנדסים שלה יפתחו סביבה מונחית-עצמים המבוססת על ++C. בהתחלה גוסלינג ניסה לשנות ולהרחיב את ++C (מה שהוא קרא לו "-- ++ ++C"), אבל עד מהרה זנח את הרעיון לטובת יצירת שפה חדשה, שהוא קרא לה Oak (עץ אלון), על שם העץ שעמד מחוץ למשרד שלו. בקיץ של שנת 1992, המפתחים כבר יכלו להציג חלקים מהפלטפורמה החדשה, שכללה את מערכת ההפעלה Green, שפת Oak, ספריות תוכנה וחומרה. הניסיון הראשון שלהם, שהוצג ב-3 בספטמבר 1992, התמקד בבניית מחשב כף יד (PDA) שנקרא Star7, שכלל ממשק משתמש גרפי וסוכן חכם בשם Duke שתפקידו לסייע למשתמש. בחודש נובמבר של אותה שנה, Green Project התפצל מסאן מיקרוסיסטמס והפך לחברת בת שלה בשם firstperson. בשלב זה הצוות עבר לפאלו אלטו, קליפורניה. הצוות של firstperson שאף לבנות מכשירים אינטראקטיביים מאוד, וכאשר חברת טיים וורנר פרסמה מכרז לקבלת הצעה עבור ממיר טלוויזיה דיגיטלי (set-top box), חברת firstperson שינתה את המטרה שלה והגיבה עם הצעה עבור פלטפורמה לממיר דיגיטלי. עם זאת, תעשיית הכבלים הרגישה שהפלטפורמה של firstperson נתנה יותר מדי שליטה למשתמש, ו-firstperson הפסידו במכרז לטובת חברת Silicon Graphics. עסקה נוספת עם חברת 3DO עבור ממירים דיגיטליים נכשלה אף היא. לאחר שלא הצליחה ליצור עניין בקרב תעשיית הטלוויזיה, חברת firstperson אוחדה חזרה עם סאן מיקרוסיסטמס. בחודש יוני 1994, לאחר שלושה ימים של סיעור מוחות עם ג'ון גייג', המדען הראשי של סאן, גוסלינג, ג'וי, נוטון, וויין רוסינג ואריק שמידט, הצוות תכנן את הפלטפורמה מחדש, והפעם ייעד אותה עבור ה-World Wide Web. הם הרגישו שעם התפתחותם של דפדפנים גרפיים כמו מוזאיק, האינטרנט היה בדרכו להפוך למדיום אינטראקטיבי מאוד, כפי שהם צפו קודם לכן שהטלוויזיה בכבלים תהפוך להיות. כאַב טיפוס, נוטון פיתח דפדפן קטן בשם WebRunner (הקרוי על שם הסרט בלייד ראנר). מאוחר יותר שמו של הדפדפן שונה ל-HotJava. באותה שנה, שמה של השפה Oak שונה ל-Java, לאחר שהתגלה כי השם Oak כבר היה תפוס כסימן מסחרי על ידי חברת Oak Technology. אף על פי שגרסה 1.0a של Java הייתה זמינה להורדה כבר בשנת 1994, השחרור הפומבי הראשון של Java הייתה גרסה 1.0a2 ביחד עם הדפדפן HotJava, עליהם הכריז גייג' בוועידת SunWorld ב-23 במאי 1995. הכרזה זו לוותה בהכרזה מפתיעה של מארק אנדריסן, סמנכ"ל נטסקייפ, על כך שהדפדפנים של נטסקייפ יכללו תמיכה בג'אווה. ב-9 בינואר 1996, סאן מיקרוסיסטמס יסדה את קבוצת JavaSoft שמטרתה להמשיך בפיתוח הטכנולוגיה. על פי אורקל, סביבת ההרצה של ג'אווה (Java Runtime Environment - JRE) נמצאת בלמעלה מ-850 מיליון מחשבים אישיים. מיקרוסופט הפסיקה לספק את ה-JRE עם מערכות ההפעלה שלה אחרי שסאן מיקרוסיסטמס תבעה אותה על כך שהוסיפה מחלקות ייעודיות עבור Windows לתוך סביבת ההרצה של ג'אווה שהיא סיפקה, ועל כך שהפכה את המחלקות החדשות הללו לזמינות דרך שפת התכנות ++J. כיום משתמש המעוניין להריץ יישומי ג'אווה ב-Windows צריך להוריד ולהתקין בחינם את סביבת ההרצה של ג'אווה מהאתר של אורקל. סביבת ההרצה של ג'אווה מסופקת ביחד עם מערכת ההפעלה Mac OS X של אפל, והפצות רבות של לינוקס כוללות את חבילת התוכנות החופשיות GNU Classpath, אשר תואמות חלקית למפרט הרשמי של ג'אווה, ומספר הולך וגדל של הפצות כוללות את חבילת IcedTea התואמת ברובה למפרט הרשמי. מבין יישומי ג'אווה הנמצאים בשימוש נפוץ יחסית במחשבים אישיים נכללות סביבות הפיתוח המשולבות IntelliJ IDEA ,NetBeans ,Eclipse מבית JetBrains והתוכנות לשיתוף קבצים LimeWire ו-Vuze. ג'אווה משמשת גם בתוכנה המתמטית MATLAB, הן עבור יצירת ממשק המשתמש והן בליבת המערכת. כמו כן ג'אווה משמשת ליצירת ממשקי משתמש חוצי-פלטפורמות (cross-platform) עבור יישומי שיתוף פעולה כגון Lotus Notes. Java ME הפכה לפופולרית במכשירים ניידים, שם היא מתחרה בסימביאן, BREW ו-NET Compact Framework.. ריבוי היצרנים של טלפונים סלולריים הוביל לצורך בסט סטנדרטים מאוחד, כך שתוכניות תוכלנה לרוץ על גבי טלפונים של יצרנים שונים. לצורך כך נוצר ה-MIDP – Mobile Information Device Profile – מפרט עבור השימוש בג'אווה במכשירים עם מערכות משובצות מחשב כגון טלפונים סלולריים ומחשבי כף יד. הסטנדרט הראשון היה MIDP 1, אשר תוכנן עבור מכשירים בעלי מסך קטן, ללא גישה לאודיו ולתוכניות המוגבלות לגודל של עד 32KB. המפרט החדש יותר, MIDP 2, מאפשר גישה לאודיו ותוכניות בגודל של עד 64KB. כיוון שיכולות הטלפונים משתפרות מהר יותר מקצב עדכון הסטנדרטים, חלק מיצרני הטלפונים מורידים חלק מהמגבלות המוטלות על ידי הסטנדרטים, לדוגמה, את מגבלת הגודל המקסימלי של תוכניות. מערכת ההפעלה אנדרואיד של גוגל משתמשת בשפת ג'אווה, אבל לא בספריות של ג'אווה, לפיכך פלטפורמת האנדרואיד אינה יכולה להקרא ג'אווה. אנדרואיד מריצה את הקוד על גבי המכונה הווירטואלית Dalvik במקום ה-JVM. ערך מורחב – Java Enterprise Edition מאז הצגת ה-Enterprise Edition בשנת 1998, הפלטפורמה של ג'אווה הפכה לאחד מהיסודות המרכזיים בפיתוח טכנולוגיות מידע בתחום ה-enterprise (מערכות תוכנה המיועדות לשימוש בארגונים גדולים), משתי סיבות: באמצעות החיבור בין ג'אווה לשרתי רשת, הפלטפורמה של ג'אווה הפכה לפלטפורמה המובילה לאינטגרציה בין ה-web למערכות enterprise אחוריות (backend systems). זה איפשר לחברות להעביר חלקים מהעסק שלהן או את כולו לסביבת האינטרנט, באמצעות שימוש בסביבות אינטראקטיביות מקוונות (כגון אתרי אינטרנט דינאמיים), אשר מאפשרות ללקוח גישה ישירה לתהליך העסקי (לדוגמה, אתרי אינטרנט בנקאיים, מערכות אונליין להזמנת כרטיסי טיסה וכו'). מגמה זו המשיכה להתפתח מההתחלה מבוססת-הווב: הפלטפורמה של ג'אווה הבשילה לכדי שימוש כתשתית לפיתוח אינטגרציה ארגונית, שבה מערכות מורשת נפתחות אל העולם החיצון באמצעות בניית גשרים על הפלטפורמה של ג'אווה. מה שתרם למגמה זו היא התמיכה של הפלטפורמה של ג'אווה בסטנדרטים של Enterprise Application Integration כגון העברת מסרים (messaging), ו-Web services. ג'אווה הפכה לפלטפורמת הפיתוח הסטנדרטית במחלקות טכנולוגיית המידע של חברות רבות, אשר מבצעות את מרבית או את כל הפיתוח העסקי שלהן בג'אווה. פיתוח מסוג כזה בדרך כלל מתייחס ליצירת כלים ספציפיים לחברה (לדוגמה, מערכת להזמנת כרטיסי טיסה). הבחירה בפלטפורמה של ג'אווה מוּנעת לעיתים קרובות על ידי השאיפה לנצל תשתית קיימת בג'אווה, לצורך יצירת כלים חכמים המקושרים ביניהם. הפלטפורמה של ג'אווה הפכה לפלטפורמת הפיתוח העיקרית עבור הרבה כלי תוכנה ופלטפורמות המיוצרים על ידי חברות צד-שלישי (כמוצרים מסחריים או בקוד פתוח או כשילוב בין השניים). חברות משתמשות במוצרים אלה ככלים הניתנים לקונפיגורציה (configurable), להבדיל ממוצרים הדורשים תכנות (programmable). דוגמאות מקטגוריה זו כוללות שרתי רשת, שרתי יישומים, מסדי נתונים, enterprise service buses, כלים ל-Business Process Management ומערכות לניהול תוכן. שימושי Enterprise בג'אווה הפכו גם לגורם המרכזי לעניין שמגלה קהילת הקוד הפתוח בפלטפורמה. עניין זה הוביל ליצירת מספר גדול של תוכנות, הכוללות ספריות של פונקציות פשוטות, תשתיות פיתוח כגון: Spring Framework, Apache Wicket, Dojo Toolkit, Hibernate, ומימושים בקוד פתוח של סטנדרטים וכלים כגון: אפאצ'י טומקט, GlassFish, Mule, Apache ServiceMix. בימים המוקדמים של ג'אווה (לפני המימוש של המכונה הווירטואלית HotSpot בגרסה 1.3 של ג'אווה בשנת 2000), נמתחה ביקורת על הביצועים שלה. נכון לשנת 2012, באופן כללי אין יותר בסיס לביקורת זו. הודגם כי ג'אווה רצה במהירות דומה לקוד native (בשפת מכונה) שעבר אופטימיזציות. מדידות ביצועים של מימושים מודרניים של ה-JVM הראו כי זוהי אחת מפלטפורמות השפה המהירות ביותר הזמינות כיום – בדרך כלל איטית רק במעט לעומת ++C/C. הביצועים של ג'אווה השתפרו משמעותית לעומת הגרסאות המוקדמות. בכמה מבחנים הודגם כי הביצועים של מהדרי JIT דומים למדי לביצועים שמתקבלים ממהדרים לשפת מכונה. את ה-Java bytecode ניתן לפרש בזמן ריצה על ידי מכונה וירטואלית, או שניתן להדר אותו בזמן הטעינה או בזמן הריצה לקוד native שרץ ישירות על גבי החומרה של המחשב. פירוש הוא איטי מביצוע של קוד native, והידור בזמן הטעינה או בזמן הריצה מביא לירידה התחלתית בביצועים לצורך ביצוע ההידור. כל המימושים המודרניים של ה-JVM נוקטים בגישת ההידור, וכך לאחר זמן ראשוני לצורך אתחול, הביצועים הם שווי ערך לאלה של קוד native. הצלחתהּ של Java ושל גישת ה-"כְּתוֹב פעם אחת, הָרֶץ בכל מקום" (write once, run anywhere) שלה, הובילו למיזמים דומים נוספים, שהבולט שבהם הוא פלטפורמת NET. (דוט-נט) של מיקרוסופט, שהופיעה בשנת 2002 ומשלבת הרבה מההיבטים המוצלחים של Java. דוט-נט בצורתה השלמה (במימוש של מיקרוסופט) הייתה זמינה במקור רק עבור פלטפורמות Windows, בעוד ש-Java זמינה במלואה עבור פלטפורמות שונות רבות. דוט-נט נבנתה במטרה לתמוך במגוון שפות תכנות, בעוד שהפלטפורמה של Java נבנתה בהתחלה במטרה לתמוך רק בשפת Java, אם כי מאז פותחו עוד הרבה שפות ל-JVM. דוט-נט כללה במקור שפה דמוית-ג'אווה שנקראה #Visual J (ויז'ואל ג'יי שארפ; לפני כן היא נקראה ++J), שאינה תואמת את המפרט של Java. ספריית הקוד של #Visual J תואמת בעיקר לגרסה 1.1 הישנה של ה-JDK. מסיבות אלה, השפה הזאת מהווה יותר שפת-מעבר מ-Java לפלטפורמת הדוט-נט, מאשר שפת דוט-נט מדרגה ראשונה. העבודה על #Visual J הופסקה עם השחרור של Microsoft Visual Studio 2008. מיקרוסופט המשיכה לתמוך בגרסה הקיימת של #Visual J שהופצה עם Visual Studio 2005 עד לשנת 2015. מדיה וקבצים בנושא Java בוויקישיתוף אתר האינטרנט הרשמי של Java The Java Technology Phenomenon - מבוא כללי לטכנולוגיה של ג'אווה, מתוך סדרת המדריכים הרשמיים של ג'אווה באתר של Oracle (באנגלית) האתר הרשמי של ג'אווה באורקל ההיסטוריה של ג'אווה - וידאו של הרצאה של ג'יימס גוסלינג