Команда Spring АйО подготовила перевод статьи, посвящённой истории Java — одного из самых популярных языков программирования. 

В статье вы найдёте не только краткую историю языка, но и его ключевые характеристики, которые сделали этот язык программирования таким востребованным.


1. Обзор

Java — один из самых популярных языков программирования в мире. Он был создан Джеймсом Гослингом и Патриком Ноттоном, сотрудниками компании Sun Microsystems, при поддержке Билла Джоя, сооснователя Sun Microsystems.

Компания Sun официально представила язык Java на конференции SunWorld 23 мая 1995 года. Затем, в 2009 году, компания Oracle купила компанию Sun, что объясняет, почему сейчас язык принадлежит Oracle.

В этой статье мы рассмотрим историю языка программирования Java.

2. Что такое Java

Java описывается как многоцелевой, строго типизированный, объектно-ориентированный язык программирования. По замыслу, Java обладает минимальным количеством зависимостей от конкретных реализаций.

Этот язык программирования позволяет создавать приложения на множестве устройств. Его применение очень широкое, включая разработку программного обеспечения для мобильных устройств, POS-терминалов, банкоматов, Интернета вещей (IoT), а также веб-страниц.

Несмотря на то, что Kotlin стал предпочтительным языком для разработки Android-приложений в 2021 году, Java по-прежнему остается основным языком для разработки приложений под Android. Это связано с тесной интеграцией Android с Java. В частности, части операционной системы, такие как пользовательский интерфейс и некоторые основные библиотеки, написаны на Java.

3. Краткая история

Давайте погрузимся в историю проекта Java и посмотрим, как он начался и развивался с течением времени.

3.1 Начало

Проект Java зародился в 1991 году в недрах компании Sun Microsystems, когда трое инженеров — Джеймс Гослинг, Майк Шеридан и Патрик Ноттон — стремились создать язык, работающий на небольших электронных устройствах.

Вскоре они запустили проект под названием Green Project для изучения влияния конвергенции между цифрово управляемыми бытовыми приборами и компьютерами.

Используя синтаксис, похожий на C++, они создали цифровой пульт дистанционного управления, оснащенный графическим и анимированным сенсорным экраном. Пульт, результат нескольких месяцев интенсивных исследований, обладал удивительной возможностью управления всем оборудованием в гостиной. Он был запрограммирован на новом языке, полностью независимом от процессора, на котором работал, что делало его уникальным.

В конечном итоге Джеймс Гослинг, один из участников Green Project, разработавший этот язык, назвал его Oak.

Проект получил развитие, когда к нему присоединились американские кабельные операторы. Oak был переименован в FirstPerson. Однако проект FirstPerson не имел коммерческого успеха, вероятно, из-за того, что опередил своё время в индустрии, где основным приоритетом была прибыльность.

3.2 Появление протокола HTTP и браузера Mosaic

В 1993 году появление протокола HTTP и браузера Mosaic стало ключевым событием для проекта Java. В этот период команда осознала, что интернет станет идеальным каналом для продвижения их продукта.

В 1995 году Джеймс Гослинг представил браузер под названием WebRunner, который был способен отображать HTML-контент, смешанный с апплетами Java. Этот момент стал отправной точкой для дальнейшего развития проекта. Вскоре WebRunner был переименован в HotJava, а сайт java.sun.com был официально открыт для публики.

Со временем технология получила название "Java" (что в американском сленге означает "кофе") в честь любимого напитка программистов. Частично производство этого напитка осуществляется на острове Ява, откуда и происходит название.

После этого компании Sun и Netscape объявили о своем намерении интегрировать новую технологию в свои браузеры, что окончательно запустило язык в массовое использование. Версии Java стали выпускаться последовательно: от версии 1 в 1996 году до версии 17 в 2021 году.

Скрытый текст

На данный момент, последняя версия JDK - 22, а последняя LTS версия - 21, выпущенная в сентябре 2023.

4. Характеристики

