Różnica między OpenJDK i Adoptium / AdoptOpenJDK

183

Ze względu na ostatnią aktualizację zasad dotyczących planu pomocy technicznej dla Oracle Java SE (w szczególności koniec darmowych aktualizacji wydania Oracle po marcu 2019 r.), Szukałem alternatyw dla Oracle Java. Odkryłem, że OpenJDK jest alternatywą typu open source. I znalazłem AdoptOpenJDK , teraz znany jako Adoptium, który jest wstępnie skompilowanym plikiem binarnym . To zagadkowe.

Jaka jest różnica między OpenJDK a Adoptium / AdoptOpenJDK?

Michaił Kholodkow
źródło
Aktualizacja: AdoptOpenJDK zmienił nazwę na Adoptium w ramach przeniesienia do Fundacji Eclipse .
Basil Bourque

Odpowiedzi:

272

W skrócie:

  • OpenJDK ma wiele znaczeń i może odnosić się do:
    • darmowa i otwarta implementacja platformy Java, Standard Edition (Java SE)
    • repozytorium open source - kod źródłowy Java znany jako projekt OpenJDK
    • gotowe pliki binarne OpenJDK obsługiwane przez Oracle
    • gotowe pliki binarne OpenJDK utrzymywane przez społeczność OpenJDK
  • AdoptOpenJDK - gotowe pliki binarne OpenJDK obsługiwane przez społeczność ( licencja open source )

Wyjaśnienie:

Prebuilt OpenJDK (lub dystrybucja) - pliki binarne, zbudowane z http://hg.openjdk.java.net/ , dostarczane jako archiwum lub instalator, oferowane na różne platformy, z możliwą umową wsparcia.

OpenJDK, repozytorium źródłowe (zwane także projektem OpenJDK ) - jest repozytorium open source opartym na Mercurial , hostowanym pod adresem http://hg.openjdk.java.net . Kod źródłowy Java. Zdecydowana większość funkcji Java (od maszyny wirtualnej i podstawowych bibliotek po kompilator) opiera się wyłącznie na tym repozytorium źródłowym. Oracle ma alternatywny rozwidlenie tego.

OpenJDK, dystrybucja (patrz lista dostawców poniżej) - jest bezpłatna jak w piwie i jakby wolna jak w mowie , ale nie możesz dzwonić do Oracle, jeśli masz z tym problemy. Nie ma umowy serwisowej. Ponadto Oracle będzie wydawać aktualizacje do dowolnej wersji OpenJDK (dystrybucyjnej) tylko wtedy, gdy ta wersja jest najnowszą wersją Java, w tym wydania LTS (długoterminowe wsparcie techniczne). W dniu, w którym Oracle wypuści OpenJDK (dystrybucja) w wersji 12.0, nawet jeśli wystąpi problem z bezpieczeństwem w OpenJDK (dystrybucja) w wersji 11.0, Oracle nie wyda aktualizacji do 11.0. Utrzymywane wyłącznie przez Oracle.

Niektóre projekty OpenJDK - takie jak OpenJDK 8 i OpenJDK 11 - są obsługiwane przez społeczność OpenJDK i zapewniają wydania dla niektórych wersji OpenJDK dla niektórych platform. Członkowie społeczności wzięli na siebie odpowiedzialność za wydanie poprawek dla luk w zabezpieczeniach w tych wersjach OpenJDK.

AdoptOpenJDK, dystrybucja jest bardzo podobna do dystrybucji Oracle OpenJDK (w tym, że jest darmowa i jest kompilacją utworzoną przez kompilację źródeł z repozytorium źródeł OpenJDK). AdoptOpenJDK jako jednostka nie będzie backportować łatek, tj. Nie będzie „rozwidlenia / wersji” AdoptOpenJDK, która różni się istotnie od upstream (z wyjątkiem niektórych łatek skryptów kompilacji dla rzeczy takich jak obsługa Win32). Oznacza to, że jeśli członkowie społeczności (Oracle lub inni, ale nie AdoptOpenJDK jako jednostka) zgłaszają poprawki bezpieczeństwa do aktualizacji wersji OpenJDK LTS, wówczas AdoptOpenJDK dostarczy kompilacje dla nich. Utrzymywane przez społeczność OpenJDK.

