Introduction : un peu d'histoire
L'année 2006 a été cruciale dans l'histoire de Java puisqu'elle a vu l'ouverture par Sun du code Java et son passage sous la licence GPL, ce qui a donné naissance un an à après OpenJDK.
A vrai dire OpenJDK n'était pasouvert à 100%, il restait près de 5% du code qui étaient encore fermés et qui demeuraient la propriété de Sun, ce qui a poussé Redhat à lancer en Juin 2007 le projet IcedTea.
L'objectif d'IcedTea est de créer une implémentation 100% opensource de Java SE.
I- Cycle de mise à jour
Avec la version 6 de Java les mises à jour de Sun/Oracle JDK ne correspondaient pas à celles de l'OpenJDK, c'est à dire que pour chacune de version 6uN d'Oracle n'existait pas forcément une version N correspondante pour OpenJDK.
Des améliorations à ce manquement vont être apportées à partir de la version 7, et OpenJDK deviendra par la même occasion l'implémentation de référence de Java SE 7 (JSR 336)!
Et oui, OpenJDK est maintenant le RI pour Oracle, ce choix a permis de pallier leproblème d'incohérence qui existait entre les spécifications du standard et son implémentation, parce qu'avant cela plusieurs plugins contenaient des fonctionnalités qui n'étaient pas spécifiées dans le standard, ce qui contribuait à créer un écart entre la spécification et les implémentations.
Pour qu'une implémentation soit certifiée, elle doit passer le "Test Compatibility Suite" (TCK) mis en place par Oracle et doit être comparée à OpenJDK comme étant l'implémentation de référence du standard.
II- Licence : BCL vs GPL v2
Le code source OpenJDk est disponible sous deux licences différentes:
1. La Licence publique générale GNU (utilisée par le système d'exploitation GNU/Linux).
2. Sun's Java Research License: licence non commerciale utilisée dans le cadre des travaux académiques.
Le JDK d'Oracle quant à lui est disponible sous licence BCL (Binary Code License) qui est une licence d'utilisation du code compilé Java sans ses sources.
http://www.oracle.com/technetwork/java/javase/terms/license/index.html
III- Performances
Afin de comparer les performances des deux implémentations, des tests officiels ont été réalisés et les résultats ont été publiés ici http://www.spec.org/jvm2008/.
La machine utilisée pendant les tests présente les caractéristiques suivantes :
· PhenomII 940 CPU (4 cores @ 3.0 GHz, 1.8 GHz Northbridge and L3 cache)
· 8 GB of DDR2-800 DRAM (operating in unganged mode)
· Asus M4A78 Pro motherboard (AMD 780G + SB700 chipset)
· four 500 GB disks in AHCI mode + software RAID 10 (near) configuration
· S.O. Linux RedHat 6.3 x64
Les caractéristiques des JVM utilisés pendant ce bench sont:
· OpenJDK Runtime Environment (RE) 1.6.0.24
· OracleJRE 1.6.0.37
· OpenJDK RE 1.7.0.9
· OracleJRE 1.7.0.9
Ce benchmark a donné les résultats suivants:
La version 1.7 d'oracle est la plus rapide.
La version 1.7 d'openJDK et la version 1.6 d'Oracle ont une performance équivalente
La différence en termes de performances entre les différentes versions est vraiment minime.
Passons maintenant au bench par catégorie:
· On remarque qu'Oracle JRE 1.7 est toujours en tête dans pratiquement tous les tests.
· OpenJdk 1.7 et Oracle JRE 1.6 sont quasiment comparables en terme de performance.
· OpenJdk 1.6 est plus lent pour les tests sur les traitements couteux (sérialisation, marshalling/unmarshalling xml, ...)
· Dans les tests de démarrage (startup), les différentes versions d'openJDK sont en tête.
· Les nouvelles versions sont évidemment plus rapide dans les benchs de compilation.
Conclusion
Cette comparaison nous montre qu'à partir de la version 7 de Java les différences qui existaient auparavant du point de vue de la fréquence de mise à jour ainsi que des performances ont disparu. OpenJDk est maintenant une version de référence qui couvre toutes les spécifications du JCP, ce qui constitue une bonne nouvelle pour le monde Opensource qui a tant inspiré Java.