Благодаря своим отличным характеристикам, Java стала популярным и полезным языком программирования. Компания Sun охарактеризовала его как:

  • Компилируемый и интерпретируемый

  • Платформонезависимый и переносимый

  • Объектно-ориентированный

  • Надежный и безопасный

  • Распределенный

  • Знакомый, простой и компактный

  • Многопоточный и интерактивный

  • Высокопроизводительный

  • Динамичный и расширяемый

Источник: “Programming with Java” – E Balagurusamy.

Далее мы подробно рассмотрим каждую из этих характеристик.

4.1. Компилируемый и интерпретируемый

Java объединяет мощь компилируемых языков и гибкость интерпретируемых языков.

Компилятор (javac) компилирует исходный код в байт-код, затем Виртуальная Машина (JVM) выполняет этот байт-код, преобразуя его в код, понятный машине.

4.2. Платформонезависимый и переносимый

Двухступенчатый процесс компиляции лежит в основе самой значимой особенности Java: независимости от платформы, что обеспечивает переносимость.

Независимость от платформы означает, что программа, скомпилированная на одной машине, может быть выполнена на любой другой машине, независимо от операционной системы, при условии наличия установленной JVM.

Переносимость является способностью запускать программу на различных машинах. На самом деле, один и тот же код будет работать идентично на разных платформах, независимо от аппаратной совместимости или операционных систем, без необходимости в изменениях, таких как повторная компиляция или модификация исходного кода.

4.3. Объектно-Ориентированный

Java поддерживает концепции объектно-ориентированного программирования, такие как инкапсуляция, абстракция и наследование.

Все инструкции и данные в программе на Java должны быть организованы внутри класса или объекта.

4.4. Надежный и Безопасный

Java включает в себя несколько полезных функций, которые помогают создавать надежные и безопасные приложения.

Одна из самых важных — это система управления памятью вместе с автоматическим сборщиком мусора (Garbage Collector, GC). В отличие от языков, таких как C/C++, Java избегает использования явных указателей и не требует от программистов ручного управления выделенной памятью.

Вместо этого сборщик мусора берет на себя заботу о удалении неиспользуемых объектов для освобождения памяти.

Кроме того, Java является строго типизированным языком, что помогает уменьшить количество ошибок в приложении, а также предоставляет механизмы обработки исключительных ситуаций.

4.5. Распределенный

Эта функция полезна при разработке крупных проектов. Мы можем разделить программу на несколько частей и хранить эти части на разных компьютерах. В результате, мы можем легко создавать распределенные и масштабируемые приложения, которые работают на нескольких узлах.

Этого можно достичь с помощью концепций RMI (Remote Method Invocation — удаленный вызов методов) и EJB (Enterprise JavaBeans).

4.6. Простой и Знакомый

Во-первых, Java прост благодаря своему стилю кодирования, который очень чистый и легкий для понимания. Кроме того, Java не использует сложные и трудные для освоения функции других языков, такие как явные указатели.

Наконец, Java знакомый, поскольку его синтаксис основан на существующих языках, таких как C++, и включает многие функции этих языков.

4.7. Многопоточный и Интерактивный

Многопоточность, известная также как многозадачность на основе потоков, — это характеристика, позволяющая выполнять несколько потоков одновременно.

Короче говоря, мы можем писать программы на Java, которые выполняют множество задач одновременно, определяя несколько потоков. Преимущество многопоточности заключается в том, что она не занимает отдельную память для каждого потока — все потоки используют общую область памяти.

4.8. Высокопроизводительный

Байт-код, генерируемый компилятором, высоко оптимизирован, поэтому виртуальная машина может выполнять его намного быстрее. Вот почему Java быстрее, чем другие традиционные интерпретируемые языки программирования.

4.9. Динамический и Расширяемый

Эта функция предоставляет возможность динамически подключать новые библиотеки классов, методы и объекты. Java высоко динамична, так как может адаптироваться к изменяющейся среде.

5. Важность JRE

Чтобы программа могла работать, ей необходимо окружение, которое позволяет ей функционировать — обычно это операционная система, такая как Linux, Unix, Microsoft Windows или macOS. В отсутствие других поддерживающих окружений программы ограничены возможностями операционной системы и её ресурсами.

