Став хозяином Java, Oracle невольно сломал Eclipse

Автор оригинала: Ed Burnette
  • Перевод
В этом месяце (пост от 28 июля — прим. пер.), компания Oracle выпустила новую версия Java, 1.6.0_21 (она же 6u21). К сожалению, пользователями Eclipse было быстро обнаружено, что это версия несовместима с Eclipse и программами Eclipse Rich Client Platform (RCP).

Бага 319514 из эклипсовосой багтрекинг системы cодержала описание этой проблемы с принтскрином шелла, в котором было видно, что Oracle изменили имя компании в параметрах файла java.exe с “Sun Microsystems, Inc” на “Oracle”. Это изменение не вошло в официальный release notes. По иронии судьбы, Eclipse с 2007 был завязан на данный параметр, для решения другой проблемы, связанной с малым значением параметра “MaxPermSize”, устанавливаемого Sun, из-за чего эклипс просто не запускался. А вот когда окружение изменилось, то и этот фикс так же перестал работать, и многие получили проблемы с “PermGen”.

На это Oracle в понедельник ответил обновлением версии 6u21, в которой вернули прежнее значение. Кроме того, было ясно сказано, что в JDK 7 в поле компании будет опять указано “Oracle”. Вот что пишет один из разработчиков:
Одним из этапов ребрендинга всех продуктов Sun’а в продукты Oracle’а, состоял в том что надо было изменить значение параметра Company Name для файла java.exe, что и было сделано в Java SE 6u21.

После того, как новая версия была выложена на сайтеjava.sun.com, мы получили много заявлений о том, что новые изменения повлияли на работу пользователей Eclipse под Windows. Все данные и workaround проблемы были тут же отмечены на сайте Eclipse, но лавинообразное распространение новой версии затрагивало все новых и новых пользователей. Понимая это, а так же учитывая пожелания Eclipse и многих тысяч пользователей Oracle восстановил значения параметра Company Name на “Sun Microsystems”.

Изменения затронули только версия для Windows, в то время как версии для Solaris и Linux работали исправно. Ради того, чтобы этот все заработало и в Windows, был выпущен новый билд, в котором версия была изменена с 6u21-b06 на 6u21-b07. Под Solaris and Linux по-прежнему поставлялся билд 6u21-b06.

Отдел инжиниринга при этом отмечает, что: в Java значения параметром java.vendor и java.vm.vendor не изменятся ни в одном из релизов jdk6 и будут по-прежнему иметь вид “Sun Microsystems, Inc.”. Было выяснено, что имя поставщика критически влияет на работоспособность целого ряда программ. А в Windows проблемой явилось явно указываемое для exe/dll поле “COMPANY”, которое и явилось источником проблемы. Вообще, для нас это стало большим сюрпризом, что кто-то вообще завязывается на подобные параметры. Учитывая это, для релизов jdk6 поле COMPANY было восстановлено. Но в релизах jdk7 произойдет окончательное изменение всех параметров, указывающих на имя компании, в том числе java.vendor и java.vm.vendor.

Этим утром, я убедился, что на официальной странице загрузки выложена версия, работающая с Eclipse. Вот что будет выдано на экран в командной строке при вызове java -version:

C:\> java -version
java version “1.6.0_21″
Java(TM) SE Runtime Environment (build 1.6.0_21-b07)
Java HotSpot(TM) 64-Bit Server VM (build 17.0-b17, mixed mode)


Если вы скачали Java под 32-х или 64-х версию Windows, убедитесь, что эта версия называется 1.6.0_21-b07, а не b06.
Поделиться публикацией

