Zenika a organisé une conférence sur 2 jours à Paris. Voici le compte-rendu de la Keynote de Neal Gafter.
Keynote de Neal Gafter : l’histoire de Java
Neal Gafter travaille chez Microsoft. Ancien de SUN Microsystems, c’est le coauteur de l’excellent livre « Java Puzzler » avec Joshua Bloch de Google. Après SUN, qu’il a quitté en 2004, il a travaillé 4 ans chez Google, puis il a rejoint Microsoft en 2008.
Neal présente l’histoire de Java. Mon côté Wikipedia était intéressé, je me suis dit que ce serait l’occasion de vous raconter l’histoire de ce langage qui a 20 ans. Oui mon ami, tout a commencé en 1991.
En 1991 donc, James Gosling travaille avec son équipe chez SUN Microsystems sur un langage de programmation simple, proche du C++, avec l’envie de proposer une Virtual Machine pour qu’un programme écrit sur une plateforme, s’exécute sur n’importe quelle plateforme. Write once, run everywhere. A l’époque ce projet s’appelle Oak (un chêne en anglais) car James voit cet arbre par sa fenêtre à Mountain View. Le nom « Java » et la référence au café ne viendra que plus tard, autour d’une machine à café. Java en slang étant l’équivalent de notre « petit kawa » en Français (Kawa étant le premier éditeur que j’ai utilisé pour coder).
Java étant proche du C++, un grand nombre de personne a rapidement basculé vers Java. Le principe de la sandbox et de la JVM offrait dès le départ une boîte sécurisée. Plus de soucis d’allocation mémoire, ou de sécurité.
En 1996, le JDK 1.0 est releasé avec dès la première année, l’organisation d’une conférence à San Francisco, Java One 1.0.
En 1997, le JDK 1.1 sort avec l’ajout des inner class, de la sérialisation, de la réflection, de l’API JDBC et l’ajout de RMI. Java One 2 totalisera déjà 8000 personnes dès la deuxième année. SUN Microsystems attaquera Microsoft pour violation de la licence du JDK fin 97. C’est l’année où j’ai commencé à travailler, dans une startup web, créée par des anciens de SUN Microsystems France. Découverte du Java, premières applets, souvenirs…
En 1998, les évolutions de Java concernent surtout l’apparition du Just In Time compiler, la sortie de la toute première version de Swing, la première mise à jour de l’API Collections. C’est aussi l’année de la création du JCP (Java Community Process). JavaOne totalisera 14 000 personnes, presque le double. A cette occasion, SUN présente JProfessionnal Edition, l’ancetre de la plateforme Java EE.
1999 : 20 000 personnes à JavaOne. Nous sommes au début de la bulle Internet.
Les premières JSR apparaissent. Par exemple la JSR14 sur les Generics. On parle de J2ME et de J2EE, c’est la sortie de la partie entreprise de Java.
En 2000, sortie de J2SE 1.3 Hotspot VM. Apparition de JPDA pour le Debug, des dynamic proxies, JNDI et Java Sound. Martin Odersky, le fondateur de Scala, est appelé par SUN pour réécrire le javac et améliorer cette partie ainsi que les Generics. JavaOne verra plus de 25 000 personnes à San Francisco cette année. J’ai eu la chance d’aller cette année là à JavaOne, c’était un souvenir inoubliable.
En 2001, la bulle Internet a éclaté. De nombreuses startups mettent la clé sous la porte. En quelques mois, les projets les plus fous sont abandonnés. JavaOne ne verra « que » 19 000 personnes. Ce sera aussi l’année de la sortie de J2EE 1.3, et la fin du lawsuit entre Microsoft et SUN, avec à la clé un gros chèque je crois pour SUN, presque 700 millions d’USD.
En 2002, J2SE 1.4 est la première version de Java sortie et développée avec le processus du JCP. Apparition des assertions, des exceptions chaining, des non-blocking IO, de l’API XML, la Sécurité et la crypto, les Regexp, etc. JavaOne ne verra que 14000 personnes. Microsoft sort la première version de C#.
2003 JavaOne 12 000 personnes, et sortie de J2EE 1.4
2004 sortie de Java 5 ou J2SE 5.0 avec les Generics, les Annotations, les Enums, les Varargs, le boxing/unboxing, les for-each loop et de nouvelles classes pour l’API de concurrence. JavaOne 14000 visiteurs. Mais retenez que le JDK v5 c’était en 2004.
En 2005, 15000 personnes à JavaOne, Microsoft sort la v2.0 du C#.
En 2006, sortie de Java SE 6 ! Oui on oublie un peu que la version de Java actuelle a déjà 5 ans. La version 6 offre quelques petites améliorations, comme l’annotation processing, les Hexadecimal floatingpoint numbers, l’API scripting (Rhino JS) et des améliorations sur la performance. C’est aussi Java EE 5 et 13000 personnes à JavaONE. Sun lance l’OpenJDK, le javac et la jvm hotspot passent sous licence GPLv2 (with classloader exception).
En 2006 apparait malheureusement les soucis au sein du JCP avec la licence du TCK. Le TCK est le kit qui permet de certifier que votre JDK est valide, qu’il peut recevoir l’étiquette « bon pour le service ». Cette suite de tests est indispensable pour certifier que votre vm et votre jdk sont valides. Sans cela, pas de possibilité de sortir votre propre implémentation des spécifications Java. Petit retour en arrière. En 2002 SUN avait annoncé qu’il acceptait d’offrir le TCK aux implémentations open-source de Java. Et ce, afin d’aider la communauté. Apache lance alors le projet Harmony, soutenu financièrement par IBM. L’objectif d’Harmony est d’offrir une alternative au JDK proposé par SUN Microsystems, sans doute dans un souci de sécurité et de pérennité… Fin 2006 des tensions entre SUN et les autres membres du JCP autour du TCK commencent à arriver. SUN ne respecte clairement pas l’agreement écrit dans le JSPA, en refusant qu’Harmony soit utilisé sur les plateformes mobiles. Bref, impossible alors pour la fondation Apache de certifier Harmony, et par exemple pour Google de prendre cette implémentation pour faire des téléphones portables.
Voici ce que dit le JSPA :
The spec lead (including Sun Oracle) for a JSR approved by the JCP shall offer to any interested party licenses concerning the RI and the TCK and also the TCK separately when developed under any JSR submitted hereafter.
Or l’accord autour du TCK selon Neal Gafter était « discriminatory ». Il y avait des Fields of Usage restrictions sur les technologies testées. Incompatible avec toutes les licences open-source. Si jamais Apache Harmony acceptait ces « Fields of Usage », le projet ne pourrait alors plus être opensource… Bref c’était possible, mais impossible à appliquer, car à l’encontre des statuts et des objectifs de la fondation Apache.
En 2007, l’OpenJDK est presque terminé. C’est aussi la première version de JavaFXScript, un nouveau langage open-source pour construire des applications, langage qui a été abandonné fin 2010 je crois. Du côté du JCP Expert Group, Oracle demande à SUN de faire un effort et de retirer ces « Fields of Usage ». Mais Oracle n’a pas de contrôle sur SUN. De l’aveu de Neal Gafter, à l’époque le gros souci c’est le blocage de SUN, qui a peur de perdre une source énorme de revenu : le développement d’applications Java pour Mobile. Les membres du JCP décident de ne pas approuver de JSR tant que SUN ne lâche pas… Ambiance… Pendant ce temps-là, Microsoft sort la version 3 du langage C#, avec Linq.
En 2008, JavaOne réunit 15000 personnes. SUN annonce JavaFX 1.0, mais pas de grands changements du côté de Java. Les experts s’étripent sur des propositions pour les Closures, mais rien ne bouge vraiment. Neal Gafter explique qu’à cette époque, SUN ne fait aucuns plans sur la future version de Java… SUN ne voulait pas lacher JavaME, ce qui est particulièrement couvert par la partie FOU et les conflits… Probleme de revenu. Situation de blocage… Rien ne bouge.
En 2009, toujours 15k personnes à JavaOne. Les choses bougent du côté de Java EE avec l’approbation de Java EE 6. Les grands acteurs du marché votent oui, mais protestent fortement et indiquent à SUN dans le vote, qu’ils n’approuvent pas l’attitude de SUN. Je crois que la fondation Apache s’abstient, je ne sais plus. Les critiques à l’encontre de SUN fusent dans la communauté. Aucuns changements sur le langage…
En 2010, coup de tonnerre : Oracle rachète SUN. JavaOne est organisé en fin d’année, en même temps que la méga conférence Oracle OpenWorld, avec presque 43000 personnes. Il y a quelques critiques sur l’organisation de JavaOne, qui passe du MosconeCenter à différents hôtels dans la ville… Et on remettra cela en 2011. JavaFXScript est abandonné.
En 2010 le second gros coup est l’abandon du support à Apache Harmony par IBM, qui passe à l’OpenJDK. Oracle annonce aussi à l’occasion de la conférence Devoxx, que de nouvelles JSR ont été proposées pour améliorer Java. Lors de la keynote de Marc Reinhold à Devoxx, on entend enfin parler de Java 7 et de Java 8. Les choses repartent, le langage va enfin proposer des nouveautés, attendues depuis presque 4 ans. Oracle déclare aussi à cette occasion que la dispute sur le TCK est terminé, mais quelques semaines plus tard la fondation Apache quitte l’expert group, ainsi que 2 figures de la communauté Java : Doug Lea et Tim Peierls. Oracle attaque ensuite Google sur certains brevets de la JVM, concernant la plateforme Android. Le souci, c’est que l’expert group n’a plus de représentant du monde open-source. Le point positif : les choses repartent et nous devrions avoir des nouveautés fin 2011.
2011 nous devrions avoir une nouvelle version de java à la fin de cette année, Java SE 7. Au programme :
– switch string, type inference, multicatch
– try with resource
– Method handles
– « New new I/O » (file system and async)
– Fork-join concurrency
Enfin, Java SE 8 devrait sortir fin 2012/début 2013 avec quelques nouveautés :
– Bulk
– Lambda expression
– virtual extension methods
– Buld data operation : en parrallele.
Java SE 8 facilitera l’ecriture de code //
Neal Gafter pense qu’Oracle était la meilleure entreprise pour racheter SUN. IBM aurait eu une approche « différente ». En conclusion donc, nous sommes au début d’une nouvelle étape pour Java, après quelques années de flottement. Mais l’open-source et les motivations des grands acteurs ne sont plus les mêmes qu’il y a 10 ans.
En conclusion
Keynote intéressante sur l’histoire de Java. Neal Gafter a surtout raconté le passé, sans couvrir le futur de Java. Pas un mot sur la communauté, quelques slides avec des courbes sur le déclin et la renaissance de Java. Vieux mais pas enterré.
Il nous a aussi proposé quelques Java Puzzle. Amusant, on se fait avoir à chaque fois.
A votre avis, qu’affiche le code ci-dessous ? Et pourquoi ?
public class ThisIsSoSimple { public static void main(String... args) { System.out.println(12345+5432l); } }
Lorsque je compile et que j’exécute ce code
a) j’ai une exception
b) la console affiche 66666
c) la console affiche 17777
Je vous laisse réfléchir, c’est pas évident.
0 no like
Avec la coloration syntaxique de SyntaxHighlighter, c’est un peu plus facile, ça donne une piste…
Ah, Kawa, c’était le premier IDE où est apparu le code folding.
Ca dépend de la version, réponse A si JDK >= 1.5 (autoboxing) sinon B
D’après mon ami Eclipse, je pense que cela affiche 17777, mais je n’ai fichtrement aucune idée de cette raison (pas de piège avec des préfixes hexadécimaux ou octal…)
Regarde bien le « 5432l ».. .c’est pas un 1 à la fin mais la lette L 😉
Bravo Nicolas : résumé très complet de cette keynote. Il manque la traditionnelle réponse « d) Obi-Wan Kenobi » pour le quizz.
Evidemment, en direct lors de la conférence, j’avais répondu b)
@Samuel : rhooo… c’est pas gentil de spoiler la solution comme ça.