Java
Java je objektovo orientovany programovaci jazyk vychadzajuci z C a C++. Zdrojove programy sa nekompiluju do strojoveho kodu, ale do medzistupna, tzv. Java bytecode, ktory je nezavisly od konkretnej platformy. Tento bytecode moze bezat na akejkolvek Java virtual machine (JVM) bez ohladu na zakladnu pocitacovu architekturu. Inymi slovami, skompilovany Java bytecode moze bezat na vsetkych platformach, ktore podporuju Java, bez potreby re-kompilacie. Vdaka tejto prenositelnosti sa programy pouzivaju na roznych Java software platforms.
- Java Card pre aplikacia v roznych smart cards (platobne karty), resp. small memory devices.
- Java ME (Micro Edition) pre rozne mobilne zariadenia (mobilne telefony, TV STB). Formerly known as Java 2 Platform, Micro Edition (J2ME).
- Java SE (Standard Edition) na vseobecne pouzitie pre PC, servery a podobne. Formerly known as Java 2 Platform, Standard Edition (J2SE).
- Jakarta EE (Enterprise Edition) rozsirenie Java SE pre enterprise sektor (rozsiahle podnikove systemy). Formerly known as Java Platform, Enterprise Edition (Java EE) and Java 2 Platform, Enterprise Edition (J2EE).
Dalej budeme uvazovat vylucne uz len Java SE. Firma Oracle je aktualnym vlastnikom implementacie Java SE platform (odkupena v roku 2010 od Sun Microsystems). Tato implementacia od Oracle bola rozdelena do dvoch distribucii (platne pre Java SE 8 a starsie):
- Java Runtime Environment (JRE) obsahuje casti platformy Java SE potrebne pre spustenie programov Java (Java Virtual Machine, Java standard library a pod.) a je urcena pre koncovych uzivatelov.
- Java Development Kit (JDK) urcena pre vyvojarov softveru a obsahuje rozne vyvojove nastroje ako Java kompilator, Jar, Javadoc a debugger.
Java kompilator (sucast JDK) kompiluje zdrojovy kod Javy do Java bytecode (prechodny medzistupen pre JVM, nezavisly od platformy). JRE (runtime prostredie Javy) doplnuje Java bytecode o JIT (Just In Time) kompilator, ktory preklada prechodny Java bytecode do nativnych instrukcii procesora (konkretna platforma) priamo za behu programu, t.j. spusta Java bytecode ako nativnu aplikaciu.
Dnes v modernom OpenJDK (vid nizsie) sa uz samostatne JRE prakticky nedistribuuje. Od Java SE 9 (released 2017-09) sa odstranili samostatne distribucie JRE a balik sa zjednotil do JDK, ktory obsahuje uz vsetko potrebne od vyvoja az po spustanie. Stale vsak existuje moznost vytvorit si vlastne custom runtime image pomocou nastroja jlink(1). Aktualne, po natlaku uzivatelov, niektore Java builds (vid nizsie), okrem zjednoteneho JDK, distribuuju aj oddelene JRE. Pre rozne minimalne distribucie (kontajnery) ma samostatny JRE stale vyznam.
OpenJDK je open source implementacia Java Platform, Standard Edition (Java SE), ktora vznikla v case, ked Sun Microsystems uvolnil velku cast zdrojoveho kodu Javy pod GPL licenciou (2006 – 2007, este pred odkupenim Oracle). Dnes je OpenJDK oficialna open source implementacia Java SE. Vacsinu vyvoja zdrojoveho kodu zastresuje Oracle, ale prispievaju aj ini (RedHat, Amzaon, Microsoft a dalsi). Prakticky vsetky Java builds vychadzaju prave z OpenJDK, vratane samotneho Oracle OpenJDK. Rozdiely medzi jednotlivymi OpenJDK builds su len v licenciach, certifikaciach, dlzke podpory a podobne, ale funkcne su prakticky rovnake. Inymi slovami, OpenJDK je upstream pre vsetky Java builds.
Oracle na Jave "demonstruje krasu" komercneho licencovania. Z tych istych zdrojovych kodov OpenJDK (open source) vytvara dva builds:
- Oracle OpenJDK - open source (upstream) build sice mozno pouzivat aj na komercne ucely, ale s umyselne vyrazne kratsim casom podpory (zvycajne 6 mesiacov). Nie je moznost stiahnut samostatne JRE, len spolocny JDK build.
- Oracle Java SE - commercial build (non open source license) s LTS podporou (zvycajne 5 rokov) a moznostou pouzitia na komercne ucely. Distribuuje len spolocny JDK.
NOTE Pre starsiu Java 8 (komercna licencia s podporou do 2030-12, nemoznost bezplatneho pouzitia na komercne ucely) ponuka samostatny JDK aj samostatny JRE build (pre vysie verzie uz len spolocny JDK build).
Priklad dalsich (non Oracle) OpenJDK builds:
- Red Hat build of OpenJDK ponuka builds pre Linux, MacOS a Windows, ponuka zjednoteny JDK aj samostatny JRE.
- Microsoft Build of OpenJDK ponuka builds pre Linux, MacOS a Windows, ponuka len spolocny JDK.
- Eclipse Adoptium Temurin dnes vseobecne odporucany vendor neutral build of OpenJDK. Eclipse Temurin je relativne nova distribucia OpenJDK od komunity Eclipse Adoptium (nastupca AdoptOpenJDK). Tato working group sa sformovala v 2021-03 a medzi zakladajucimi clenmi boli, okrem ineho, aj vyssie spomenute spolocnosti Red Hat a Microsoft. Odporuca sa pre bezneho uzivatela aj pre komercne pouzitie. Ponuka zjednoteny JDK aj samostatny JRE. The name for the project, Temurin, is an anagram of the word runtime.
Java version history (see also Eclipse Temurin release roadmap):
- Java SE 7 (1.7) (released 2011-07) OpenJDK is the official reference implementation of Java SE.
- Java SE 8 (1.8) LTS (released 2014-03) bola svojho casu najpouzivanejsia verzia Javy na svete. Velmi popularna a rozsirena. Tato verzia (Oracle build) bola udrziavana do 2019-04. Oracle deklaruje komercnu podporu az do 2030 roku (open source Temurin takisto az do 2030-12). Open source verzia OpenJDK 8 bola technicky velmi podobna, ale neobsahovala niektore proprietarne casti Oracle JDK a zaroven mala kratsiu oficialnu podporu.
- Java SE 9 (1.9) (released 2017-09) zjednotenie JRE a JDK do jedneho JDK balika (modularization of the JDK under Project Jigsaw). Moznost vytvorenia vlastneho JRE z JDK.
- Java SE 11 LTS (released 2018-09) a obdobie vyraznych zmien. Oracle JDK uz nie je zadarmo pre produkcne pouzitie. Firmy si museli kupit komercnu podporu, co neskor sposobilo masivny prechod a vznik roznych alternativnych builds (Adoptium, Amazon, IBM, Microsoft, RedHat). Okrem toho, Oracle vyrazne skratil podporu len na 6 mesiacov. Po Java SE 11 LTS prakticky identicky zdrojovy kod pre vsetky rozne OpenJDK builds, rozdiel je hlavne v podpore a distribucii. Oracle dalej "provokuje" roznymi zmenami, co prehlbuje odklon uzivatelov od Oracle JDK builds. Eclipse Temurin support until 2027-10.
- Java SE 17 LTS (released 2021-09) Eclipse Temurin support until 2027-10
- Java SE 21 LTS (released 2023-09) Eclipse Temurin support until 2029-12
- Java SE 25 LTS (released 2025-09) Eclipse Temurin support until 2031-09
- Java SE 26 (released 2026-03) latest release, non LTS support s kratkodobou (6 mesiacov) podporov
Summarum: Pre cloveka, ktory v Jave nevyvija, a len sem tam potrebuje spustit (pripadne prekompilovat) nejaky Java program, je to znacny chaos.
Fedora
Fedora/RHEL ponuka OpenJDK (an open source implementation of the Java Platform, Standard Edition) vo viacerych verziach.
Verzie OpenJDK (2026-03): LTS versions Fedora 43: 21, 25 RHEL 9: 1.8.0, 11, 17, 21, 25 Latest versions Fedora 43: 24, 26 RHEL 9: 21, 26
java-<ver>-openjdk-headless |
java-<ver>-openjdk |
java-<ver>-openjdk-devel |
java-<ver>-openjdk-jmods
|
|---|---|---|---|
| Headless runtime environment (without audio and video support) Minimum core of JVM, java
|
Runtime environment (GUI runtime) Contains only graphics lib, depend on core headless subpackage
|
Development environment (tools)jar, javac, jlink, jmod etc.Depend of previous 2 subpackages |
JMods for OpenJDK jmods/*.jmod files Depend of previous 3 subpackages |
Other subpackages, like java-<ver>-openjdk-javadoc or java-<ver>-openjdk-portable are not important for normal work.
| |||
# Installing of Java OpenJDK (development and runtime environment) on Fedora 43 (2026-03) $ sudo dnf install java-devel # orjavafor runtime environment only Package Arch Version Repository Size Installing: java-25-openjdk-devel x86_64 1:25.0.2.0.10-3.fc43 updates 11.6 MiB Installing dependencies: java-25-openjdk x86_64 1:25.0.2.0.10-3.fc43 updates 960.2 KiB # only GUI runtime java-25-openjdk-crypto-adapter x86_64 1:25.0.2.0.10-3.fc43 updates 504.5 KiB java-25-openjdk-headless x86_64 1:25.0.2.0.10-3.fc43 updates 236.5 MiB # core runtime NOTE Instead of package namejava-develcan be used namejava-25-openjdk-develor 6 other names of the same package,
see# dnf repoquery --provides java-25-openjdk-devel$ java --version openjdk 25.0.2 2026-01-20 OpenJDK Runtime Environment (Red_Hat-25.0.2.0.10-2) (build 25.0.2+10) OpenJDK 64-Bit Server VM (Red_Hat-25.0.2.0.10-2) (build 25.0.2+10, mixed mode, sharing)
V pripade instalacie viacerych verzii je prepinanie medzi jednotlivymi verziami standardne cez alternatives(8)rpm.
$ sudo alternatives --config java # andjavacfor development There are 3 programs which provide 'java'. Selection Command ----------------------------------------------- 1 /usr/lib/jvm/java-21-openjdk/bin/java *+ 2 /usr/lib/jvm/java-25-openjdk/bin/java 3 /usr/lib/jvm/java-8-temurin-jdk/bin/java POZOR V pripade instalacie viacerych verzii aj pre development environment (javac) je prepinanie medzi verziami nezavisle od prepinania verzii samotneho runtime environment(java).
Mnoho Java aplikacii podporuje pouzivanie environment variable JAVA_HOME ako sposob urcenie, ktore JDK (ktora verzia) sa ma pouzivat na spustenie aplikacie. Samotny prikaz java nepouziva JAVA_HOME.
Od Fedora 42 (released 2025-04) boli baliky java-1.8.0-openjdk, java-11-openjdk a java-17-openjdk vyhlasene ako zastarale a prestali sa dalej distribuovat. V pripade potreby instalacie starsich verzii Java sa oficialne odporuca instalacia z Eclipse Adoptium repositories, see also rpm or rpm/fedora (or over Web GUI).
$ dnf repoquery --repo adoptium-temurin-java --qf "%{name} %{installsize}\n" --latest-limit=1 | sort -V | paste - - temurin-8-jdk 205391100 temurin-8-jre 109599606 temurin-11-jdk 325365547 temurin-11-jre 130322596 temurin-17-jdk 331476026 temurin-17-jre 141112445 temurin-21-jdk 360380297 temurin-21-jre 164663173 temurin-25-jdk 315199133 temurin-25-jre 198577056 NOTE Nezabudat, ze sucasne JDK ponuka zjednotene JDK vratane JRE (JRE je uz sucastou JDK). Zmysel ma teda instalovat len samotne JRE alebo len JDK, ale nie obidva packages sucasne. Nepliest s distribuciou Java packages priamo vo Fedora, kde packagejava-<ver>-openjdk-develpriamo zavisi od packagejava-<ver>-openjdk.
JavaWS
JavaWS (Java Web Start), resp. javaws(1)rpm je zastarany framework, ktory umoznoval spustat Java aplikaciu priamo z internetu cez web browser. Stiahnutie, instalaciu a samotne spustanie Java aplikacie cez Java Web Start sa realizuje cez .jnlp (Java Network Launching Protocol) subor napisany v XML formate. V Jave SE 9 (released 2017-09) bol oznaceny ako deprecated a v Jave SE 11 (released 2018-09) uz bol uplne odstraneny. Kedze komercna podpora Oracle pre Java SE 8 (resp. Java SE 9) konci az v 2030 roku, mozeme sa stretnut s jeho pouzivanim este aj dnes.
Java Web Start obsahoval casti, ktore neboli open source a Oracle ho distribuoval (do verzie 8, resp. 9) iba v Oracle Java, ale nie v OpenJDK (a nikdy ani uplne nemigroval do OpenJDK). Vznikli open source riesenia, najskor IcedTea-Web (aktualne ako AdoptOpenJDK/IcedTea-Web) a neskor aj OpenWebStart (neexistuje Fedora package).
$ sudo dnf install icedtea-web
Package Arch Version Repository Size
Installing:
icedtea-web x86_64 1.8.8-10.fc43 fedora 3.5 MiB
$ dnf repoquery --requires icedtea-web | grep openjdk
java-21-openjdk
NOTE Napriek tomu, ze default verzia Javy je 25, instaluje sa ako zavislost aj verzia 21 (najnizsia verzia Javy, distribuovana v Fedora). Tato verzia IcedTea-Web nefunguje pod aktualne najnovsou verziou Java 25 (vid nizsie).
IcedTea-Web bolo historicky vyvijane pre OpenJDK 8 a nie pre moderne OpenJDK 11/17/21, kde sa odporuca novsi OpenWebStart, ktory je vyvijany pre Java 11 a vyssie. Aktualna Fedora 43 instaluje ako zavislost java-21-openjdk package, kedze je to najnizsia verzia Javy, ktora je v aktualnej Fedore distribuovana. Odporuca sa vsak doinstalovat Javu verziu 8 (a teda temurin-8-jdk package) pre ktoru je icedtea-web vyvijane. Ano, chaos2.
V pripade realnej potreby JavaWS asi najrozumnejsie bude stiahnut povodny Oracle Java SE 8, JRE, ktoreho sucastou je aj javaws.
$ JAVA_HOME=/usr/lib/jvm/java-21-openjdk/ javaws -version # to same as default
$ javaws -version
selected jre: /usr/lib/jvm/jre-21-openjdk
WARNING: package sun.applet not in java.desktop
WARNING: package com.sun.net.ssl.internal.ssl not in java.base
WARNING: package jdk.internal.util.jar not in java.base
WARNING: package javax.jnlp not in java.desktop
WARNING: A command line option has enabled the Security Manager
WARNING: The Security Manager is deprecated and will be removed in a future release
icedtea-web 1.8.8 (fedora-10.fc43-x86_64)
$ JAVA_HOME=/usr/lib/jvm/java-25-openjdk/ javaws -version # warnings and error
selected jre: /usr/lib/jvm/java-25-openjdk/
WARNING: package sun.applet not in java.desktop
WARNING: package com.sun.net.ssl.internal.ssl not in java.base
WARNING: package sun.security.action not in java.base
WARNING: package jdk.internal.util.jar not in java.base
WARNING: package javax.jnlp not in java.desktop
Error occurred during initialization of VM
java.lang.Error: A command line option has attempted to allow or enable the Security Manager. Enabling a Security Manager is not supported.
at java.lang.System.initPhase3(java.base@25.0.2/System.java:1969)
$ JAVA_HOME=/usr/lib/jvm/java-8-temurin-jdk/ javaws -version # recommended
selected jre: /usr/lib/jvm/java-8-temurin-jdk/jre/
icedtea-web 1.8.8 (fedora-10.fc43-x86_64)
Hello World
// file 'HelloWorld.java'
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello world");
}
}
$ javac HelloWorld.java # compile and wrote Java bytecode HelloWorld.class from Java source code HelloWorld.java $ java HelloWorld # execute Java bytecode HelloWorld.class (from current.dot dir) in Java runtime environment Hello world NOTE A simple source file(s) with amain()class, modern Java (since Java 11) can compile and execute "on the fly". $ java HelloWorld.java # compile and execute "on the fly" (only simple source file)