Среда Выполнения Java (JRE) действует как переводчик и посредник между программой и операционной системой. Она работает поверх операционной системы, предоставляя дополнительные ресурсы, специфичные для Java.

6. Заключение

Благодаря своим особенностям язык Java получает значительную часть возможностей других существующих языков, одновременно устраняя некоторые из их основных недостатков.

Таким образом, Java является языком, общепризнанно считающимся относительно современным, с хорошо установленным потенциалом.

Присоединяйтесь к русскоязычному сообществу разработчиков на Spring Boot в телеграм - Spring АйО, чтобы быть в курсе последних новостей из мира разработки на Spring Boot и всего, что с ним связано.

Ждем всех, присоединяйтесь!

Комментарии (28)


  1. rsashka
    02.09.2024 15:37

    Забыли написать, что раньше он был свободный для скачивания и коммерческого использования, что и позволило ему широко распространиться, но после покупки Oracle изменился подход к его лицензированию и теперь есть сложности с использованием последних версий языка, поэтому многие коммерческие продукты либо делают свои или используют чужие кастомные сборки, либо используют старые версии Java.


    1. v7878
      02.09.2024 15:37
      +1

      Помимо реализации oracle, имеющией перечисленные вами проблемы, есть полностью открытые реализации openjdk и openj9


      1. rsashka
        02.09.2024 15:37

        Так я про это и говорю. Раньше была одна Java, а теперь экосистема фрагментирована.


        1. BugM
          02.09.2024 15:37
          +3

          Сможете показать пару несовместимостей между парой любых сертифицированных ванильных JDK?


          1. rsashka
            02.09.2024 15:37

            Что конкретно вы подразумеваете под ограничениями "ванильное" и "сертифицированное"?
            Насколько я помню, как раз ограничения на сертификационные тесты, это одна из особенностей новой лицензионной политики.


            1. BugM
              02.09.2024 15:37

              Именно это и подразумеваю. Те которые прошли TCK и сказали что изменений не вносили. Вы говорите что экосистема фрагментирована, значит эти сборки как-то отличаются. Так покажите пару различий.

              Ограничение нормальное вообще. Неплохо разделяет сборки от Васяна от сборок от больших ребят.

              Исходники есть, собирайте и пользуйтесь на здоровье. Это полностью законно. JDK собирается не так сложно вообще. А есть сборки от серьезных ребят которые заплатили нормально денег и прошли все тесты от Оракла. Их много бесплатных, берите любую и пользуйтесь на здоровье.


              1. rsashka
                02.09.2024 15:37

                Вы реально не понимаете в чем проблема или только делаете вид, что с экосистемой Java все хорошо? Представьте, что вместо какого нибудь GCC или LLVM будет существовать два десятка разных брендированных компиляторов. Все они собраны из одни и тех же исходников и какие-то из них даже прошли тесты, но настоящие GCC или LLVM использовать нельзя, так как это не позволяет их лицензия.
                Кроме Orace JDK и Open JDK существует еще куева туча сборок:

                • AdoptOpenJDK

                • Amazon Corretto

                • Azul Zulu

                • Bck2Brwsr

                • CACAO

                • Codename One

                • DoppioJVM

                • Eclipse OpenJ9

                • GraalVM CE

                • HaikuVM

                • HotSpot

                • Jamiga

                • JamVM

                • Jelatine JVM

                • Jikes RVM (Jikes Research Virtual Machine)

                • JVM.go

                • Liberica JDK

                • leJOS

                • Maxine

                • Multi-OS Engine

                • RopeVM

                • uJVM

                • Azul Zing JVM

                • CEE-J

                • Excelsior JET

                • GraalVM EE

                • Imsys AB

                • JamaicaVM (aicas)

                • JBlend (Aplix)

                • MicroJvm (IS2T – Industrial Smart Software Technology)

                • OJVM

                • PTC Perc

                • SAP JVM

                • Waratek CloudVM for Java

                И это далеко не полный список и вы будете настаивать, что между ними нет никаких различий?


                1. BugM
                  02.09.2024 15:37
                  +4

                  Так покажите эти различия. Я прошу всего парочку. Только не между любыми, а между теми которые соответствуют критериям которые я чуть выше описал. Это вроде немного. Между gcc и clang я вам легко покажу больше чем два различия.

                  Пока вся разница это минус два в мою карму. Этот аргумент я вижу и понимаю. Убедительно. Еще чуть-чуть и вы будете правы, а я буду молчать.


                  1. rsashka
                    02.09.2024 15:37

                    между теми которые соответствуют критериям которые я чуть выше описал

                    Я вас просил уточнить, что вы имеете ввиду под термином "ванильное", но ответа так и не получил. Наверно для того, чтобы у вас была возможность сказать "что я не это имел ввиду"? Я не хочу тратить время на пустую переписку. Если вы считаете, что с экосистемой Java все в порядке, ну и пусть, я не буду вас переубеждать, это ваши проблемы, тем более я на ней уже не пишу и теперь этот бардак меня не касается

                    Между gcc и clang я вам легко покажу больше чем два различия.

                    Это такой стеб или вам нравится изображать из себя недалекого человека?
                    Естественно gcc и clang полностью различаются.


                    1. BugM
                      02.09.2024 15:37
                      +2

                      Ванильная сборка это сборка авторы которой не написали в ридми что они внесли вот такие-то изменения. Внести изменения и по прежнему проходить TCK нетривиально, но возможно.

                      Вам надо просто написать или найти в интернете программу которая ведет себя по разному на разных ванильных JDK для доказательства вашего тезиса о проблемах в джава экосистеме. Судя по вашим комментариям это несложно.

                      На моей стороне TCK. Мой тезис: Все кто TCK походит и сознательно не ломает совместимость одинаковые и между ними нет разницы.

                      Переход на личности, минусы в карму. Хабр2024 стал странным.


                      1. rsashka
                        02.09.2024 15:37

                        Вам надо просто написать или найти в интернете программу которая ведет себя по разному на разных ванильных JDK для доказательства вашего тезиса о проблемах в джава экосистеме.

                        Мне это не нужно, это ваше желание, которое я удовлетворять не нанимался.

                        Изначально я озвучил тезис, что с началом эпохи коммерциализации Java, и сменой лицензии на не свободную, её экосистема стала очень фрагментирована. И в качестве доказательства этого факта привел неполный список сборок JDK. Может какие-то из них совместимы полностью, может быть нет, мне это не интересно, так как подтверждает мой тезис просто сам факт их наличия.

                        Как контр аргумент (и проверку на фальсифицируемость), я упомянул проекты GCC и LLVM (clang). Пока их лицензии свободные, то и нет необходимости всем и каждому собираться кастомные сборки компиляторов (хоть ванильные, хоть нет).

                        И да, согласен, Хабр уже давно странный.


                      1. BugM
                        02.09.2024 15:37

                        То есть вы принесли тезис о фрагментированности, а пруфов на фрагментированнность, кроме плевков в карму и перехода на мою личность, не будет. Ну окей.

                        Про наличие TCK я подозреваю вы узнали от меня.


                      1. rsashka
                        02.09.2024 15:37

                        Вы уже не первый раз высказываете недовольство оппонентом в споре, требуя от него (т.е. от меня), что-то сделать для вас, что по вашему мнению, сможет вас убедить. Но почему то не хотите ни слушать, ни замечать другие аргументы, да и сами не чураетесь переходов на личности.

                        Я вам уже объяснил свое мнение насчет фрагментированности Java после смены лицензии. Допускаю, что может быть для вас наличие десятков разных сборок JDK подобным аргументом не являются, но это ваше мнение, которое я уважаю и не собираюсь вас в этом переубеждать.

                        А минус в карму за "Неконструктивное общение" я вам поставил после того, как вы начали что-то требовать, вместо того, что бы аргументировано обосновать свое мнение насчет изначально озвученных фактов и аргументов.


                      1. BugM
                        02.09.2024 15:37

                        Обоснование приносит тот кто принёс какой-то тезис.

                        Откройте любую статью про джаву. Видите там упоминание на каких idk оно работает? Откройте Гитхаб любой крупной библиотеки. В том числе сложной как Спринг или насквозь пропитанной хаками как Нетти. Там видите упоминание про поддерживаемые idk? Вот, я тоже не вижу.

                        Вывод: тезис о фрагментированности вам надо как-то серьезно обосновывать. Не обосновывать такое можно если вас зовут Алексей, например. Тогда все сами побегут разбираться и доказывать его.


                      1. rsashka
                        02.09.2024 15:37

                        Ну вот опять. Сами придумываете аргументы, сами их пытаетесь опровергнуть.

                        Если библиотека частично поддерживает какой-то компилятор или платформу, это не говорит о фрагментированости платформы разработки.

                        Например, clang ведет себя по разному при работе под Linux и Windows. (наткнулся на особенность случайно, из-за чего пришлось использовать библиотеку libffi). Но является ли это фактом, указывающим на фрагментированность экосистемы clang или С++ в целом? Вряд ли.

                        Другое дело, если бы существовал бы десяток (условно) сборок clang на базе одного и того же исходного кода, причем не важно, что большинство из них будет вели бы себя одинаково.


                      1. dplsoft
                        02.09.2024 15:37

                        присоединюсь к аргументам @BugM .

                        вам всего лишь говорят, что заявления о "фрагментированности экосистемы" - мягко говоря, несостоятельны. (наличие множества совместимых между собой альтернативных джавамашин - это никак не фрагментированность. ключевое тут - "полностью совместимых между собой")

                        аналогично не соответствует действительности и мнение про "закрытость языка" по лицензиям - вы путаете официальную сборку джавамашины от оракла , и сам язык java (как набор стандатов, описаний и требований к логическому механизму).

                        вы же, очень похоже, к сожалению, не слышите оппонента, его аргументов и не пытаетесь понять о чем он вам говорит.


                  1. Antgor
                    02.09.2024 15:37

                    Наш коллега, как мне кажется, катастрофически далёк от мира Java и занимается некоторой подменой понятий.

                    Если взять за точку отсчета 2010 год (Покупку Sun Microsystems компанией Oracle), то можно назвать достаточное количество имплементаций JVM.
                    * Azul Zing от Azul Systems - старт 2002 год. Проприетарная платная JVM со своим высокопроизводительным Garbage Collector (GC)
                    * JRockit от BEA Systems - старт 2002 год. Затем куплена Oracle. Проприетарная и сильно платная. Уникальный для того времени GC, который скорее всего лег в основу G1 OpenJDK и Oracle JVM. Убита Oracle в 2012
                    * IBM J9 от понятно кого. С ростом популярности Java и распространением энтерпрайзного софта на этой платформе IBM в 1999 году заключило соглашение с Sun и получило право форкнуть Java SE (кажется 1.3) чтобы сделать порты под AIX, z/OS с учетом специфики IBM POWER и мэнфреймов.
                    * SAP JVM. Не могу назвать точную дату, но первый релиз не позже Java SE 6, то есть 2004-2006 годы. Причина та же, что и у IBM. Дорогущее энтерпрайзное ПО работающее на ОСях - Windows, Solaris, HP-UX, AIX, i5/OS (IBM i) и на процах - x86, x86-64, IA-64, SPARC, PA-RISC, PowerPC (IBM POWER). SAP договаривается с Sun и делает форки под все платформы, чтобы системные интеграторы при внедрении систем не плясали с бубном.
                    * OpenJDK. 2007 год, случилось знаковое событие. Поняв все преимущества коллективной разработки OpenSource компания Sun Microsystems публикует исходники своей JVM под названием OpenJDK и лицензией GPL-2


                    Можно еще продолжить, но нет смысла. Тут и так 5 абсолютно различных имплементаций, ни в коем случае не сборок, JVM, эпохи до Oracle. И конечно Java software будет на них выполняться одинаково в соответствии с заявленной версией совместимости с TCK (наборами JSR).

                    Теперь можно и к сборкам перейти. Oracle не стал закрывать OpenJDK лицензиями. Более того, OpenJDK - это основная платформа OracleJDK в которую включены некоторые проприетарные элементы. Лично мне непонятен ход с лицензиями на OracleJDK, как и не понимаю, кому нужна именно сборка от Oracle, там нет киллер фич. Но прошла некоторая волна создания сборок OpenJDK другими компаниями. И в этом вообще нет никаких проблем. Та же AdoptOpenJDK (Eclipse Temurin) это сборка референсной OpenJDK и возможность получить платную поддержку. Российская LibericaJDK - сборка, но плюс ребята дописывают улучшения, не ломающие TCK и являются контрибуторами OpenJDK. Примерно такая же ситуация с Amazone Coretto.
                    Я работаю в компании, в которой уже много лет собираю собственные сборки OpenJDK и дописываю патчи, которые не ломают TCK, но учитывают особенности нашего продакшена в рантайме.



                    1. rsashka
                      02.09.2024 15:37

                      и занимается некоторой подменой понятий.

                      Это вы хорошо отметили. А ничего, что JVM (о чем вы пишите) и JDK о котором идет речь, это как бы не совсем одно и тоже?


  1. Deadgods
    02.09.2024 15:37
    +1

    Ну очень краткая история. :-(


    1. nespressopixie
      02.09.2024 15:37

      руквики прдругому рассказывает почему стал называться ява © мопед не мой я просто из-за того что в статье сначала упустили а потом разъяснили почему ява между успел глянуть wiki


  1. nespressopixie
    02.09.2024 15:37

    из-за android вспомнил (по памяти:) если у ява программиста вытащить половину (оперативной) памяти то ява программы будут работать быстрее


    1. nespressopixie
      02.09.2024 15:37

      решил глянуть (webarchive) одну популярную ява прогу (2006 ver 0.1.0 и 2010 ver 1.0) - нашёл в итоге roadmap 2005 по которому смогли всё допилить к версии 1.0 (удивляло что смогли и вроде с 0.7.6 сразу зарелизили поняв что год без проблем) и узнал что она иранская (никогда не интересовался чья) да из-за качественного исполнения для неё остальные страны собрали/напили контента и до сих пор работает хотя рессурс давно в webarchive (ушёл туда когда стало oracle хотя .org домену 20+ лет)


      1. nespressopixie
        02.09.2024 15:37

        может в конец статьи добавить

        Кик Рэдек из Microsoft считает С# более сложным языком, чем Java. По его мнению, «язык Java был построен таким образом, чтобы уберечь разработчика от стрельбы себе в ногу» (англ. «Java was built to keep a developer from shooting himself in the foot»), а «С# был построен так, чтобы дать разработчику пистолет, но оставить его на предохранителе» (англ. «C# was built to give the developer a gun but leave the safety turned on»).


  1. ris58h
    02.09.2024 15:37
    +3

    Один экран текста по заявленой теме и "вода". Уж лучше статью на Википедии почитать.

    Презентация Star7 ("пульт" из статьи) от Джеймса Гослинга прямиком из 1992-го.


  1. Throwable
    02.09.2024 15:37

    Если углубиться в тему и отбросить ваниль, то получится сказ о том как "просрать все полимеры". Неплохая и перспективная технология благодаря бездарной политике была сначала выпилена из винды, затем снесена с десктопа, смыта с клиентского веба, практически были просраны все мобильные платформы (только Гугл на свою задницу взял джаву и сильно пожалел потом). На сервере благодаря энтерпрайзному булшиту, веб разработка практически была утрачена в угоду легковесным решениями типа ruby on rails. Все эти JSR спецификации были дорогим и факультативным процессом, и реально никому особо и не впились. Фактически все это время один Spring тащил на себе всю джаву, новый клал по большей части на весь JEE. Около 7 лет застоя языка вызвали отток девелоперов из экосистемы и создание стопицот альтернативных мертворожденных JVM языков. Сегодня джава зацепилась за клауд, но и здесь не все гладко: внезапно оказалось, что она долго стартует, что сильно мешает технологиям с динамическими инстансами, а также не позволяет быть лекговесным языком для написания утилит и скриптов, как Пайтон или JS. ML и AI опять же...

    Вообщем, история джавы -- это нифига не история успеха. Скорей вопреки стараниям менеджеров, над все ещё ее использует.


    1. denis_iii
      02.09.2024 15:37

      На сегодняшний момент, Java это единственная популярная платформа, где запили настоящие виртуальные потоки вместо корутин. Благо, дизайн языка это позволяет.

      А для скорости запуска давно есть GraalVM с предварительной компиляцией, плюс, скоро Leyden в релизе (AOT кеш в CDS).

      И Java и JVM развивается. Сам Oracle набирает разработчиков.


  1. mrDataStream777
    02.09.2024 15:37

    Спасибо. Освежил немного в голове.

    1995 релиз

    2009 покупка оракл.

    2023 сентября 21 версия)


  1. dplsoft
    02.09.2024 15:37

    в статье упущены ключевые фичи языка и стратегии его поддержки, без которых язык не стал бы едва ли не единственным языком написания больших бизнес приложений, и тем явлением которое мы сегодня имеем.

    собственно, отсутствие этих вещей у многочисленных "убийц джавы", и стало причиной того что все они - на обочине истории, а джава как была, ведущим языком для бизнес-приложений, так и остается.

    первое: наличие четкого описания работы языка.

    описания достаточного для того, что бы можно было сделать две ключевые вещи:

    а) сделать полностью совместимую альтернативную реализацию компилятора

    б) провести тест на совместимость различных компиляторов.

    собственно это и есть вторым важным пунктом :

    наличие процесса тестирования на совместимость компиляторов. как компиляторов разных версий (обеспечение обратной совместимости и неизменности работы вашего кода на новых версиях языка/компилятора, так и кроссплатформенная совместимлсть )

    причем у sun, процесс тестирования был закреплён юридически и без этого нельзя было объявить ваш компилятор - джавой.

    помните историю такого поделия майкрософта как J# ? и куда оно "внезапно делось"?

    подскажу: юристы sun выиграли дело у мелклмягких и запретили им создавать несовместимую со стандартом версию "java" (там дальше пошла цепочка событий "откуда есть пошел c#, и нафига и кому он был нужен", но это совершенно другая истоия). причем произошло это очень быстро - буквально год или около того. издательство bhv успело даже книжек понавыпускать... а потом их "как смыло".

    именно ~100% обратная совместимость (обеспеченная наличием стандарта и тестов) и статическая типизация - и сделали язык тем незаменимым и фактически безальтернативным средством для написания бизнес приложений с длительным жизненным циклом, которым java сегодня и является.

    это, а не "какие то там свойства языка".

    всё, собственно, потому, что у бизнеса который вкладывает деньги в большой софт на много-много лет - нет никакого желания тратить деньги на рефакторинг кода, после выхода новой версии компилятора.

    с джавой процесс переезда на новую версию компилятора - максимально безболезненный (ps: если, конечно, вы "находитесь в пределах стандарта языка", не пользуете недокументированные фичи типа доступа к приватным методам через рефлекшен как было у многих с 6й джавай, или не пытаетесь заигрывать с байткодом ... но это тоже долгая история и повод для холиваров долгими зимними вечерами у камина)

    —————

    вы скажете что же js и с/с++ ? прекрасный выбор. есть стандарты, есть возможность проверить компилятор, но с обратной и/или кроссплатформенной совместимостью не так как у джавы. хорошие языки для своей ниши - скриптование в браузере (именно скриптование, а не то тяжеловеское безумие с концепцией "js новый ассемблер" которое сегодня творится) и написание близкого к железу кода. это, а не написание приложений с бизнес логикой и длительным жц.

    котлин? этот очередной недоубийца джавы (без стандарта, альтернативных реализаций и тестирования совместимости) тоже ушел бы на обочину истории, но оказался нужен гуглу как запасной аэродром от нападок менеджеров оракла по поводу джавы. собственно, в мобильной разработке, с коротким жц приложений (вышла новая версия телефона - надо всё переписывать) - ему вполне себе комфортно. тут многие языки не соблюдающие принципов совместимости и наличия полного описания будут прекрасно жить.

    про остальное... потом как-нибудь ))