OracleJDK - to kolejna dystrybucja. Począwszy od JDK12 nie będzie bezpłatnej wersji OracleJDK. Oferta dystrybucyjna Oracle JDK jest przeznaczona do wsparcia komercyjnego. Płacisz za to, ale wtedy możesz polegać na Oracle w zakresie wsparcia. W przeciwieństwie do oferty Oracle OpenJDK, OracleJDK zapewnia dłuższą obsługę wersji LTS. Jako programista możesz uzyskać bezpłatną licencję do użytku osobistego / programistycznego tylko dla tego konkretnego JDK, ale jest to głównie czerwony śledź, ponieważ „tylko plik binarny” jest zasadniczo taki sam jak plik binarny OpenJDK. Wydaje mi się, że oznacza to, że można pobrać wersje LTS JDK z poprawkami bezpieczeństwa ze stron internetowych Oracle, o ile obiecasz nie używać ich w celach komercyjnych.

Uwaga . Najlepiej byłoby nazwać kompilacje OpenJDK firmy Oracle „kompilacjami Oracle OpenJDK”.

Donald Smith, menedżer produktu Java w Oracle, pisze :

Idealnie byłoby po prostu nazywać wszystkie kompilacje Oracle JDK jako „Oracle JDK” na licencji GPL lub komercyjnej, w zależności od sytuacji. Jednak ze względów historycznych, chociaż istnieją niewielkie pozostałe różnice, będziemy nazywać je oddzielnie jako kompilacje Oracle OpenJDK i Oracle JDK.


Dostawcy i porównanie OpenJDK

-------------------------------------------------- --------------------------------------
| Dostawca | Darmowe kompilacje | Darmowy plik binarny | Rozszerzony | Komercyjne | Pozwalające |
| | ze źródła | Dystrybucje | Aktualizacje | Wsparcie | Licencja |
| ------------------------------------------------- ------------------------------------- |
| AdoptOpenJDK | Tak | Tak | Tak | Nie | Tak |
| Amazon - Corretto | Tak | Tak | Tak | Nie | Tak |
| Azul Zulu | Nie | Tak | Tak | Tak | Tak |
| BellSoft Liberica | Nie | Tak | Tak | Tak | Tak |
| IBM | Nie | Nie | Tak | Tak | Tak |
| jClarity | Nie | Nie | Tak | Tak | Tak |
| OpenJDK | Tak | Tak | Tak | Nie | Tak |
| Oracle JDK | Nie | Tak | Nie ** | Tak | Nie |
| Oracle OpenJDK | Tak | Tak | Nie | Nie | Tak |
| ojdkbuild | Tak | Tak | Nie | Nie | Tak |
| RedHat | Tak | Tak | Tak | Tak | Tak |
| SapMachine | Tak | Tak | Tak | Tak | Tak |
-------------------------------------------------- --------------------------------------

Darmowe kompilacje ze źródła - kod źródłowy dystrybucji jest publicznie dostępny i można złożyć własną kompilację

Darmowe dystrybucje binarne - pliki binarne dystrybucji są publicznie dostępne do pobrania i użytkowania

Rozszerzone aktualizacje - aka LTS (wsparcie długoterminowe) - publiczne aktualizacje wykraczające poza 6-miesięczny cykl życia wydania

Wsparcie komercyjne - niektórzy dostawcy oferują rozszerzone aktualizacje i wsparcie dla klientów płacących, np. Oracle JDK ( szczegóły pomocy )

Licencja zezwalająca - licencja dystrybucyjna nie zapewnia ochrony, np. Apache 2.0


Której dystrybucji Java powinienem użyć?

W czasach Sun / Oracle to zwykle Sun / Oracle produkowało własne dystrybucje JDK na podstawie źródeł OpenJDK. Niedawno firma Oracle zdecydowała się tworzyć własne zastrzeżone kompilacje tylko z dołączonym wsparciem komercyjnym. Łaskawie publikują również kompilacje OpenJDK na swojej stronie https://jdk.java.net/ .

