Sådan fjerner du Oracles Java og installerer OpenJDK

12 kommentarer.  Hop til debatten
Sådan fjerner du Oracles Java og installerer OpenJDK
Illustration: Bigstock/vbacarin.
Nye licensbetingelser for Oracles Java 11 kræver penge, hvis du skal bruge det til produktion. Vi fjerner miljøet og erstatter med open source-udgaven OpenJDK.
11. oktober 2018 kl. 05:13
errorÆldre end 30 dage
Manglende links i teksten kan sandsynligvis findes i bunden af artiklen.

Java 11 er netop udgivet, og i den forbindelse har Oracle ændret licensvilkårene for firmaets distribution.

Det fik ligefrem den britiske udvikler Stephen Colebourne, der tidligere har deltaget i udviklingen af bl.a. api’et java.time, til at kalde de nye betingelser for en ‘fælde.’

»Java 11 er blevet udgivet. Det er en stor udgivelse, fordi den har langsigtet support (LTS). Men Oracle har også sat det op til at være en fælde, enten bevidst eller ved et uheld,« skrev han i et blogindlæg i sidste måned.

#

Live-interview og Q&A med Java-ekspert Christian Damsgaard

Version2 inviterer til live-videosession om Java.

Den 10. juni fra 13.00 - 13:45 dykker konsulent Christian Damsgaard og journalist på Version2 Tania Andersen pulsen ned i programmeringssproget Java - både nutid og fremtid, særligt indenfor enterprise. Det sker til en live interview-videosession, hvor du er inviteret til at lytte med og stille spørgsmål undervejs.

Læs mere og tilmeld dig her

Artiklen fortsætter efter annoncen

»I 23 år har udviklere hentet JDK (Java-distributionen) fra Oracle og brugt det gratis. Skriv 'JDK' i en søgemaskine, og det øverste link vil pege på en Oracle Java SE download-side. Men den søgning og det link er nu en fælde.«

Det skyldes at Oracles JDK, som websøgningen fører til, nu ikke er gratis at anvende.

Slut med gratis Oracle-Java

I de nye betingelser skriver Oracle:

»Du må ikke bruge programmerne (JDK’et, red.) til databehandling, forretningsmæssige, produktionsmæssige eller interne forretningsformål bortset fra udvikling, test, prototyper og demonstration af din applikation.«

Fælden, som Stephen Colebourne så det, bestod i følgende:

»Download Oracles JDK, fordi det er det, du altid har gjort, og det er, hvad websøgningen fortæller dig. Brug det i produktion, fordi du ikke var klar over, at licensen blev ændret. Få et ubehageligt telefonopkald fra Oracles licensafdeling, der kræver en masse penge.«

Men siden Stephen Colebournes blogindlæg blev publiceret, har Oracle nu indsat en advarsel med denne tekst, ved download af Oracle JDK:

Ved download af Oracle JDK 11 mødes brugerne nu af denne dialog.

»Vigtige ændringer i Oracle JDK 11-Licensen.«

»Med JDK 11 har Oracle opdateret licensvilkårene, som vi tilbyder Oracle JDK på. Den nye Oracle Technology Network Licensaftale for Oracle Java SE er væsentligt anderledes end de licenser, hvorefter tidligere versioner af JDK blev tilbudt. Læs de nye betingelser omhyggeligt, før du downloader og bruger dette produkt.«

»Oracle tilbyder også denne software under GPL-licensen på jdk.java.net/11.«

De nye licensregler har ingen betydning for de tidligere Oracle JDK’er, dvs. Java 10 og tidligere.

Ud med Oracles Java

I modsætning til Oracles JDK, udgives OpenJDK, der også fremstilles af Oracle, under open source-licensen GPL med Classpath-undtagelse. Det sidste betyder, at programmer der afvikles oven på JDK’et ikke ‘nedarver’ GPL-betingelserne. Man kan altså køre lukket kode og alle slags licenser oven på platformen.

Herunder prøver vi at se hvordan det går, når vi fjerner Oracles JDK’er til fordel for OpenJDK.

De programmer, vi vil prøve med, er vores eget-udviklede machine learning-system, der foreslår emneord til Version2’s artikler, samt det populære udviklingsværktøj Eclipse.

Vi var ikke i stand til at få eksisterende Eclipse-installationer opgraderet til Java 11 og OpenJDK. Men det er hurtigt og nemt at installere en ny udgave af programmet.

