Časovo závislé vydania Java

1. Úvod

V tomto článku sa budeme zaoberať novými časovo závislými vydaniami Javy a dopadom na všetky typy vývojárov.

Zmeny v pláne vydávania zahŕňajú aktualizáciu úrovní poskytovania funkcií a úrovní podpory pre verzie Java. Celkovo sa tieto zmeny výrazne líšia od prostredia Java, ktoré spoločnosť Oracle podporuje od roku 2010.

2. Prečo šesťmesačné správy?

Pre tých z nás, ktorí sú zvyknutí na historicky pomalú kadenciu uvoľňovania Javy, je to dosť významný odklon. Prečo taká dramatická zmena?

Java pôvodne definovala svoje hlavné vydania okolo zavedenia veľkých funkcií. To malo tendenciu vytvárať oneskorenia, ako tie, ktoré sme všetci zažili v prostredí Java 8 a 9. To tiež spomalilo jazykové inovácie, zatiaľ čo sa vyvinuli ďalšie jazyky s užšími cyklami spätnej väzby.

Jednoducho povedané, kratšie obdobia vydania vedú k menším a zvládnuteľnejším krokom vpred. A menšie funkcie sa ľahšie osvojujú.

Takýto model sa v súčasných podmienkach dobre páruje a umožňuje vývoju JDK pracovať v agilných metodikách podobných komunite, ktorú podporuje. Zvyšuje tiež konkurencieschopnosť Javy s runtime ako NodeJS a Python.

Pomalšie tempo má, samozrejme, aj svoje výhody, a tak šesťmesačný cyklus vydávania verzií hrá úlohu aj vo väčšom rámci dlhodobej podpory, ktorému sa venujeme v časti 4.

3. Zmena čísla verzie

Mechanickým aspektom tejto zmeny je nová schéma číslo verzie.

3.1. Schéma reťazca verzií JEP 223

Všetci poznáme ten starý, kodifikovaný v JEP 223. Táto schéma urobila prírastkové čísla verzií a poskytla ďalšie informácie.

 Skutočné hypotetické vydanie, dlhé vydanie ------------ ------------------------ Zabezpečenie 2013/06 1.7.0_25- b15 7u25 Minor 2013/09 1.7.0_40-b43 7u40 Zabezpečenie 2013/10 1.7.0_45-b18 7u45 Zabezpečenie 2014/01 1.7.0_51-b13 7u51 Minor 2014/05 1.7.0_60-b19 7u60

Ak bežíme java -verzia na JVM pre verziu 8 alebo staršiu uvidíme niečo ako:

> java -version java verzia „1.6.0_27“ Java (TM) 2 Runtime Environment, Standard Edition (build 1.6.0_27-b07) klientský klient Java HotSpot (TM) (build 1.6.0_27-b13, zmiešaný režim, zdieľanie)

V takom prípade by sme mohli hádať, že sa jedná o Java 6, ktorá je správna, a 27. aktualizáciu, ktorá je nesprávna. Schéma číslovania nie je taká intuitívna, ako sa zdá.

Menšie vydania boli násobky 10 a bezpečnostné vydania vyplnili všetko ostatné. Typicky by sme videli krátky reťazec pripojený k našim miestnym inštaláciám, ako sú JDK 1,8u174. Budúce vydanie môže byť JDK 1.8u180, čo by bolo menšie vydanie s novými opravami.

3.2. Nová schéma reťazca verzií

Nová schéma reťazca verzie „prepracované čísla verzií, aby nekódovali kompatibilitu a význam, ale skôr plynutie času v zmysle cyklov vydávania,“Podľa Marka Reinholda v JEP.

Poďme sa pozrieť na niektoré:

9.0.4 11.0.2 10.0.1

Na prvý pohľad sa zdá, že ide o sémantické spravovanie verzií; to však nie je tento prípad.

So sémantickým verzovaním je typická štruktúra $ MAJOR. $ MINOR. $ PATCH, ale nová štruktúra verzie Java je:

$ FUNKCIA. $ PRIEBEŽNE. $ UPDATE. $ PATCH