Zaczynając od JDK 11, następuje przejście od nastawienia jednego dostawcy (Oracle) do sposobu myślenia, w którym wybierasz dostawcę, który zapewnia dystrybucję produktu, na warunkach, które lubisz: platformy, dla których budują, częstotliwość i terminowość wydań , struktura wsparcia itp. Jeśli nie ufasz żadnemu z istniejących dostawców, możesz nawet samodzielnie zbudować OpenJDK.

Każda kompilacja OpenJDK jest zwykle tworzona z tego samego oryginalnego repozytorium źródłowego (OpenJDK „projekt”). Jednak każda kompilacja jest dość wyjątkowa - bezpłatna lub komercyjna, markowa lub niemarkowa, czysta lub w pakiecie (np. BellSoft Liberica JDK oferuje pakiet JavaFX, który został usunięty z kompilacji Oracle począwszy od JDK 11).

Jeśli żadne środowisko (np. Linux) i / lub wymagania licencyjne nie definiują konkretnej dystrybucji i jeśli chcesz najbardziej standardowej kompilacji JDK, prawdopodobnie najlepszą opcją jest użycie OpenJDK firmy Oracle lub AdoptOpenJDK.


Dodatkowe informacje

Czas wyjść poza JDK Oracle autorstwa Stephena Colebourne'a

Java jest nadal bezpłatna od społeczności Java Champions (opublikowana 17 września 2018 r.)

Java jest nadal bezpłatna w wersji 2.0.0 autorstwa społeczności Java Champions (opublikowano 3 marca 2019 r.)

Aleksey Shipilev o aktualizacjach JDK Wywiad przeprowadzony przez Opsian (opublikowany 27 czerwca 2019)

Michaił Kholodkow
źródło
8
Możesz dodać wzmiankę, że inni dostawcy zapewniają implementacje Java oparte na OpenJDK, takie jak produkty Zulu i Zing firmy Azul Systems . Kolejnym jest projekt Eclipse OpenJ9 .
Basil Bourque,
2
@DmitriyPopov Jest przyzwolenie - github.com/AdoptOpenJDK/openjdk-build/blob/master/LICENSE
Mikhail
1
@MikhailKholodkov Niepoprawne informacje o licencjonowaniu Apache. Twoje łącze do AdoptOpenJDK przy użyciu Apache License 2.0 ma zastosowanie tylko do skryptów kompilacji, których są autorami, aby pomóc w tworzeniu plików binarnych. Pliki binarne są budowane z kodu źródłowego uzyskanego z projektu OpenJDK przy użyciu licencji GPL z łączeniem licencji wyjątku.
Basil Bourque
2
@GarrettWilson AdoptOpenJDK robi tylko 2 rzeczy: (a) Buduje pliki binarne i instalatory przy użyciu kodu źródłowego dostarczanego przez OpenJDK oraz (b) Uruchamia testy na tych plikach binarnych. AdoptOpenJDK nie prowadzi repozytorium kodu źródłowego do implementacji platformy Java. A więc: OpenJDK to tylko kod źródłowy, AdoptOpenJDK to tylko pliki binarne + instalatory. AdoptOpenJDK autorzy kodu tylko dla ich narzędzi do budowania i zestawów testów. Oprócz AdoptOpenJDK kilka innych firm również dostarcza kompilacje oparte na kodzie źródłowym dostarczonym przez projekt OpenJDK: Azul Systems, Oracle, BellSoft, Amazon AWS, RedHat / IBM, SAP i inne.
Basil Bourque
1
@GarretWilson Powinienem dodać, że AdoptOpenJDK robi trzecią rzecz: (c) Tworzy i utrzymuje narzędzia wspierające budowanie i testowanie, o którym mowa w moim poprzednim komentarzu.
Basil Bourque
63

Aktualizacja: AdoptOpenJDK zmienił nazwę na Adoptium w ramach przeniesienia do Fundacji Eclipse .


OpenJDK ➙ kod źródłowy
Adoptium / AdoptOpenJDK ➙ buduje

Różnica między OpenJDK i AdoptOpenJDK

Pierwsza dostarcza kod źródłowy , druga dostarcza kompilacje tego kodu źródłowego.

Kilku dostawców Java i OpenJDK

