Depuis le rachat de Sun par Oracle, on ne compte plus le nombre de coups portés à l'édifice Java. Dernier en date, l'annonce d'Apple de ne plus maintenir l'implémentation de Java sur MacOS. Beaucoup de choses ont été dites à ce sujet ces derniers jours. Voici la version officielle avancée par Steve Jobs lui-même : « Sun (Oracle) fournit Java pour toutes les autres plateformes. Ils ont leurs propres prévisions pour les versions, qui sont presque toujours différentes des nôtres, et le Java que nous fournissons a toujours une version de retard. Ce n'est pas la meilleure façon de faire. »
James Gosling a répondu en partie à cette contre-vérité sur son blog. Aujourd'hui, les sociétés qui se chargent des implémentations spécifiques de Java sont celles qui sont les plus à même de maîtriser les dessous des systèmes d'exploitation. IBM maîtrise le sien, HP aussi. Pour Microsoft, les choses sont différentes, l'éditeur a violé les fondamentaux de cette plateforme en rendant propriétaires certaines API et a perdu un procès retentissant. Sun a donc dû prendre la responsabilité de cette implémentation. Concernant Linux enfin, en l'absence de réel acteur dans ce domaine (trop fragmenté), Sun a, là encore, bouché les trous.
J'aimerai insister sur deux points très importants dans cette annonce. Il faut dissocier le Java Desktop et le Java serveur. Lorsqu'on parle de Java Server, la portabilité n'est généralement pas un frein car l'implémentation de Java côté Serveur pose peu de problèmes techniques d'intégration. Les API JEE (JSF, EJB, JDBC, RMI, JNDI, JMS ...) ne sont pas les plus consommatrices en JNI, l'interface native permettant d'accéder aux fonctions « système ». Le Java Desktop ou client est celui qui pose le plus de problème. Le cas soulevé par James concernant l'anti-aliasing en est d'ailleurs un parfait exemple. Tout système d'exploitation s'appuie sur un framework pour l'aspect graphique (gestion des fenêtres, du mode MDI, de la souris, du 2D ou du 3D, du vectoriel ou du bitmap). Java Desktop a pour but d'homogénéiser le rendu d'une application de telle sorte que le même code puisse s'exécuter sur plusieurs OS (en reproduisant le plus fidèlement le rendu). Et c'est là toute la difficulté car l'essentiel de Java Desktop est constitué de code natif.
En abandonnant Java, Apple demande à Oracle d'assumer l'implémentation Mac. Mais comment diable va-t-il pouvoir le faire ? Comme le montre bien Gosling, il y a dans l'implémentation graphique de Mac OS X d'innombrables fonctions « cachées » (je préfère employer le terme « privée ») dont le comportement ou la documentation est du ressort d'Apple. Pensez-vous qu'Oracle développe l'implémentation SWT (l'API graphique sur laquelle repose Eclipse) pour Mac ? Non évidemment, c'est Scott Kovatch (IBM) aidé de la communauté, au prix de nombreuses difficultés techniques. Apple propose historiquement plusieurs GUI et le choix entre Carbon et Cocoa s'apparente parfois à un vrai casse-tête d'un point de vue de Java (http://www.eclipse.org/swt/faq.php#carbonapp).
Pensez-vous vraiment qu'Oracle ira deviner ou négocier avec Apple les implémentations privées de ses algorithmes de rendu graphique ou son dernier driver ultra-optimisé pour gérer l'aliasing ? Pensez-vous qu'Oracle ira arbitrer entre Cocoa et Carbon pour le JDK 7 et le rendu vectoriel dans JavaFX ? Soyons réaliste, le Java Desktop sur MacOS est mort. Et les initiatives autour d'OpenJDK n'y feront rien tant la charge laissée par Apple est lourde.
De nombreux développeurs ont acheté et utilisent au quotidien des Mac pour développer sous Eclipse, en GWT ou d'autres langages plus exotiques (l'équipe GWT elle-même chez Google est fan de MacOS). Ce qui est vrai avec Windows ne l'est pas avec MacOS. Microsoft a énormément aidé Sun lors de la sortie de Windows 7 pour régler les incompatibilités et autres inconsistances de l'AWT. Sans compter qu'à l'avenir, le marché s'achemine de plus en plus vers des applications Desktop tirant partie de l'accélération matérielle des cartes graphiques (encore un domaine ou la compatibilité de Java va poser problème).
En excluant Flash, et maintenant Java de son écosystème, Apple s'enferme encore une fois dans un monde propriétaire et érige bout à bout les barreaux d'une prison, certes dorée.
L'avenir du développement chez Apple passera par Objective-C ou rien. Tout cela est bien triste pour l'innovation en général et pour Java en particulier.
L'ami Sami