Java Sürümleri ve Özellikleri Kılavuzu

Farklı Java sürümleri ve özellikleri hakkında bilmeniz gereken her şey



Hangi Java Sürümünü Kullanmalıyım ?

17 Mart itibarı ile ilk Jdk 14 sürümü yayınlandı. Plana göre de her 6 ayda bir yeni bir sürüm yayınlanacak misal Java 15 Eylül 2020 gibi bekleniyor.

Oracle Sun’ı satın aldıktan sonra (27.01.2010) bir süre daha sürüm takvimi geçmişte olduğu gibi devam etti ve bu takvime göre sürümler arası geçen zaman 3-5 yılı buluyordu. Java 9 yayın tarihi sürekli değişti ve planlanan tarihten çok sonra yayınlanabildi (09.17) ve sonrasında da 6 aylık sürüm takvimine geçildi.

Ancak gerçek hayatta işler biraz farklı ilerliyor. Sürüm takvimi bugün Java14’ü gösterse de çoğu uygulama Java 8’e bile geç adapte olabildi (Neden bazı şirketler hala Java 8’e takılıp kaldılar ? ) bir kısmı daha da eskilerde kaldı.

Eğer yeni bir projeye başlamayı planlıyorsanız Java 11 (LTS - Life Time Support) ya da Java 14 sürümü ile rahatlıkla başlayabilirsiniz.

Android uygulaması yazmak istiyorsanız bazı Jdk 8 özellikleri de eklenmiş olan özel  Jdk 7 sürümlerini kullanmak zorundasınız ya da Kotlin’e geçebilirsiniz.

Neden bazı şirketler hala Java 8’e takılıp kaldılar ?

  • Derleme-Toplama araçları (build tools) – (maven, gradle, vb) ve bazı kütüphaneler Java 8’den sonraki sürümler için hala daha bazı bug’lar içeriyor sürekli güncellenmeleri gerekiyor.
  • Java 8’e kadar sadece ücretsiz ve sınırsınız kullanım hakkı olan Oracle Jdk’sı kullanılıyorken 16.04.2019 tarihi ile lisans sözleşmesinin şartları değişti. Lisans değişimi olacağı ilk duyulduğu andan itibaren Oracle-Sun satın alması oluşan endişelerin gerçekleşeceği yönünde söylentiler had safhaya ulaştı ve java’nın artık paralı olacağı düşüncesi ortalıkta dolaşmaya başladı. Bu tabii olarak ciddi hayâl kırıklıklarına ve soru işaretlerine yol açtı. Sonraları bu kararın sadece kurumsal ve ticari kullanımları etkileyeceği anlaşılsa da pratikte tek sürümlü bir yapıdan farklı üretici sürümlü bir yapıya geçişe yol açması nedeni ile var olan soru işaretlerine yenilerinin eklenmesine neden oldu.
  • Bazı şirketler prensip olarak sadece LTS seçeneği olan sürümleri kullanma kararı aldılar ve bunu kullandıkları işletim sistemi üreticilerinden beklediler. Tabii ki buda hemen olamadı daha fazla zaman aldı.


Toparlayacak olursak bu sebepler ve bunlara  eklenebilecek bir çok politik ve pratik (araç, kütüphane ve framework güncellemeleri) sebep firma ve ürünlerinin hala Java 8 kullanmaya devam etmelerine neden oldu ve oluyor.

Neden Bazı Java sürümleri 1.x şeklinde de adlandırılıyor ?

Java’yı ilk kullanmaya başladığımda ki 1999 yılı idi. O zamanlar VAJ ile geliştirme yapıyorduk ve jdk 1.1 sürümünü kullanıyorduk. Bu isimlendirme böylece jdk 1.5’e kadar devam etti (Şubat 2004). Jdk 1.5 ile birlikte  artık Java 5 ismi de kullanılmaya başlandı. Bknz.




Bu tarih sonrası 1.x ve Java X adlandırılması birlikte kullanıldı ta ki Java 9’a kadar. Eski sürümlerde java sürüm numarasını öğrenmek istediğinizde java -version sonucu aşağıdaki gibi oluyordu.


Yeni sürümlerde ise aşağıdaki şekilde bir adlandırma göreceksiniz.

Java Sürümleri Arasındaki Fark Nedir ? Özel Bir Sürümü mü  Öğrenmeliyim ?

Bu soru akıllara python-2 ve python-3’ü getirse de java için böyle bir ayrım söz konusu değildir. Java katı bir şekilde geriye doğru uyumludur. Bu; eski sürümlü bir java uygulamanızın – birkaç küçük istisna dışında ki çoğu uygulamayı etkilemez – yeni sürümde de çalışacağının garanti eder. Ancak tersi doğru ve geçerli değildir. Örneğin, Java 5 ya da 8 de yazdığınız bir uygulama java 8veya 14 VM de çalışacaktır fakat java 14 uygulamanız java 8 VM de çalışmayacaktır.