$ FUNKCIA je to, čo by sme mohli považovať za hlavnú verziu, ale bude sa zvyšovať každých šesť mesiacov bez ohľadu na záruky kompatibility. A $ PATCH je pre vydania údržby. Tu sa však podobnosti zastavia.

Najprv, $ PRIEBEŽNE je zástupný symbol vyhradený spoločnosťou Oracle pre budúce potreby. Zatiaľ to bude vždy nula.

A po druhé, AKTUALIZÁCIA $ je založený na čase FUNKCIA $, aktualizácia mesačne po najnovšom vydaní funkcie.

A konečne sú skrátené koncové nuly.

To znamená, že 11 je číslo vydania pre Java 11, vydané v septembri 2018, 11.0.1 je jeho prvé mesačné vydanie aktualizácie v októbri a 11.0.1.3 by bolo hypotetickým tretím vydaním opravy z októbrovej verzie.

4. Distribúcia viacerých verzií

Ďalej sa pozrime, ako zvoliť správnu verziu.

4.1. Stabilita

Jednoducho povedané, Java má teraz rýchly kanál každých šesť mesiacov a pomalý kanál každé tri roky.Každé vydanie z tretieho roku sa nazýva vydanie LTS.

Na rýchlom kanáli jazyk vydáva inkubačné funkcie. Tieto jazykové vlastnosti sa vo vydaní LTS stabilizujú.

Pre spoločnosti, ktoré môžu prijať volatilitu výmenou za používanie nových funkcií, môžu teda použiť rýchly kanál. Pre podniky, ktoré oceňujú stabilitu a môžu sa dočkať aktualizácie, môžu inovovať pri každom vydaní LTS.

Experimentovanie s verziami JDK umožňuje vývojárom nájsť najvhodnejšie riešenie.

4.2. podpora

Je tu samozrejme aj otázka podpory. Teraz, keď podpora Java 8 skončila, čo máme robiť?

A ako už bolo spomenuté, odpoveď prichádza vo verziách LTS, Java 11 je najaktuálnejšie vydanie LTS a 17 je ďalšie. Aktualizácie budú dostupné a podporované dodávateľmi ako Oracle a Azul.

Ak môžeme dôverovať podpore komunity, potom Redhat, IBM a ďalší vyjadrili svoju podporu pri uplatňovaní opráv chýb pre OpenJDK. Projekt AdoptOpenJDK tiež poskytuje vopred pripravené binárne súbory pre OpenJDK.

4.3. Licencovanie

Jednou z oblastí nejasností pre niektorých je rozdiel medzi OpenJDK a Oracle JDK.

V skutočnosti sú takmer identické, líšia sa iba v tom, v čom boli podľa Buga Goetza zachytené opravy chýb a bezpečnostné opravy.

OpenJDK funguje ako zdroj väčšiny odvodených JDK a zostáva voľný. Počnúc programom Java 11 bude spoločnosť Oracle účtovať komerčné licenčné poplatky za produkt Oracle JDK vrátane dodatočnej podpory a služieb.

4.4. Fragmentácia

Pri častejšom vydávaní sa môže stať problémom fragmentácia. Hypoteticky by mohol každý bežať na rôznych verziách Javy s rôznymi funkciami ešte viac ako teraz.

To by, samozrejme, mohla pomôcť vyriešiť kontajnerizácia. Od Dockeru a CoreOS až po Red Hat OpenShift poskytuje kontajnerizácia potrebnú izoláciu a už nevynúti použitie jedného inštalačného miesta pre Javu na serveri.

5. Záver

Na záver môžeme od tímu Java v spoločnosti Oracle očakávať oveľa viac s pravidelným vydávaním jazyka Java každých šesť mesiacov. Ako vývojár v prostredí Java je perspektíva nových jazykových funkcií každých šesť mesiacov vzrušujúca.

Majte na pamäti niektoré z dôsledkov, keď sa rozhodujeme, aký je náš kanál inovácie, ak potrebujeme podporu a licenciu, a ako sa vyrovnať s fragmentáciou.


$config[zx-auto] not found$config[zx-overlay] not found