Java'nın Geleceği Sorunsalı: Java 15 ve Sonrası

Java programlama dili, 1996 yılında Sun Microsystems tarafından geliştirilmiştir. Java kodları, bytecode‘lara dönüştürülerek sanal makine (JVM) üzerinde çalıştırılır. Şimdi burada geçmişini, kimin tarafından geliştirildiğini veya çalışma mantığını detaylıca anlatmayacağım. Kısaca bundan bahsetmemin sebebi ise bu noktaların Java’nın geleceğınde belirleyici olmasıdır.

Java ilk çıktığı günden bu zamana kadar pek çok kurumsal projede ve açık kaynak projede kullanıldı ve kullanılmaya devam ediyor. Ayrıca yine bu dil Android’in bel kemiğini oluşturuyor. Ancak dikkatinizi çeken bir durum olmalı. Java 11 ve Java 8 hala en popüler Java sürümleri. Ayrıca Java’nın geçtiğimiz aylarda Java 15 isminde bir alt sürümü yayınladı ve Mart ayı içerisinde de OpenJDK ile dağıtıma girecek. Bununla beraber Java 8’in destekleğinin kesilme tarihi önümüzdeki senelerden 2030 yılına ertelendi. Tahmin edersiniz ki bunun birinci sebebi Android’de hala kodun Java 8 üzerinde olması. Neyse daha fazla detaya girmeyeceğim sadede geleceğim.

Java 8’in Çıkışı

Oracle’nin 2010 yılında Sun Microsystems’i satın almasının ardından Sun cephesinde büyük değişimler yaşandı, olumlu ve olumsuz yönde. Belki de olumlu yönde yaşanan ve bugünkü Android’in başarısını da besleyen olay sanırım Java 8’in beraberinde getirdiği özelliklerdir. 2014 yılında yayınlanan Java 8 sürümü, JVM güçlendirmeleri ve bellek iyileştirmelerinin haricinde pek çok yeni özellik getirildi. Lambda ifadeleri de bunların başında yer alıyordu. Android’in yükselmesi ile beraber bu gelen özellikler de kendine bir karşılık buldu. Android sayesinde artan Java 8’in hype’ı kurumsal olarak da Java 8’e karşı olan ilgi ve kullanımı artırdı.

Bir diğer taraftan da Oracle, Java sürümlerinin sıklığını ve Uzun Süreli Destek konusundaki tutumunu değiştirmeye karar verdi. Bu da birçok kuruluş çok sayıda yeni sürüme rağmen Java 8’e bağlı kalmaya itti. Şubat 2020 itibari ile de Java kullanan kuruluşların %60’ından fazlasının Java 8’e bağlı kalması bunun bir sonucudur.

Java 11 ile Dengelerin Değişmesi

2018’de Oracle, Java’nın lisanslanma biçiminde temel değişiklikleri duyurdu. 2019’dan itibaren, bir kuruluş ticari olarak Java 11+ kullanıyorsa, bunun için ödeme yapmalıdır. Bu, Java 8’den bir sonraki LTS sürümü Java 11’e geçişin önemli mali veya yasal sonuçları olabileceği anlamına gelir. Bu kesinlikle Java 11’in benimsenmesinde sınırlayıcı bir faktör olmuştur.

Bir diğer yandan da Java 8’in ticari kullanımı için ücretsiz destek Ocak 2019’da sona ermiştir. Genişletilmiş Java 8 desteği 2030 yılına uzatıldı. Ancak, Java 11 desteği, 2024’e kadar Amazon Corretto veya AdoptOpenJDK tarafından sağlanan yamalar ile, OpenJDK üzerinden sağlanmaktadır. Ancak genişletilmiş Java 11 desteğinin yalnızca Eylül 2026’ya kadar mevcut. ( Aralık 2030’a kadar desteği uzatan Java 8’in aksine).

Bir diğer yandan, Java’nın uzun süredir açık kaynak sürümü olmasına rağmen; Java 11’den itibaren Oracle resmi olarak, açık kaynak kodlu OpenJDK’yı sağladı. JDK’nın bu sürümü, Oracle tarafından sağlanılandan farklı olarak GNU Genel Kamu Lisansı (GPL) v2 altında yayınlandı. OpenJDK, aynı zamanda Java Standard Edition (SE) spesifikasyonunun resmi referans uygulaması olan, bir JDK’dır ve sadece Oracle değil, IBM ve Red Hat gibi büyük şirketler de OpenJDK’ya destek vermektedir. Yani Java JSR ve JEP ismi verilen iki spesifasyon kanalını esas alarak aynı esasları sağlayan iki sürüm halinde dağıtılır hale geldi. Oracle JDK ise Oracle’ın ticari olarak desteklenen Java sürümüdür. Genel olarak OpenJDK kaynaklarından oluşturulmuştur. Geçmişte, Java’nın açık kaynak sürümü ile Oracle’ın ticari sürümü arasında, kısmen ikincisinin kapalı kaynak veya özel öğeler kullanması nedeniyle farklılıklar vardı. Bununla birlikte, Java 11’den beri amaç, iki sürümün bazı kozmetik farklılıklardan ayrı olarak “esasen aynı” olmasıdır. Yani ek özellikleri bir kenara bırakıldığında Java SE ve Java EE sürümleri arasında bir bütünlük oluşturuldu.

