James Gosling est souvent présenté comme le « père de
Java ». La formule est pratique, mais elle
masque la question qui rend son travail intéressant : comment faire
fonctionner le même logiciel sur des machines très différentes, sans
renoncer à la sûreté nécessaire à des appareils connectés ?
Au début des années 1990, Gosling cherche cette réponse avec une petite
équipe de Sun Microsystems. Le résultat ne naît ni comme un langage pour
les sites web ni comme le projet d’un inventeur isolé. Oak, futur
Java, est d’abord un élément du projet Green, une expérimentation
collective sur l’informatique embarquée. Son passage au Web lui donnera
ensuite une visibilité mondiale.
Programmer au-delà de la station de travail
James Arthur Gosling naît en 1955 près de Calgary, au Canada. Après des
études à l’université de Calgary, il soutient en 1983 un doctorat à
l’université Carnegie-Mellon. Sa thèse porte sur la manipulation
algébrique des contraintes, mais son parcours révèle déjà un goût pour
les outils de programmation : il travaille notamment sur un éditeur de
texte qui contribuera à l’histoire d’Emacs.
Il rejoint Sun Microsystems en 1984. L’entreprise vend alors des
stations de travail fondées sur Unix et mise sur les réseaux. À la fin
de la décennie, Sun comprend que l’informatique pourrait aussi se
déplacer vers des appareils grand public : boîtiers interactifs,
télécommandes, terminaux et équipements dotés de processeurs variés.
Cette diversité pose un problème. Un programme compilé directement pour
un processeur doit généralement être adapté ou recompilé pour un autre.
Les langages courants donnent par ailleurs aux programmeurs un contrôle
qui peut provoquer des erreurs de mémoire difficiles à détecter. Pour un
appareil distribué à grande échelle, ces défauts coûtent cher.
Du projet Green à Oak
En 1991, Patrick Naughton, Mike Sheridan et James Gosling lancent chez
Sun le projet Green. Gosling commence par envisager
C++, mais juge difficile d’y garantir la
simplicité, la portabilité et la robustesse recherchées. Il conçoit
alors Oak, nommé d’après un chêne visible depuis son bureau.
Oak conserve une syntaxe familière aux programmeurs de C et C++, tout en
écartant plusieurs sources de complexité. Le langage impose une gestion
automatique de la mémoire, ne propose pas l’arithmétique générale sur
les pointeurs et organise les programmes autour de classes. Il est
compilé non vers le code d’un processeur précis, mais vers un format
intermédiaire : le bytecode.
Ce bytecode est exécuté par une machine virtuelle adaptée à chaque
système. La séparation est essentielle : le compilateur produit un
programme commun, tandis que la machine virtuelle prend en charge les
particularités de la plateforme. Des vérifications du bytecode et un
environnement d’exécution contrôlé doivent aussi limiter ce qu’un
programme téléchargé peut faire.
L’équipe réalise un prototype de terminal interactif, Star7, et une
interface nommée Duke. Le marché visé ne se concrétise pourtant pas. Oak
possède une architecture prometteuse, mais pas encore son terrain
d’adoption.
Le Web change la trajectoire du langage
En 1993 et 1994, le Web quitte les laboratoires et gagne le grand
public. Les navigateurs affichent des documents sur des ordinateurs très
différents : exactement le type d’environnement hétérogène auquel Oak
devait répondre.
L’équipe réoriente alors son travail vers le navigateur. Oak doit être
renommé, le nom étant déjà protégé ; Java est annoncé publiquement
en 1995 avec le navigateur HotJava. Les applets, petits programmes
intégrés aux pages, montrent qu’un même bytecode peut être téléchargé
puis exécuté sur plusieurs systèmes.
Le slogan « Write once, run anywhere » résume cette ambition. Il ne
signifie pas que toutes les plateformes se comportent toujours à
l’identique : bibliothèques, interfaces graphiques, versions de machine
virtuelle et performances peuvent diverger. Il désigne plutôt un contrat
d’architecture qui déplace une grande partie du travail d’adaptation
vers la plateforme Java.
Les applets ont disparu, notamment parce que les greffons de navigateur
ont créé des problèmes de sécurité, de performance et
d’interopérabilité. Réduire Java aux applets serait cependant manquer
l’essentiel. Le langage et sa machine virtuelle trouvent une place
durable dans les applications d’entreprise, les serveurs, les outils de
développement et, indirectement, l’écosystème Android.
Un langage défini par ses compromis
Java n’invente séparément ni la programmation orientée objet, ni le
ramasse-miettes, ni les machines virtuelles. Sa réussite vient de la
manière dont ces idées sont combinées et rendues accessibles dans un
ensemble cohérent.
Le typage statique permet de détecter certaines erreurs avant
l’exécution. La gestion automatique de la mémoire évite au programmeur
de libérer manuellement chaque allocation, sans supprimer pour autant
tous les risques de fuite ou de consommation excessive. Les exceptions
structurent la remontée des erreurs. La bibliothèque standard fournit
dès l’origine des abstractions communes pour les réseaux, les fichiers,
les interfaces et les tâches concurrentes.
Ces choix impliquent des coûts. Une machine virtuelle ajoute une couche
d’exécution ; le ramasse-miettes peut introduire des pauses ; la
compatibilité à long terme limite parfois la vitesse à laquelle un
langage peut simplifier son passé. Les compilateurs à la volée,
l’évolution des collecteurs de mémoire et les nouvelles versions du
langage ont progressivement réduit ces contraintes.
La première promesse de Java repose sur l’interprétation du bytecode,
mais cette solution peut être plus lente qu’un programme compilé
directement pour le processeur. Les machines virtuelles évoluent donc
vers la compilation à la volée, ou JIT : elles observent le
programme en cours d’exécution, repèrent les portions fréquemment
utilisées et les traduisent en code machine optimisé.
Cette stratégie transforme une faiblesse apparente en possibilité
d’adaptation. Un compilateur statique connaît le programme avant son
lancement ; une machine virtuelle peut en plus connaître les chemins
réellement empruntés, les types effectivement rencontrés et la charge de
la machine. Elle peut optimiser, puis revenir sur certaines décisions si
ses hypothèses cessent d’être valides.
La sécurité suit une évolution comparable. Les premières applets
reposent sur un modèle de bac à sable destiné à limiter l’accès aux
fichiers et au système. La multiplication des vulnérabilités montre
toutefois qu’une frontière logicielle complexe n’est jamais une garantie
absolue. Java conserve des mécanismes de vérification et d’isolation,
mais le navigateur cesse progressivement d’être son environnement
principal.
Sun publie une grande partie de Java sous licence libre à partir de
2006, autour du projet OpenJDK. Cette ouverture ne supprime ni les
marques, ni toutes les tensions de gouvernance, mais elle donne à
plusieurs organisations la possibilité de construire et de maintenir des
distributions compatibles. Java passe ainsi d’un produit principalement
piloté par Sun à une plateforme soutenue par plusieurs entreprises et
communautés.
Le rôle de Gosling dans une œuvre collective
Gosling est le principal concepteur du langage et l’un de ses
porte-parole les plus visibles. La spécification, les bibliothèques, la
machine virtuelle et l’écosystème sont toutefois le produit de nombreux
ingénieurs, auteurs et communautés. Patrick Naughton, Mike Sheridan,
Bill Joy, Guy Steele et des équipes successives de Sun ont joué des
rôles distincts dans cette construction.
Cette précision ne diminue pas l’apport de Gosling. Son travail a fixé
une direction : privilégier la lisibilité, la portabilité et la
vérification, tout en restant assez proche de la famille C pour être
adopté par une large population de développeurs.
Après l’acquisition de Sun par Oracle, Gosling quitte l’entreprise en
2010. Il travaille ensuite brièvement chez Google, puis chez Liquid
Robotics et Amazon Web Services. Java, lui, poursuit une évolution qui
ne dépend plus d’une seule personne.
Pourquoi James Gosling compte encore
L’héritage de Gosling ne se mesure pas seulement au nombre de programmes
écrits en Java. Il apparaît dans une idée devenue familière : distribuer
un logiciel sous une forme intermédiaire et confier à un environnement
d’exécution commun la portabilité, l’optimisation et une partie de la
sécurité.
La machine virtuelle Java accueille aujourd’hui plusieurs langages, dont
Kotlin, Scala et Clojure. Cette longévité montre que l’infrastructure
conçue autour de Java a dépassé le langage initial. Elle rappelle aussi
qu’un langage de programmation réussit rarement par sa syntaxe seule :
outils, spécifications, bibliothèques, compatibilité et communauté
déterminent sa durée de vie.
Chronologie
- 1955 : naissance de James Gosling près de Calgary, au Canada.
- 1977 : obtention d’un diplôme en informatique à l’université de
Calgary.
- 1983 : doctorat en informatique à l’université Carnegie-Mellon.
- 1984 : arrivée chez Sun Microsystems.
- 1991 : lancement du projet Green avec Patrick Naughton et Mike
Sheridan ; conception d’Oak.
- 1992 : démonstration du terminal expérimental Star7.
- 1994 : réorientation d’Oak vers les usages du Web.
- 1995 : annonce publique de Java et du navigateur HotJava.
- 1996 : publication du JDK 1.0.
- 2002 : Gosling reçoit avec l’équipe Java le Software System
Award de l’ACM.
- 2006 : Sun annonce la publication de Java sous licence libre ;
OpenJDK devient l’implantation de référence ouverte.
- 2010 : il quitte Oracle après l’acquisition de Sun.
- Aujourd’hui : Java et la JVM restent des plateformes majeures
pour les logiciels de longue durée.
Questions fréquentes
James Gosling a-t-il créé Java seul ?
Non. Il en est le principal concepteur, mais Java provient du travail de
l’équipe Green puis de nombreuses équipes de Sun. La spécification et
l’écosystème ont également été façonnés par des contributeurs
extérieurs.
Pourquoi Oak a-t-il été renommé Java ?
Le nom Oak était déjà utilisé comme marque. L’équipe a donc choisi un
nouveau nom avant l’annonce publique du langage en 1995. « Java » ne
décrit pas une caractéristique technique particulière.
Java et JavaScript sont-ils liés ?
Non. Java est un langage compilé en bytecode pour une machine virtuelle
; JavaScript a été créé chez Netscape comme langage de script pour le
navigateur. Son nom a profité de la visibilité de Java, ce qui
entretient encore la confusion.
Que signifie « Write once, run anywhere » ?
Le même programme compilé doit pouvoir s’exécuter sur toute plateforme
disposant d’une machine virtuelle compatible. C’est un objectif de
portabilité, pas la garantie que chaque détail graphique, chaque
bibliothèque ou chaque performance sera identique.
Java est-il toujours utilisé sans les applets ?
Oui. Les applets ont disparu des navigateurs, mais Java demeure employé
dans les services côté serveur, les systèmes d’entreprise, les outils et
de nombreuses infrastructures. La JVM exécute aussi d’autres langages.
Quelle est la contribution la plus durable de Gosling ?
Avoir assemblé des choix de langage et d’exécution autour d’un contrat
de portabilité crédible. La longévité de la JVM et de son écosystème
montre que cette architecture compte autant que la syntaxe de Java.