Sonuç olarak;
  • Sadece tek bir sürüm, örneğin Java 14 öğrenmek zorunda değilsiniz.
  • Aksine, Java 8’e kadar dilin tüm özelliklerini öğrenip java ile ilgili sağlam bir temel oluşturabilirsiniz.
  • Bu ve benzeri dokümanlar aracılığı ile Java 9-14 ile ne gibi özellikler ve güzellikler geldiğini öğrenebilirsiniz ve gerektiğinde de kullanabilirsiniz

Java Sürümleri Arasındaki Farklara Örnek Verebilir misiniz ?

İlk olarak şu bağlantılara bakmanızda fayda var Java Özellikleri 8-13 ve Java 8 ve Lambda.
Şunu da söylemekte fayda var. 3-5 yıl gibi alam sürümler ile ile 6 ayada bir yayınlanan sürümleri kıyasladığımızda elbette ki eklenen özellikler ve yenilikler ve niteliği atasında ciddi farklar olması kaçınılmazdır.

Kısaca Java 7-8’e geçiş için harcanan emeğe göre  Java 9-14 geçişi için harcanması gereken emek daha az olacaktır ve daha hızlı ve kolay bir şekilde gündemi ve son sürümü yakalamak mümkün olacaktır.

JRE ve JDK Arasındaki Fark Nedir ?

Jre : Java Runtime Environment
Jdk : Java Development Kit

Eğer bugüne kadar sadece java uygulamalarını çalıştırdıysanız muhtemeldir ki sadece JRE yüklemişsinizdir. JRE, bir çok başka şeyin yanında özel olarak JVM ve birkaç komut satırı uygulamasını içermektedir.

Tabi bu durum eskiden böyle idi, yani Java 8’e kadar. Bu tarihe kadar Oracle Jdk ve Jre’yi ayrı ayrı imkân sağlıyordu. Kadı ki jdk’yı açtığınızda ayrı bir dizinde jre zatn vardı ve her jdk içinde zaten jre de geliyordu.


Eğer Oracle’dan indiriyorsanız Java9 ile birlikte artık bu ayrım yok !. Artık sadece Jdk indiriyorsunuz. Ayrıca jdk dizin yapısı da değişti içinde bir jre dizini de yok.

Oracle dışındaki bazı dağıtımlar halen ayrı bir Jre indirme imkânı verse de genel eğilim sadece jdk yayınlanması yönünde. Yazının bundan sonrası için Jdk ve Java eş anlamlı olarak kullanılAcaktır.

Peki, Java-Jdk nasıl kurulur ?

Java-docker, msi ve platforma özel bir takım paketlemeleri bir kenara bırakacak olur ise aslında Java sıkıştırılmış bir zip dosyasından başka bir şey değildir.

Dolayısı ile java kurmak istiyorsanız yapmanız gereken zip dosyasını açmaktan ibarettir. Burada Mark’a katılıyorum gerisi zaf-ı güzaftır.

Kurulum için yönetici yetkisini de ihtiyacınız yoktur. Hatta eğer benim gibi eski sürümlerle de çalışmak zorunda kaldığınız oluyor ise 3-5 sürümü kurup istediğiniz zaman istediğiniz sürüm ile de çalışabilirsiniz.

Açılmış bir Java zip dosyası aşağıdaki gibi görünür.

Windows için bin dizinine bakıldığında aşağıdaki şekilde görünmesi gerekir.
Sonuç olarak yapmamız gereken zip dosyasını açıp, bin dizinini PATH değişkenine eklemektir. Bu sayede java ve javac komutlarını istediğimiz dizinden kullanabiliriz.

Aslında Oracle ve AdoptOpenJDK gibi dağıtıcıların verdikleri ekranları olan kurulum uygulamalarının da yaptığı budur.

Java’yı doğru düzgün kurup kurmadığınızı test etmek istiyorsanız java -version yazıp sonucu inceleyin.
Aşağıdaki gibi ise sorun yoktur.
Son sorumuza geldik. Java zip dosyasını nereden indirebilirim ?

Java Dağıtımları

Java dağıtımı yapan bir sürü site mevcut. Fakat kimin ne verdiği ve ne tür bir lisans kullandığı muamma. Şimdi bu konuya biraz ışık tutalım.

Başlıca dağıtımlar kaynak için:



Open JDK Projesi

Java kaynak kodu anlamında (Jre-Jdk) sadece bir yerden alınabilir OpenJDK Project.

Fakat burada sadece kaynak kod vardır ve dağıtılabilir bir yapı yoktur. Teorik olarak herhangi biri kaynak kodu indirip kendi adı ile derleyip dağıtabilir. Örneğin MarkoJDK ya da SerkanJDK gibi. Ancak bu dağıtımın sertifikasyonu olmayacağından Java SE uyumludur diyemeyeceğiz.