Oracle JDK ve OpenJDK arasındaki geçmiş farklılıklar ve ayrıca destek ilkelerindeki farklılıklar nedeniyle (OpenJDK yalnızca en son sürümdeki değişiklikleri destekler); bazı kuruluşlar OpenJDK’yı benimseme konusunda isteksiz davrandılar. Ya da iki versiyon hakkında kafaları karıştı (en azından çok benzer isimler nedeniyle) ve çalışıyorsa elleme mantığı ile Java 8’den vazgeçemediler. Ek olarak, Amazon Corretto ve AdoptOpenJDK gibi suları daha da çamurlu hale getirebilecek başka OpenJDK sürümleri de vardır.

Madalyonun diğer yüzü: Google vs Oracle

Dediğim gibi Java, Android sayesinde büyük bir yükselişe geçti. Özellikle mobil uygulamaların yazılım sektörünü domine etmesi ile tüm gözler Java’ya çevrilmişken Google ile Sun mahkemelik oldu. Oracle’ye satılmasından hemen önce Sun Microsystems şirketi Android’in kaynak kodlarında, Sun Microsystems’in Java 6’nın JDK’sı ile sağladığı kodların lisans ve patentleri ihlal edilerek kullanıldığına dair bir dava açtı. Nitekim ilerleyen dönemde 12 milyon satır kodun Android içerisinden tasfiye edildi ve büyük kısmı yeniden yazıldı. Java’nın bu karmaşası sebebi ile şirketlerin Java’ya olan istek ve merakı düşerken bir diğer yandan da Android özelinde Google ile yaşanan sorun Java’ya olan destekleri gitgide azalttı. Bir diğer yandan da Google biraz kasti biraz da yaşanan bu sürtüşmenin getirdiği durumlar sebebi ile Java’nın 8. sürümü üzerine Android kodlarını sabitledi ve Android NDK (C ve C++ ile Android üzerinde uygulama oluşturmayı sağlayan Native Kütüphane) üzerine olan desteklerini artırdı.

Java’yı Damıtma Çabaları

Java uzun zamandır bu durumlar içerisinde gelişmeye devam etti. Ancak yeni bir LTS sürümünün olmaması sebebi ile Java’nın pek çok yönü eski bulunmaya başladı. İşte bu noktada geliştiriciler Java’nın JDK’sını kullanarak Java’nın eksiklerini gideren ve alternati oluşturacak diller çıkarmaya yöneldiler.

Java Sanal Makinesi (JVM), Java 7 ile başlayan Da Vinci Machine projesiyle, özellikle dinamik tipli dilleri JVM üzerinde çalışabilir kılmayı hedefledi.

Sun Microsystem’in ilk adımlarını attığı bu proje, Oracle firmasıyla beraber de önem verilen bir konu olmaya devam etmektedir. JVM içerisinde statik tipli dilleri çalıştırabilmenin birden fazla amacı bulunmaktadır. Bunlar;

* JIT (Just in Time) Compiler ile yüksek performans sunmak
* Birçok dilin çalıştırılmasıyla JVM’i Polyglot bir ortam haline getirmek
* Farklı dil ve ekosistemleri Java ekosistemine yakınlaştırmak
* Farklı dil ekosistemlerinin gücünü JVM’de birleştirmek

İşte bu özellikleri kullanan geliştiriciler bir şekilde JDK’yı kullanarak deyimi yerindeyse Java’yı damıtarak kendi dillerini oluşturdular. Kotlin veya Haskell gibi dilleri üreterek Java’nın syntax’ından kaynaklı sorunları düzelttiler hatta dil aracılığı ile Java’da olmayan özellikleri (bazılarının yanıp bittiği Null Safety özelliği gibi) sağladılar. Bu durum masaüstü ve web tasarımı uygulamalarında Java kullanımının azalmasına sebep oldu. Bir diğer yandan, Kotlin’in Android tabanında yaygınlaşması ve Google’nin Dart dili ve NDK’yı birleştirerek oluşturduğu Flutter’in hem masaüstü hem de mobil uygulama alanında Java’ya (ve hatta Objective-C ve Swift’e) rakip olarak çıkması ile Java geliştirici tarafından kullanımı düşmeye başladı.

Java 15 ve sonrasında bizi bekleyenler

Sürüm haritası, JSR ve JEP raporlarına göre Java da bu durumun farkında. Bu sebeple, C++14 Dil özelliklerinin dile entegrasyonu ile senelerdir Java’ya gelmesi beklenen özellikler gelmeye başlayacak ve Java 17 ile gelecek LTS sürümü ile yeni özellikler uzun süreli destek bulacak. Bu tarih de 2022 olacak. Tabi ki Oracle bu süreçte LTS sürümünü 1 sene erteleyip Java 19’u beklemezse ki COVID dönemi yüzünden düşen OpenJDK güncelleme ritmi bunun gayet muhtemel olduğunu gösteriyor. Bu aşamada bizi bir sonraki LTS sürümünde Amber, Loom ve Panama isminde 3 büyük alt projenin JDK’ya dahli de bekleniyor. Bu projeler ile instanceof keyword’unun eklenmesi gibi syntax tarafında beklenilen değişimlerin haricinde JVM güncelleştirmeleri ve diğer işletim sistemleri ve işlemci mimari için optimizasyonların ve uyumlulukların eklenmesi bekleniyor.

Nereye gidecek bu Java

Popülerliği düşüşte olsa bile, Java’nın kaderi Java 15 ve sonrasında (LTS’ye gidecek süreçte) belli olacak gibi duruyor. Yine de pek çok şirket ve geliştirici uzun bir süre Java kullanmaya devam edeceğini öngörmek hiç de zor değil. Bu noktada java’nın konumunu Linux çekirdeğinde C dilinin yerini Rust alacak mı diye sordukları zaman Linus Torvalds’ın verdiği cevap gibi olacağını düşünüyorum.

“I’m convinced it’s going to happen one day.”

Kaynakça