Adoptium of the Eclipse Foundation , wcześniej znanej jako AdoptOpenJDK , jest tylko jednym z kilku dostawców dystrybuujących implementacje platformy Java. Obejmują one:

  • Fundacja Eclipse (Adoptium / AdoptOpenJDK)
  • Azul Systems
  • Wyrocznia
  • Red Hat / IBM
  • BellSoft
  • SOK ROŚLINNY
  • Amazon AWS
  • … i więcej

Zapoznaj się z moim schematem blokowym, który pomoże Ci wybrać dostawcę do wdrożenia platformy Java. Kliknij / dotknij, aby powiększyć.

Schemat blokowy ułatwiający wybór dostawcy implementacji Java 11

Inny zasób: ta macierz porównawcza firmy Azul Systems jest przydatna i wydaje mi się prawdziwa i uczciwa.

Oto lista uwag i motywacji, które należy wziąć pod uwagę przy wyborze dostawcy i wdrożeniu.

Motywacje przy wyborze dostawcy oprogramowania Java

Niektórzy dostawcy oferują wybór technologii JIT .

Diagram przedstawiający historię łączenia HotSpot i JRockit oraz OpenJ9 dostępne w AdoptOpenJDK

Aby dowiedzieć się więcej o tym ekosystemie Java, przeczytaj artykuł Java jest nadal bezpłatna

Basil Bourque
źródło
1
Jeśli „OpenJDK” odnosi się do źródła, to jaka jest różnica między hub.docker.com/_/openjdk i hub.docker.com/_/adoptopenjdk ?
bcoughlan
1
@bcoughlan Musiałbyś zapytać wydawcę tych dwóch produktów: Docker, Inc. Twoje połączone strony internetowe twierdzą, że druga jest utrzymywana przez projekt AdoptOpenJDK, podczas gdy pierwsza jest utrzymywana przez „społeczność Docker”. Pierwsza z nich wprowadza w błąd w używaniu logo i nazewnictwie, ponieważ może sprawiać wrażenie, że stworzył je projekt OpenJDK, a tak nie jest. Pierwszy może nawet naruszać punkt # 2 zawiadomienia o znaku towarowym wydanym przez OpenJDK , ale nie jestem prawnikiem.
Basil Bourque
1
@SanderVerhagen Czy możesz podać łącze do tej strony pobierania w witrynie OpenJDK? Nie znalazłem takiej oferty. Znajduję łącze do plików binarnych Oracle OpenJDK JDK dla systemów Windows, macOS i Linux w innej witrynie internetowej: jdk.java.net . Ta witryna i jej binarne pliki do pobrania są udostępniane społeczności przez firmę Oracle, a nie przez projekt OpenJDK. Jak podaje strona główna : Kompilacje Java Development Kit firmy Oracle . Pokazuję ten produkt jako drugą bańkę w niebieskiej beczce mojego schematu blokowego, w prawym górnym rogu.
Basil Bourque
1
@SanderVerhagen Twój link prowadzi do innej strony internetowej , jak podejrzewałem, poza OpenJDK . Witryna jdk.java.net/14 nie jest częścią witryny internetowej OpenJDK ani nie jest częścią projektu OpenJDK. Innymi słowy, openjdk.java.net to nie jdk.java.net . Ponownie spójrz na dwa bąbelki na górze niebieskiej beczki na moim schemacie blokowym. Produkt Oracle w lewym górnym rogu to ich produkt komercyjny. Produkt Oracle w prawym górnym rogu to jego bezpłatna wersja na licencji GPL - Twoje łącze prowadzi do tego konkretnego produktu.
Basil Bourque
1
@SanderVerhagen Podejrzewam, że jesteś zdezorientowany nazewnictwem produktu. Słowo „Java” jest znakiem towarowym firmy Oracle i może być używane tylko za jej zgodą. Dlatego większość sprzedawców nie używa tego znaku towarowego. Zamiast tego większość dostawców używa w nazewnictwie terminu „OpenJDK” zamiast „Java”. Ci dostawcy tworzą swoje kompilacje z kodu źródłowego uzyskanego z projektu OpenJDK . Projekt OpenJDK zapewnia tylko kod źródłowy , a nie kompilacje, a nie instalatory. W przypadku kompilacji / instalatora musisz stworzyć własny lub uzyskać go od dostawcy. Sugeruję przeczytanie Java Is Still Free .
Basil Bourque