Как на практике работает поддержка OpenJDK?

9

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

Какая ветвь получает исправления первыми, и есть ли у Oracle привычка делать исправления, которые никогда не попадают в OpenJDK?

Мутон
источник

Ответы:

6

Это подробно объясняется на странице OpenJDK: Предложение по обновлению проекта JDK 7 : вопросы и ответы

Будет ли этот проект служить основой для обновлений Oracle JDK 7 Update?

Да.

Цитата из поста Джо Дарси в блоге FOSDEM на OpenJDK 6 :

В частности, не будет такой же дихотомии между базой кода OpenJDK 7 и базой 7 кода обновления, как между OpenJDK 6 и последовательностью 6 обновлений ...

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

Что касается исправлений безопасности, картина выглядит противоположной, то есть я бы предпочел, чтобы они сначала шли в релизы Oracle, а затем (опять же, с минимальной задержкой) в OpenJDK:

Получит ли 7-й проект обновления исправления безопасности от Oracle?

Да.

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

Когда этот проект получит исправления безопасности от Oracle?

Расписание для Oracle Java SE Critical Patch Обновления публично доступны .

Исправления безопасности для исходного кода этого проекта будут доступны в проекте обновления JDK 7 примерно в то же время, когда они были выпущены в продуктах от Oracle ...


Чтобы лучше понять причины, по которым, по-видимому, так много усилий уделяется синхронизации Oracle и Open JDK, имеет смысл взглянуть на решение Oracle по предыдущему проекту: переход к OpenJDK в качестве официальной ссылочной реализации Java SE 7 :

... Oracle и другие члены группы экспертов по Java SE 7 вносят последние изменения в спецификацию Java SE 7 ( JSR 336 ). Будучи ведущим специалистом по спецификации, Oracle отвечает за предоставление эталонной реализации Java SE 7 ... мы собираемся предоставить эталонную реализацию, полностью основанную на открытом исходном коде OpenJDK, и сделать ее доступной по лицензии с открытым исходным кодом GPL. ,

Роль эталонной реализации (RI) должна использоваться в качестве золотого стандарта для всех реализаций Java. Для того чтобы реализация была сертифицирована как совместимая с Java SE, разработчик должен пройти большое количество тестов на совместимость - комплект совместимости технологий (TCK). Кроме того, реализации могут сравниваться с RI в качестве дополнительной проверки совместимости. По сути, если ваша реализация сертифицирована на то же поведение, что и RI, она совместима с Java. Для получения дополнительной информации по этой теме обратитесь к FAQ JCP .

Исторически Sun всегда использовала Sun JDK в качестве RI и делала его доступным по лицензии двоичного кода (BCL). Это было очень удобно для Sun, поскольку это означало, что реализация его продукта была совместима по определению. Однако это также сбивало с толку, поскольку Sun JDK содержал довольно много функций, которые не были частью стандарта, таких как плагин Java. Кроме того, продолжение этой практики усложнит работу разработчиков с открытым исходным кодом, поскольку они не смогут изучать и оценивать официальный исходный код RI. (Исходный код для Oracle JDK немного отличается от OpenJDK - то, к чему мы будем обращаться в будущем).

Имея это в виду, Oracle будет:

  • Создайте двоичные файлы RI только на основе кода OpenJDK.
  • Сделайте двоичные файлы RI доступными в соответствии с BCL (обычная лицензия Java) для коммерческих разработчиков и GPLv2 (за исключением Classpath) для разработчиков с открытым исходным кодом.
  • Продолжайте предоставлять TCK коммерческим лицензиатам, но также обновляйте лицензию OCTLA, чтобы она охватывала Java SE 7. Последняя позволяет разработчикам с открытым исходным кодом бесплатно получать доступ к TCK для проверки своих реализаций ...

Вышеупомянутое решение означает много усилий для внедрения в код Open JDK, для выпуска официально проверенного, протестированного, лицензированного и совместимого кода. Если вы добавите, что он должен быть выпущен в соответствии с согласованным общедоступным графиком, становится очевидным, что такие усилия будут примерно такими же, как это было ранее в «традиционных» выпусках Sun / Oracle Java.

Это делает разумным поддерживать как можно более близкими базы кода Open и Oracle JDK: в противном случае дублирование разработки и исправления, делающие оба проекта совместимыми с TCK, могут стать чрезмерно утомительными.

Похоже, что решение использовать Open JDK в качестве эталонной реализации сделало в интересах Oracle поддерживать максимально возможную близость их JDK к синхронизации с Open JDK - вплоть до выпуска JDK 7.

Чтобы понять, что может мотивировать Oracle на дальнейшую синхронизацию, в выпусках обновлений JDK 7 лучше взглянуть на проект Open JDK 8 , цель которого описана почти так же, как в Open JDK 7:

Целью этого проекта является создание эталонной реализации платформы Java SE 8 с открытым исходным кодом, которая будет определена JSR 337 в процессе сообщества Java .

По тем же соображениям, которые были объяснены выше в отношении эталонной реализации JDK 7, опять же, в интересах Oracle поддерживать синхронизацию обновлений обоих JDK в максимально возможной степени.

Чем больше различий будет между этими JDK, тем сложнее будет Oracle выпустить Java SE 8 из-за дублирования усилий, необходимых для приведения их собственного выпуска в соответствие с TCK. Верно и обратное, то есть чем ближе будут оба проекта к настоящему времени, тем меньше усилий потребуется для выпуска обеих реализаций Java 8.


Случалось ли вам когда-нибудь поддерживать две слегка отличающиеся друг от друга версии одного и того же программного обеспечения, ориентированные на разных клиентов? Если да, вы, вероятно, помните желание держать их обоих как можно ближе, и неудобства, которые вы испытывали, когда они были не синхронизированы. С Open и Oracle JDK это очень похоже, только в большем масштабе.

комар
источник
Будет ли проект обновлений JDK 7 получать исправления от Oracle после марта 2015 года, т.е. после окончания бесплатных обновлений для Java 7 от Oracle?
Восстановите Монику - М. Шредер
@ MartinSchröder трудно сказать, не читая мысли Oracle. Это, вероятно, во многом зависит от того, будет ли Java 8 официальной / поддерживаемой версией к тому времени
gnat
4

Почти все исправления ошибок идут непосредственно через проект OpenJDK, а затем в нисходящих поставщиков JVM (Oracle, Azul, RedHat и т. Д.).

Исключением является то, что некоторые исправления безопасности исправляются в последующих версиях (в частности, в Oracle), прежде чем тихо перенести их обратно в OpenJDK. Это позволяет поставщикам обновлять большую часть мира с помощью исправления безопасности, прежде чем публиковать информацию об уязвимости в проекте с открытым исходным кодом.

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

НТН

Мартейн Вербург
источник