Oracle nie wyda już darmowego Oracle SDK do użytku komercyjnego. Zmiany jakie przyniosła Java 11
Oracle zobowiązało się, że do końca 2018 roku będzie wydawać Oracle SDK, ale od nowego roku będziemy musieli płacić za jego komercyjne wykorzystanie (utrzymana zostanie darmowa wersja do tworzenia projektów na własne potrzeby). Ile będzie kosztować? Zapłacimy 2,5 USD za każdego użytkownika, a dodatkowo 25 USD za procesor, jeśli pracujemy na serwerach i chmurze. Co ciekawe, w obliczaniu kosztów musimy też wziąć pod uwagę liczbę rdzeni i współczynnik dla danego procesora — określony przez Oracle.
Śpieszymy z informacją, że nie jest tak źle jak mogłoby się wydawać. W przyszłym roku będziemy mogli nadal korzystać z darmowego OpenJDK — wydawanego na licencji GPL. Oracle ogłosiło, że nadal będzie wspierać te wersje, zgodnie z deklaracją: co najmniej przez sześć miesięcy od daty wydania aktualizacji. Niestety nie wiemy, czy wsparcie będzie stałe i czy czasem nie zakończy się na kilku aktualizacjach. Wierzymy jednak, że społeczność będzie dalej wykorzystywać OpenJDK i rozwijać je we własnym zakresie.
Wiemy natomiast więcej na temat samej Javy 11, która będzie wspierana aż do 2023 roku, a w wersji przedłużonej do września 2026 roku (mowa wyłącznie o komercyjnej wersji Javy 11). Kolejna ważna informacja: nie musimy robić upgrade’u z Javy 8 — będzie ona wspierana maksymalnie do marca 2023 roku.
Co nowego w Javie 11?
Przede wszystkim dodano 17 JEP-ów i usunięto moduły Javy EE i CORBA (JEP 320). W Javie 11 znajdziemy także implementacje TLS 1.3 (JEP 332), uzgadniania kluczy z wykorzystaniem krzywych eliptycznych Curve25519 i Curve448 (JEP 324) oraz algorytmów kryptograficznych ChaCha20 i Poly1305 (JEP 329). Nie obyło się także bez aktualizacji metod. Na przykład klasy String dodano strip()
, stripLeading()
, stripTrailing()
i isBlank()
. Ponadto Java 11 wprowadza Nest-Based Access Control (JEP 181) pozwalający na tworzenie zagnieżdżonych typów i interfejsów.
Aktualizacja przyniosła także:
- nową pulę dynamicznych stałych CONSTANT_Dynamic (JEP 309) — działa na wzór
invokedynamic
z Javy 7, - ustandaryzowaną wersję klienta HTTP (JEP 321),
- możliwość uruchamiania programów zdefiniowanych w pojedynczym pliku źródłowym jednolinijkową komendą (JEP 330).
Do OpenJDK dodany został framework pozwalający na zbieranie danych o działaniu aplikacji Flight Recorder, o którym na pewno słyszeliście w kontekście Oracle JDK (JEP 328).
Jak oceniają aktualizację developerzy? Mateusz Palichleb, Software Engineer, właściciel w FutureByte: Podoba mi się przede wszystkim pomysł wydawania nowych wersji JDK z większą częstotliwością. Oracle kiedyś planował wydawać aktualizację co 2 lata, natomiast jak to wyszło w praktyce — nawet 3 lata dla Javy w wersjach 8 i 9. Natomiast teraz jest bardziej Agile’owo i mamy małe paczki skończonych funkcjonalności co pół roku.
Dodaje: Co do najświeższej 11-tki to pod względem zmian nie różni się ona zbytnio od poprzedniej, choć (w końcu) pozbyto się z niej starych modułów np. Javy EE, która już wcześniej była oznaczona jako przestarzała (deprecated). Wprowadzono też wiele drobnych usprawnień jak np. możliwość użycia zmiennej lokalnej „var” w lambdach (wzorem z języka C# na platformie .NET).
Ciekawą dla mnie rzeczą są nowe garbage collectory, a zwłaszcza ten o nazwie „Epsilon”, który tak naprawdę nie oczyszcza pamięci, ale pozwala na sprawdzanie testowania obciążenia aplikacji w różnych konfiguracjach. Na przykład możemy zasymulować duże obciążenie serwera i sprawdzić, jak spada nam wydajność — z włączonym odśmiecaniem pamięci oraz w przeciwnym wypadku. W starszych wersjach Javy nie było to zadanie aż tak łatwe.
Przechodząc do tego, co mi się nie podoba, to oczywiście ograniczenie wsparcia wersji niekomercyjnych OpenJDK do pół roku (kolejnej wersji Javy), co poniekąd zmusza nas do ciągłej adaptacji kodu do nowych wersji lub wykupienia licencji komercyjnej.
Ogólnie oceniam aktualizację bardzo na plus, choć nie pochwalam zmian licencyjnych zwłaszcza pod względem płatności za ilość użytych rdzeni procesora (trochę komplikuje sprawę jeśli chcielibyśmy uruchamiać coś w skalowalnej chmurze).