Pendahuluan

Pernah penasaran dengan versi Java ?

Kita bisa melihat saat sekarang development JDK sendiri sudah mencapai JDK version 20. Walaupun pada kenyataannya pada saat ini kebanyakan pengguna Java masih menggunakan JDK versi 8 atau 11.

Waaw, kalau kita lihat rentang nya terlalu lebar dari 8 ke 20 sebagai JDK yang terbaru..

Tiap tahun ada saja versi dari JDK yang direlease, tidak seperti zaman dahulu yang untuk menunggu dari JDK 7 ke JDK 8 saja butuh waktu 3 tahun.

Java/JDK 7 direlease tahun 2011, sementara Java/JDK 8 direlease tahun 2014.

Sekarang tiap 6 bulan sekali ada release dari JDK, sehingga adaptasi untuk teknologi baru bisa menjadi lebih banyak terakomodasi.

Memahami kenapa dan bagaimana proses release dari versi JDK akan membantu kita dalam mencerna setiap kali ada release JDK tesebut.


Oke, sebenarnya berapa lama sekali sih release dari Java JDK sendiri ?

Setelah Java 9, yang direlease pada September 2017 (3,5 tahun setelah Java 8), maka Oracle mengusulkan untuk melakukan release setiap 6 bulan sekali.

Sehingga setiap 6 bulan dari September 2017, selalu ada release Java yang baru :

  • Java 9 –> September 2017
  • Java 10 –> Maret 2018
  • Java 11 –> September 2018
  • Java 12 –> Maret 2018
  • Java 13 –> September 2019
  • Java 14 –> Maret 2020
  • Java 15 –> September 2020
  • Java 16 –> Maret 2021
  • Java 17 –> September 2021
  • Java 18 –> Maret 2022
  • Java 19 –> September 2022
  • Java 20 –> Maret 2023
  • Java 21 –> September 2023 (Rencananya)
  • Java 22 –> Maret 2024 (Rencananya)
  • Java 23 –> September 2024 (Rencananya)
  • Java 24 –> Maret 2025 (Rencananya)

Cukup konsisten Java dalam melakukan release per 6 bulannya ini.


Kenapa jadwal release Java menjadi seperti ini sih ?

Banyak hal yang menjadi pertimbangan dari Oracle dan JCP (Java Community Process) dalam membuat release Java menjadi teratur seperti diatas.

Diantaranya :

  • Platform lain selain Java yang juga melakukan rapid release untuk membantu developer dengan fitur-fitur terbaru. Contohnya Go, Kotlin, Angular yang melakukan release beberapa bulan sekali.

  • Release dengan jeda interval yang pendek, bisa meningkatkan inovasi dan persaingan di level fitur.

  • Developer, partner, dan customer dari platform Java lebih menyukai release yang terprediksi dan terjadwal. Developer menginginkan inovasi yang cepat dari platform Java setiap kali release. Sementara perusahaan atau customer menginginkan stabilitas dari platform Java dan juga support jangka panjang setelah release.

  • Cara development zaman sekarang yang bersifat Agile, teknologi yang berubah dan bertambah cepat sekali membuat inovasi harus mengiringi release platform development apapun.

  • Deployment yang banyak berbasiskan cloud, microservice, akhirnya membuat teknologi bisa dideliver dengan bermacam versi dari teknologi. Ini membuat deployment dengan versi Java yang berbeda pun dimungkinkan.

Oleh karenanya Oracle mengusulkan salah satunya dari blog mereka.

  • Mengubah metoda release dari model historical feature-driven ke model time-driven “train”

Historical Feature-Driven artinya release ditentukan oleh feature yang mau di implementasi di next release.

Di Historical Feature-Driven ini, terdapat permasalahan, yaitu kalau salah satu dari fitur nya ternyata adalah fitur besar, susah dan butuh banyak effort, maka release nya akan ditunda sampai development fitur besarnya tersebut selesai.

Akibatnya banyak fitur-fitur lain yang kecil-kecil dan sederhana atau fitur JVM yang tertunda juga karena ikut dalam release berbarengan dengan fitur besar diatas.

Karena mereka dari awal sudah diplot untuk release bersama dengan fitur besar tersebut, maka mereka hanya bisa di deliver ke release berbarengan dengan fitur release besar tersebut, ketika fitur besar tadi juga sudah selesai.

Akibatnya dengan hal ini akan membuat inovasi di platform Java dirasa lambat, dan tentunya akan kalah bersaing dengan platform-platform baru yang melakukan rapid release.

Time-Driven Train berarti release dilakukan terjadwal, dengan kondisi :

  • Release Fitur baru, dilakukan setiap 6 bulan sekali.
  • Update dari release, dilakukan setiap 4 bulan sekali.
  • Release untuk Long Term Support, dilakukan setiap 3 tahun sekali.

Hmm, apa maksudnya ?

Baiklah, kita coba bahas satu persatu :


1. Release Fitur baru, dilakukan setiap 6 bulan sekali.

Release Fitur baru adalah release yang umum dilakukan, dan dinamakan dengan iterasi nomor. Misalnya Java 9, Java 10, Java 11, dst.

Release ini bisa saja terdiri dari Fitur baru, API baru, Fitur JVM dan bahasa pemrograman Java nya itu sendiri.

Fitur baru hanya akan dimerging hanya jika fitur tersebut sudah hampir selesai.

Release ini dilakukan pada bulan Maret dan September di setiap tahun, dimulai dari Maret tahun 2018.


2. Update dari release, dilakukan setiap 4 bulan sekali.

Update dari release ini biasanya merupakan kelanjutan dari release fitur.

Biasanya merupakan perbaikan untuk security issues atau bug yang ketahuan di fitur baru.

Tiap Release Fitur di point nomor 1 akan diikuti 2 update release.

2 kali update release ini akan dilakukan pada bulan Januari, April, Juli, dan Oktober.


3. Release untuk Long Term Support, dilakukan setiap 3 tahun sekali.

Setiap 3 tahun sekali, dimulai dari September 2018, Release Fitur akan menjadi Release Fitur yang mengakomodasi Long-term support release.

Artinya Long Term support adalah update untuk release 3 tahun sekali ini akan dijamin selama paling kurang 3 tahun berikutnya atau bisa jadi lebih lama.

Efeknya juga adalah Release Fitur yang bukan Fitur Release Long Term support cuma akan disupport selama 6 bulan saja, sampai Release Fitur selanjutnya 6 bulan berikutnya.


Apa saja versi Java yang disupport / long term support ?

Mengutip dari site Java SE roadmap, maka daftarnya adalah sbb :

Versi Java Tipe Tanggal Release Support Extended
7 LTS Juli 2011 Juli 2019 Juli 2022
8 LTS Maret 2014 Maret 2022 Desember 2030
9 non-LTS September 2017 Maret 2018
10 non-LTS Maret 2018 September 2018
11 LTS September 2018 September 2023 September 2026
12 non-LTS Maret 2019 September 2019
13 non-LTS September 2019 Maret 2020
14 non-LTS Maret 2020 September 2020
15 non-LTS September 2020 Maret 2021
16 non-LTS Maret 2021 September 2021
17 LTS September 2021 September 2026 September 2029
18 non-LTS Maret 2022 September 2022
19 non-LTS September 2022 Maret 2023
20 non-LTS Maret 2023 September 2023
21 LTS September 2023 September 2028 September 2031
22 non-LTS Maret 2024 September 2024
23 non-LTS September 2024 Maret 2025
24 non-LTS Maret 2025 September 2025