23 Mayıs 1995… Java (ilk harf büyük, diğerleri küçük; JAVA olarak yazılmaz!) programlama dilinin doğuşu… “bir kez yaz, her yerde çalıştır” olan “write once, run anywhere” (WORA) mantığına sahip… Kısaltması aslında Stanford University Network olan Sun Microsystems tarafından açık kaynak kodlu olarak genel kullanıma açıldı. Sınırlı özelliklere sahip olan Java 1.0 versiyonundan büyük değişiklikler yapılarak Java 1.8 versiyonuna gelmiş sonra da Java 9, Java 10, Java 11 ve 19 Mart 2019 tarihinde yayımlanan Java 12 ile bugünlere geldi. Java 13 ile de yoluna devam edecek. Java Geliştirme Kiti (Java Development Kit, JDK) 1.0 sürümü 1996 yılında çıktı. 2004 yılında ise ilk önce 1.5 olarak duyurulan kod adı Tiger Projesi olan Java 5.0 sürümü çıkartıldı, sürümde Java diline bir çok yeni özellikler eklendi. 2014 yılında ise kod adı Lambda Projesi olan yayımlanması uzun yıllar sonra olan Java 8 Sürümü (1.8) çıktı. Bu sürüm de Java’nın ana sürüm değişikliklerinden biridir: lambda ifadeler, virtual extension metodları ve stream’ler, compact profiller, yeni date/time API, Optinal, Nashhorn JavaScript Engine..
Java sistem tasarımcıları/mimarları şöyle karar aldılar: “Dünyadaki şirketler çevik yazılım geliştirme metodolojisini (Agile) kullanarak Java tabanlı projeler geliştirmekte iken biz neden çevik yazılım geliştirme metodolojisini kullanarak Java’yı geliştirmiyoruz?” Kaybedecekleri bir zamanları olmadığını ve Java’yı hızlı bir şekilde ileri taşınması gerektiğini kararlaştırdılar. Bu nedenle Java 1.8 sürümünden sonra hızlı bir geliştirme süreci başladı, yeni sürümlere yeni özellikler hızlı bir şekilde eklenmeye başladı. Kod adı Jigsaw Projesi olan Java 9 ile Java’nın monolitik yapısından Modul yapısına geçiş oldu, JShell özelliği, Javadoc, Stream API iyileştirmeleri, private arayüz tanımlamaları, HTTP/2, … gibi özellikler eklendi. Java 10 Garbage Collector Interface, Paralel Full Garbage Collector, Local-Variable Type Interface (var), … gibi özellikler eklendi. Java 11 ile yeni katar (string metodları), Local-Variable Syntax for Lambda Parameters özelliği, Java EE and CORBA Modüllerinin ayrılması, Epsilon Garbarge Collector, … gibi özellikler eklendi. Son olarak da, Java 12 ile de Switch ifadelerindeki geliştirme, POJO’ları çok kolay bir tanımlamak için Record, … özellikleri geldi.
Değişiklik tabanlı sürüm (historical feature-driven model) yönetimi yerine değişiklik içeren zaman tabanlı (time-driven release model) bir sürüm yönetimine geçildi. Değişiklikler Java Community Process (JCP) adı altında toplanmaya ve değerlendirilmeye başlandı. Eklenilmesi istenilen her yeni özellik Java Specification Request (JSR) olarak adlandırılmakta ve 4 aşamalı bir süreç ile Java’nın bir parçası olmaktadır. Java 1.8’e kadar 1.0, 1.1, 1.2, … , 1.8 şeklinde adlandırılan sürümler Project Module kod adı olan versiyondan sonra Java 9, Java 10, Java 11, Java 12, … şeklinde versiyonlanmaya başlandı. JCP tarafından önerilen bir diğer Ubuntu Versiyon/Sürüm versiyonlama modeli YY.AA şeklinde (örneğin 18.6, 18.9, …) kabul görmedi.
Ubuntu sürüm modeli olarak adlandırılan her 6 ayda bir sürüm yayınlamadan etkilenerek, Java için de her 6 ayda bir yeni bir sürüm yayımlanmaya ve her 3 yılda bir uzun süre destek verilecek (long-term support release, LTS) Java sürümleri çıkarma modeli başlamış oldu. Bu zaman tabanlı model Eclipse (IDE) için yıllık WildFly (Application Server) için de her 3 ayda bir uygulanıyordu.
Ubuntu modeli ise Java için Mart 2018’den itibaren her Mart ve Eylül aylarında yeni bir takım değişiklik içeren sürümler yayımlanacak,her değişiklik sürümünden önce ise sadece 2 güncelleme sürümü yayımlanacak. Güncelleme sürümleri ise Ocak, Nisan, Temmuz ve Ekim aylarında yayımlanacaktır. Bu güncelleme sürümleri güvenlik açıklarını ve yazılımdaki hataları gidermekle sınırlı olacaktır. Eylül 2018’den sonra ise vendor’lara göre değişmekle beraber her 3 yılda bir LTS sürümleri çıkarılacaktır/desteklenecektir.
Hali hazirda Open Java Development Kit (OpenJDK), Oracle, Amazon Corretto ve AdoptOpenJDK Java desteği sunan (binary’veya bundle’ları oluşturan) vendor’lar. Oracle tamamen OpenJDK imajlarını/sürümlerini Oracle GPL ve “GPL v2 with Classpath Exception” lisansları altında destek vermeyi ve bunun yanında Oracle JDK adı altında da kurumsal müşterilerine destek vermeyi sürdürmeyi planlamaktadır. Oracle, OpenJDK ile geliştiricilere en son değişikleri sunmayı, Oracle JDK ile de ticari müşterilerine uzun süreli destek vermeyi planlamaktadır. Amazon da AWS (Amazon Web Services) olarak adlandırılan özellikle kendi küresel bulut tabanlı ürünlerinde uzun süreli Java desteği vermek amacıyla OpenJDK tabanlı Java versiyonlarını Amazon Corretto olarak adlandırmakta, her çeyrekte bir sürüm çıkarmayı planlamakta ve ek lisanslama veya kısıtlama olmaksızın sürümlerini (binaries) ücretsiz sunmaktadır. AdoptOpenJDK’da Apache License, Version 2.0. lisansı ile açık kaynak kodlu ve ücretsiz olarak OpenJDK sürümlerini OpenJDK HotSpot veya Eclipse OpenJ9 Virtual Machine tabanlı seçenekleri ile sunmaktadır.
Java’nın yeni sürüm modeli ile geliştiriciler yeni özellikleri ürünlerinde hızlı bir şekilde adapte edebilecek, sürümler arası geçişlerde kolaylıkla adapte olunabilecek, kurumsal şirketler ise 3 yıllık uzun süre desteğe sahip sürümler ile kararlı bir şekilde ile yollarına devam edecek olacaklar.
Java ihtiyaçlar nedeniyle ve ihtiyaçlara çözüm olarak eklenilen özellikler ile gelişmeye devam ediyor ve yakın gelecek de devam edecektir. Salt veri yapısı odaklı özellikler eklenilmesi yerine (Java is not a data-structured-based programming language!), kararlılığını artıracak iyileştirmeler yapılması ve yeni özelliklerin eklenilmesi de sürecek gibi.
Referanslar/Linkler
- OpenJDK – https://openjdk.java.net
- The Java Community Process(SM) Program – https://www.jcp.org/en/home/index
- AdoptOpenJDK – https://adoptopenjdk.net/index.html
- Amazon Corretto – https://aws.amazon.com/corretto/
- Oracle Java SE Support Roadmap – https://www.oracle.com/technetwork/java/java-se-support-roadmap.html