Vi fjerner Oracles JDK’er med Windows’ ‘Tilføj eller fjern programmer’-app.

På for eksempel Ubuntu-Linux, kan JDK’erne fjernes med kommandoen sudo apt-get remove (navn) - hvis de vel at mærke er installeret som pakker. Ellers må man fjerne dem manuelt.

Næste skridt er at downloade OpenJDK. På Ubuntu er det så nemt som at skrive sudo apt install openjdk-11-jdk i terminalen.

På Windows 10 downloades Open JDK til 64-bit systemer som en zip-fil. Den pakkes ud og placeres et passende sted. Jeg har lagt min i mappen C:\Program Files\Java.

Nu skal vi tilføje stien til Java i systemets Path-miljøvariabel, der specificerer, hvor exe-filer befinder sig.

Det gøres ved at navigere til Kontrolpanel > System og sikkerhed > System og klikke på ‘Avancerede systemindstillinger.’ Nu åbnes en dialog med overskriften ‘Egenskaber for system’.

Klik på knappen ‘Miljøvariabler…’ Find linjen med ‘Path’ i den øverste del af den nye dialog, der dukker frem. Klik på knappen ‘Rediger…’

Her tilføjes stien til OpenJDK's bin-mappe til Windows 'Path'-variabel.

I den nye dialog, klik på knappen ‘Ny´’ og skriv stien til JDK’ets bin-mappe. På min pc ser det sådan ud: ‘C:\Program Files\Java\openjdk-11_windows-x64_bin\jdk-11\bin‘.

Klik ‘OK’ i alle dialogerne og genstart Windows.

Download nu Eclipses installer-program. Det skulle nu gerne starte op uden problemer, og vi kan installere den Eclipse-smag, som vi foretrækker.

Desværre er den ikke helt i vinkel, da en irriterende dialog i Eclipse fortæller os, at ‘Polling news feeds has encountered a problem.’

Dialogen uddyber således: ‘An internal error occurred during: Polling news feeds. javax/xml/bind/JAXBContext’

Fejlen opstår også med Oracles JDK, så det er ikke OpenJDK, der er synderen. Fejlen skyldes, at JAXB-api’et er fjernet fra Java 11 tillige med andre Java-enterprise-moduler. Eclipse har åbenbart ikke testet med Java 11 endnu. De RSS-feeds, Eclipse henter, læses formentlig med JAXB-api’et.

Heldigvis er jeg ret ligeglad med nyheder inde i Eclipse, og funktionen kan slås fra med menuen Window > Preferences > General > News. Derefter fjernes fluebenet i krydsboksen ‘Enable automatic news polling.' Derefter virker Eclipse helt fint.

I terminalen

Efter at have opdateret Windows-Path’en, kan vi nu også bruge Java i alle mapper i terminalen. Vi åbner et terminalvindue og skriver:

  1. C:\Users\tan>java -version

Her kvitterer Java med:

  1. openjdk version "11" 2018-09-25
  2. OpenJDK Runtime Environment 18.9 (build 11+28)
  3. OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)

Vi tester også vores egenudviklede machine learning-algoritme, og det fungerer upåklageligt.

OpenJDK er ikke længere den eneste tilgængelige open source-Java på markedet. En anden udgave er AdoptOpenJDK, der har bl.a. IBM og Microsoft i ryggen, og som kan benyttes sammen med en alternativ VM, Eclipse OpenJ9.

12 kommentarer.  Hop til debatten
Debatten
Log ind for at deltage i debatten.
settingsDebatindstillinger
12
11. oktober 2018 kl. 21:16

Jeg er enig med Michael i, at JDK'en som udgangspunkt ikke bør distribueres med en applikation, og det uanset om den skal køre på en server eller en desktop.