Bu nedenden dolayıdır ki sadece bir avuç üretici şirket paketleyip sertifikasyonu alıp (TCK) dağıtım yapabiliyor.

Üreticiler kaynak kodda hiçbir değişiklik yapamazlar örneğin String sınıfından tek bir metot dahi çıkaramazlar ama mesela kendi ürettikleri pakete isimlerini verebilirler ya da faydalı gördükleri (CLI) türü araçlar ekleyebilirler. Bunlar dışında orijinal kaynak kodu tüm dağıtımlarda bire bir aynıdır.

OpenJDK Paketi (Oracle’ın) ve OracleJDK Paketi

Java kaynak kodu paketleyip dağıtan firmalardan ilki olan Oracle iki ayrı Java dağıtımını desteklemektedir.

    1. OpenJDK builds by Oracle (!):Bu dağıtım ücretsiz ve isimsizdir. Oracle bu dağıtım için yenisi çıkınca eski sürüme yönelik güncellemeyi durdurur. Örneğin Java 14 çıkınca Java 13 güncellemeleri biter.
    2. OracleJDK : Markası olan ve 2019 da lisans kapsamı değişen ticari bir dağıtımdır. Eğer geliştirme amaçlı kullanacaksanız ücretsiz ama ticari olarak sahaya çıkacaksanız Oracle’a para ödemeniz gerekiyor. Böylece daha uzun süreli destek, sürüm güncellemeleri ve eğer VM sapıtırsa arayabileceğiniz bir telefon numaranız oluyor.

Java 8 öncesinde OracleJDK ve OpenJDK dağıtımları arasında kaynak kod bağlamında OracleJDK lehine farklılıklar vardır. Bugün için ufak tefek farklar dışında her ikisi aynı diyebiliriz.
Bu durumda yüklediğiniz Java için para verip ticari destek (telefon numarası) alıp almamak size kalmış.

AdoptOpenJDK

2017 yılında Java kullanıcı grubu (JUG) üyesi bazı geliştiriciler ve üreticiler (Amazon, Microsoft, Pivotal, Ted_hat vb) bir araya gelip AdoptOpenJDK adında yeni bir topluluk kurdular.

Daha uzun kullanılabilir/güncel olan kaya gibi sağlam ayrıca iki ayrı VM (HotSpot / OpenJ9) seçeneği olan bir OpenJDK dağıtımı vaad ettiler.

* Yazar, Mark, Şiddetle bu dağıtımı tavsiye ediyor. “Eğer özel bir sebebiniz yok ise ya adoptopenjdk’yı indirin ya da işletim sisteminizin size verdiğini kullanın”.

Azul Zulu, Amazon Corretto, SAPMachine

Basitçe söylemek gerekirse farklı destek ve bakım garantileri vaad eden sürümlerdir diyebiliriz.
Her bir ürün için kendi sitesine bakıp farklılıkları incelemek en doğrusu olacaktır.

Sürümlerin arasındaki bazı farkların örneklerine yazının aslından erişebilirsiniz.

Diğer Dağıtımlara Biraz Daha Bakalım

Biraz da Mark’ın da faydalandığı ve gördüğüm kadarı ile birçokları tarafından kaynak göstermeksizin kopyalanan Stephen Colebourne‘un konu ile ilgili 3 Eylül 2018 tarihli yazısına göz atalım.

Son söyleyeceğimizi baştan söyleyelim. Stephan da Mark gibi eğer standart bir Java istiyorsanız OracleJDK veya AdoptOpenJDK dana birini seçin ya da işletim sisteminizin size verdiğini kullanmanızı öneriyor.
Kalan birkaç dağıtım için de birkaç kelime edelim.

Amazon Coretto (https://aws.amazon.com/corretto/ )

Amazon tarafından üretilen Uzun süreli destek sunulan sertifikalı GPL-CE lisansı ile dağıtılan bir sürümdür. Amazon kendi yamalarını ekleyeceğinden ve de AWS de bu dağıtımı kullanacağından yaygın bir kullanımı olacağı aşikârdır. Java 8 desteği en azından Haziran 2023’e kadar devam edecektir.

IBM

IBM Java 8 ve öncesi için destek vermektedir. Bunun yanında AdoptOpenJDK’nın OpenJ9 dağıtımına da ücretli ticari destek vermektedir.

SAP (https://sap.github.io/SapMachine/ )

SAP Java 10 ve sonrası için GPL-CE lisanslı Jdk dağıtımı yapmaktadır. Ayrıca ticari ve kapalı kodlu bir JVM de sağlamaktadır. Detay ve yaşam boyu destek için.


Diğer dağıtımlar ve bilgi için kaynak dokümana bakabilirsiniz.

çeviren ve yorumlayan Serkan Taş

Comments

Popular posts from this blog

Automation of daily build process with TlosLite

Java 14'de neler var - 1