Комментарии 70

  • НЛО прилетело и опубликовало эту надпись здесь
      +32
      Комент туповат.
      • НЛО прилетело и опубликовало эту надпись здесь
        +16
        Это не самый большой недостаток для новости, которую уже месяц назад успели обсудить :)
      • НЛО прилетело и опубликовало эту надпись здесь
          +5
          Как выяснилось не только эклипс. На месте Оракла, я бы ничего не стал менять. Всё равно никто не денется с подводной лодки.

          Правильное решение: выпустить патч, который ставит оптимальное значение `MaxPermSize`. Плюс добавить ключик -defaultParams, который бы возвращал полезную инфу о параметрах, необходимую для запуска
            +12
            Как выяснилось не только эклипс

            Это никак не оправдывает Eclipse. К Oracle странно иметь претензии, ребрендинг вполне логичен.
              +3
              Я не оправдываю Эклипс — у него очень много кривых моментов.

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

                +2
                Так как бы уже. В java охрененная обратная совместимость — со всеми костылями прошлых версий :)
              –3
              угу, купить Sun за много много зелёных бумажек и не надеть на себя корону? ну ну ))
              +2
              На какую только хрень не приходится завязываться in the wild :)

              У меня были ситуации, когда для получения какой-нибудь информации приходилось как раз парсить вот такие текстовые описательные поля, как бы глупо это не выглядело — просто иногда нет ничего более доступного.
              +5
              Мда, каких только костылей не бывает :)
              • НЛО прилетело и опубликовало эту надпись здесь
                  +4
                  Завязать код на строку копирайта — это жесть…
                    +24
                    Ага, и коммент ещё рядом:
                    //not really hardcode, as this will never change!
                      –4
                      где это?
                        +1
                        Не обращайте внимания, это был юмор, просто читайте дальше
                      0
                      Ага, и коммент ещё рядом:
                      // No hardcode in fact, as this will never, ever change!
                        0
                        упс :)
                          +3
                          Как говорится «Блажен, кто верует» :)
                        –13
                        Это как яркий пример качество кода производимого индусами.
                          –7
                          Оракл! Эклипипс мне запили! Быстра блять!
                            0
                            Я думаю, что разработчики, а также многие менеджеры не раз сталкивались с похожими проблемами при ребрендинге компании и, соответственно, кода.
                            То в ресурсах такое творится, что потом выкопаться нельзя, то в использовании различного рода сторонних библиотек.
                            Думаю, достаточно показательный пример того факта, что при разработке многие думают о масштабировании системы, а достаточно простые вещи упускаются из вида например такое как смена имени, логотипа и других атрибутов.
                              –20
                              Оракал это же вроде пленка самоклеющаяся? :)
                                –10
                                1. Завязать работоспособность эклипса на имени вендора — это круто и хороший юмор от Sun!
                                2. Обращаем внимание, что данная проблема актуальна только под виндой, так что писать метаданные в экзешник — это неверно в плане архитектуры, имхо.
                                  +4
                                  Винда виновата?
                                    –12
                                    Я не против винды, просто приятно смотреть, что бага не затрагивает Unix-подобные системы.
                                      +8
                                      Логика на уровне первого класа: Двери — это зло, ведь ними можно пальцы себе защемить. Вот будет у меня дом — не будет в нем дверей, чтоб никто себе пальцев не защемил.
                                        +17


                                        Uploaded with ImageShack.us
                                          –7
                                          Двери как раз есть. Я имел в виду, что мой Eclipse под линухом не задет заменой Sun на Oracle. Могу я хотя бы тут не восхищаться майкрософтом?
                                            +6
                                            Sun JVM выделяет недостаточно памяти для Eclipse по умолчанию — и здесь майкрософт виноват?
                                              0
                                              а вы пользуетесь OpenJDK или Sun?
                                                0
                                                Майкрософт к этой проблеме аж ну никак не причастна, все претензии к разработчикам эклипса
                                              • НЛО прилетело и опубликовало эту надпись здесь
                                          +2
                                          Мораль — костыли должны быть костылями, а не постоянным решением. Не надо их оставлять в коде навечно. Рефакторинг — наше всё.
                                            –6
                                            Мне становится страшновато… Oracle стал еще большим монстром, возможно даже более влиятельным чем Google. Теперь у Oracle в конкурентах по СУБД только PostgreSQL, и его могут купить тоже.
                                              +3
                                              А как же MS SQL Server и IBM DB2? :)
                                                –5
                                                Я же сказал именно про конкурентов, а не вообще про СУБД =))
                                                  +3
                                                  Вот как раз MS SQL Server и IBM DB2 и являются конкурентами Oracle. В отличии от.
                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                  0
                                                  Не, не купят, ибо Linux не принадлежит какой-то одной компании.
                                                    +2
                                                    Спасибо, Кэп!
                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                  –1
                                                  Это печально…
                                                    –1
                                                    Интел, кстати, развлекался в свое время подобными вещами: определенные компиляторы создавали код привязанный к имени процессора, который на процессорах Интела выполнялся быстрее чем на других.
                                                      +1
                                                      Тут две большие разницы, как говорят в Одессе. Одно дело — Интел, умышленно изменяющая код компилятора, а другое дело — разработчики Eclipse, понадеявшиеся на авось.
                                                        +7
                                                        Как часто Sun продается Oracle?
                                                          +1
                                                          Я понимаю, что первый порыв — защищать Eclipse до последнего :)
                                                          Но костыль есть костыль, писавший вышеупомянутый коммент знал об этом, но ничего для исправления костыля за 3 года(!) не сделал. Не сделал и узнав, что Sun таки продалась Oracle.
                                                          Обижаться тут не на что, и оправдываться не стоит. Просто, думаю, пример этот станет хрестоматийным примером о том, как можно облажаться даже в самом серьёзном продукте.
                                                          Качество Eclipse я ни в коей мере не подвергаю сомнению, иначе бы она не была любимым инструментом разработки для огромной армии Java-кодеров.
                                                            +6
                                                            Я не считаю это костылем, просто другого способа отличить одну JVM от другой не было (а может быть и сейчас нет). Вина в данном случае скорее лежит на разработчиках SUN, не предусмотревших стандартного параметра для изменения размера MaxPermSize. Вероятность же того, что название JVM изменится была крайне невелика, однако иногда происходят и события с крайне малой вероятностью.
                                                              0
                                                              Да, простите, не прочитал. Ссылку ниже полностью. Видимо, действительно, вина лежит на разработчиках SUN. Плохо только, что за 3 года проблему так и не решили полноценно(если надо — с привлечением Sun), довольствуясь тем, что есть. Получается «Пока гром не грянет — мужик не перекрестится...».
                                                                +4
                                                                В том то и дело, что три года проблемы не было, SUN не меняла название своей JVM. Уверен, что если бы Oracle предупредила об изменении метаданных заранее, Eclipse-коммиттеры нашли бы способ решить данную проблемы.

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

                                                                З.Ы. «Проблема» решается на уровне файла конфигурации прописыванием одной строчки.
                                                                  0
                                                                  >Уверен, что если бы Oracle предупредила об изменении метаданных заранее, Eclipse-коммиттеры нашли бы способ решить данную проблемы.
                                                                  Вот это и есть корень зла :) Хотя наверное правильнее считать, что произошло роковое стечение обстоятельств. К счастью, менее критичное, чем, например, в Чернобыле.
                                                                    +1
                                                                    Мне вот интересно сколько пользователей Eclipse из-за данной ситуации откажутся от него в пользу другой IDE.
                                                                      0
                                                                      ерунда. я первым делом подумал на JRE, а не на среду разработки. сразу скачал свежий JRE и все стало нормально.
                                                                        0
                                                                        у меня на 21. Несколько программ глючить начало. Я даже не думал, что в эклипсе и другом софте косяк, пока на javalobby не прочитал.
                                                                          0
                                                                          Я вообще пропустил это обновление. Отпуск ^_^
                                                                    0
                                                                    >Я не считаю это костылем, просто другого способа отличить одну JVM от другой не было (а может быть и сейчас нет).

                                                                    А как насчет системных property, например, java.vendor? Не могу сказать, менялись ли они в упомянутом апдейте, но по-моему куда более правильно завязываться на стандартные свойства, чем на строку копирайта.
                                                                      0
                                                                      определять вендора надо на этапе работы нативного лаунчера (eclipse.exe в windows)
                                                                        0
                                                                        Ну и дергали бы метод перед запуском. Не очень эффективно, но надежно. Впрочем, об этом всем написано в посте и баге.
                                                                      0
                                                                      По моему, параметр -XX:MaxPermSize=xxx Появился довольно давно, ну года три точно есть в HotSpot…
                                                                        0
                                                                        В том то и дело, что параметры, начинающиеся на XX: — специфичны для SUN JVM. Соответственно, нужно как-то проверить, что у нас SUN JVM и мы имеем право подсунуть ей этот параметр.
                                                                0
                                                                может потому, что компиляторы интел лучше знаю как оптимизировать код под свои процессоры?
                                                                  0
                                                                  Нет. Оптимизатор проверяет имя производителя процессора и оптимизирует код только для интелов.
                                                                  www.agner.org/optimize/blog/read.php?i=49
                                                                +3
                                                                Всем хомякам, воющим про то, что Eclipse во всем виноват два вопроса:
                                                                1. Каким приложением уровня Eclipse можете похвастаться?
                                                                2. Читали ли вы вот это: njbartlett.name/2010/07/29/eclipse-java6u21-blame-game.html
                                                                  0
                                                                  Правильно, сначала добейся
                                                                  +4
                                                                  партизаны Sun ликуют )
                                                                    –2
                                                                    Ну как всегда, или хрен пополам или манда вдребезги
                                                                    Простите, не выдержал(
                                                                      +1
                                                                      Какой смысл писать об этой проблеме через несколько недель после того как она была исправлена? Еще и с таким желтым загловком не соответсвующем действительности.
                                                                        –4
                                                                        Заголовок взят из оригинала, причем уже изменен, чтобы не искажать реальность.

                                                                        Смысл писать о проблеме — у некоторых до сих пор что-то не работает.
                                                                          –1
                                                                          а вы на ник топикстартера посмотрите ;)

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

                                                                        Самое читаемое