Jeg tror at det er meningen, at udviklere fremover skal bruge jlink (https://docs.oracle.com/javase/9/tools/jlink.htm#JSWOR-GUID-CECAC52B-CFEE-46CB-8166-F17A8E9280E9) til at bygge deres egen skræddersyede JRE, fremfor at bruge en standard one-size-fits-all JRE fra Oracle.

11
11. oktober 2018 kl. 14:02

Bemærk dog at du ved at have de ekstra værktøjer på din server, også åbner for yderligere hacks. Hvis en fejl f.eks. tillader at en udfrakommende kan køre kommandoer (RCE) på din server, så vil det faktum at "javac" er til stede gøre at hackeren har flere muligheder.

JDK'et kommer også med en række ekstra værktøjer til f.eks. at manipulere med certifikatstores, så man kunne f.eks. forestille sig at hackeren (nemmere) kunne indsætte sit eget certifikat i en store -- hvor man normalt kun har værktøjer til at liste certifikater med.

Det går igen for alle værktøjer. Der er f.eks. ikke brug for ping på en produktionsserver, men ping er et værktøj en hacker kan bruge til at teste om andre servere eksisterer, eller til blot at vente i et script i nogle sekunder (Windows cmd har ikke nogen sleep, men en ping kan substituere for sleep).

10
11. oktober 2018 kl. 13:22

...at Oracles builds af OpenJDK ikke får sikkerhedsopdateringer efter få måneder, da man forventes at opgradere til JDK12,13,... efterhånden som de udgives?

Produktionsmiljøer er jo netop ikke altid interesserede i at skifte version hyppigt.

I OpenJDK er ikke længere den eneste tilgængelige open source-Java på markedet. En anden udgave er AdoptOpenJDK

Jeg havde forstået det som at OpenJDK er sourcen, og AdoptOpenJDK er en enhed, der bygger en release af OpenJDK, på samme måde som Oracle selv gør det. Bare at AdoptOpenJDKs licens er den gammel-kendte GPL med classpath-undtagelse, og at de vedligeholder deres releases med sikkerhedsopdateringer noget længere (med hjælp fra bl.a. RedHat).

8
11. oktober 2018 kl. 11:06

Nej, ingen erfaringer med Zulu, men jeg har svært ved at forestille mig, at den ikke fungerer. Zulu planlægger at tilbyde supporteret JDK/JRE 8 helt frem til udgangen af 2024, hvilket må siges at være et stykke tid.

Hvis man benytter RHEL/CentOS kan man man også vælge blot at benytte deres indbyggede OpenJDK 8, som vil blive hold i live frem til juni 2023.

6
11. oktober 2018 kl. 10:49

Azul Systems har et produkt, der hedder Zulu, der er beskrevet som "...a certified build of OpenJDK that is fully compliant with the Java SE standard. Zulu is 100% open source and freely downloadable."

Der kan desuden tilkøbes kommerciel support til Zulu.

Er der nogen her, der har erfaringer med Zulu?

Se https://www.azul.com/downloads/zulu/ (og bemærk at de tæller ned til hvornår sidste gratis Java 8-opdatering kommer).

5
11. oktober 2018 kl. 10:21

Og jeg synes faktisk det er en rigtig dårlig ide. :) Én som ikke kender Java, men kender begrebet Development Kit bliver hurtigt forvirret. Hvis der ikke rigtig er noget inkluderet til en udvikler så skal de kalde det runtime eller finde et andet begreb. Hvad hvis Oracle en dag tilføjer nogle gode tunge udviklingsværktøjer, så er de nød til at oprette en ny pakke kaldet JDK-extended. Præcis navngivning er vigtig, især inden for IT. :)

Jeg forstår faktisk heller ikke helt Java Download som altid har ligget her (her er det en ren runtime så vidt jeg ved)

https://www.java.com/en/download/

Her står der version 8, kører den også Java 11 kode?

4
11. oktober 2018 kl. 10:02

Stig skrev: "synes bare det virker mærkeligt at installere et Development Kit på en produktionsserver"

Det synes jeg nu ikke er så mærkeligt. Der er jo ikke tale om et stort IDE; det er blot en lille kommandolinje-compiler og lidt ekstra, der ikke fylder alverden. JDK indeholder ikke noget, der forbruger RAM, lytter på porte eller lign.

For mig at se er det en udmærket simplificering.

3
11. oktober 2018 kl. 09:56

Nej jeg kan heller ikke finde den, synes bare det virker mærkeligt at installere et Development Kit på en produktionsserver.

2
11. oktober 2018 kl. 09:50

Så vidt jeg kan se, er der ikke længere nogen sondring mellem JDK or JRE fra og med generation 11.

Men erfaring er, at OpenJDK fungerer fint, så der er ikke noget teknisk problem. Problemet er, at mange softwareprodukter tradtionelt har krævet Oracle's Java og/eller kun har været testet med Oracle's Java; dét vil nok ændre sig nu, hvilket er fint.

1
11. oktober 2018 kl. 09:03

Hvorfor installerer man ikke bare JRE, den er vel gratis?