Oracle contre Google, un procès cynique

Oracle fait un procès à Google pour avoir utilisé l'API Java dans Android!

Oracle à racheté Sun, le créateur de Java en avril 2009 pour 7 milliards de dollars.

Les actionnaires ont manifesté un certain mécontentement face à cet investissement dont les revenus sont sans rapport avec la somme versée. C'est peut-être ce qui a incité Larry Ellison a engager un procès contre Google, et réclamer 6 milliards de dollars pour l'utilisation de son code.

Le juge a rejeté cette demande comme exorbitante. Oracle à alors revu ses chiffres, à deux reprises, et demande 2 milliards de dommages d'abord, puis ensuite un montant inconnu mais toujours faramineux. Excédé, le juge a alors nommé son propre expert qui a évalué les dommages, au cas ou Oracle gagnerait, à 5 millions de dollars pour les brevets et 100 millions pour l'atteinte au copyright.

La plainte concernait au départ 7 brevets logiciels. 5 on été invalidés. Oracle à fait pression sur l'USPTO pour revoir sa décision ce qui a abouti à ce qu'un des brevets invalidé soit de nouveau reconnu valide, mais c'était trop tard pour qu'il soit pris en compte dans ce procès.
La question du copyright est plus grave. Si la justice reconnaît des droits à Oracle sur l'API Java, la même règle va s'étendre à tous les langages de programmation, et plus aucun programmeur ne pourra utiliser un langage sans risque d'être poursuivi!

Les API peuvent-elles être sous copyright?

Voyant les motifs du procès fondre comme neige au soleil, Oracle lance alors un coup de poker: il ajoute une plainte pour utilisation de code sous copyright, à savoir l'utilisation de 37 API Java par Google. Non pas pour le code des classes, mais pour les nom des objets de l'interface. Jusqu'ici les API n'étaient pas considérés comme étant sous copyright, seul le code l'est.

Qu'est-ce qu'une API?

Une bonne définition a été donnée par le juge Alsup. La conception d'une API est comme l'organisation d'une bibliothèque de livres. Google a organisé sa bibliothèque exactement comme Oracle de sorte que les développeurs Java puisse passer plus rapidemment à Android. Cependant, les livres de cette bibliothèque ont été écrits par Google, il n'y a pas violation de copyright sur ce plan.

Plus formellement, l'API est l'ensemble des déclarations dans un module de code réutilisable. Si le module comporte cette classe:

Class math {
   int addition(int a, int b) {
     int z = a + b
     return z
   }
} 

Les déclarations Class math, int addition(int a, int b) font partie de l'API. Le code de la méthode addition fait partie de l'implémentation.

Le fond du litige

Pour mieux comprendre de quoi il s'agit, il faut savoir que le framework Java se compose de 166 API. La plupart sont, soit du domaine public, soit sous licence libre. Seules 37 sont sous licence propriétaire, ce qui ne veut pas dire qu'elles aient été écrite par Sun ou Oracle par ailleurs. 97% du code de ces 37 APIs vient de Google et non de Sun.

Google fait savoir qu'il a utilisé les noms des classes de cette API pour simplifier la vie des développeurs, donc c'est un usage loyal (fair use). Sur ce point le jury n'est pas parvenu à prendre une décision.

Selon les déclarations des jurés, ils ont été focalisés sur la question du coté fonctionnel plutôt que créatif. Puisque Android à surtout une vocation pratique, le principe du "fair use" est ce qui prévaut pour 9 jurés contre 3. Ce qui de toutes façons n'a aucune importance car...

Le 31 mai 2012, le juge Alsup à rendu son jugement sur la question des APIs: Les APIs de Java ne peuvent pas être copyrightées. (PDF) Cela rejoint la décision de l'Europe, plus générale, sur ce point.

Cette structure de commandes est un système ou une méthode selon la Section 102(b) du Copyright Act et donc ne peut être copyrighted. La duplication d'une structure de commandes est nécessaire pour l'interopérabilité.

Les autres sont libres d'écrire leur propre implémentation pour accomplir les fonctions identiques, car, fondamentalement, les idées, les concepts et fonctions ne peuvent faire l'objet d'un monopole de par un copyright.

Il ne reste plus que la question des 9 lignes de codes "empruntées", en fait données à Java par l'auteur du code d'Android.

Le code commun à Java et Android

En ce qui concerne le code lui-même, Oracle à utilisé un programme de comparaison entre le code d'Android et celui de Java: sur 15 millions de lignes, seules 9 sont communes.

Les lignes de code en question ont en fait été écrite par un programmeur de Google qui les avait incorporées au code Java pour aider les développeurs. Elle n'en tombent pas moins sous la propriété d'Oracle.

Sans se démonter, les avocats d'Oracle déclament "Une copie est une copie" et demandent des millions de dollars de dédommagements.

Le juge Alsup a prévenu que les dommages éventuels ne pourraient excéder 150000 dollars, mais les autres n'en démordent pas et veulent faire un réquisitoire devant le jury pour demander des dommages élevés.

On a découvert à l'occasion de se procès que le juge William Alsup du District Nord de Californie savait programmer et avait déjà utilisé de nombreux langages de programmation. C'est une très mauvaise nouvelle pour Oracle, car dans ce genre de procès, l'accusateur compte sur l'ignorance du juge et tente de l'impressionner avec un flot d'argument techniques (comme on le fait vis-à-vis de l'office des brevet).

Le juge rétorque à l'avocat d'Oracle, David Boies:

J'ai déjà écrit dans le passé des blocs de code comme rangeCheck (NdA: les neuf lignes de code dupliquées) des centaines de fois auparavant. Je peux le faire, vous pouvez le faire. Mon idée est que quelqu'un qui aurait copié cela lorsqu'il pourrait le réaliser lui même aussi vite, est juste un accident. Vous ne pouvez prétendre que cela leur à procuré un accès plus rapide au marché. Vous êtes un des meilleurs avocat de Californie, comment pouvez vous faire cette sorte d'argumentation?

rangeCheck! Tout ce qu'il fait est de s'assurer que les nombres que vous entrez sont dans un intervalle, et leur appliquer quelque type de traitement particulier. L'expert à dit que n'importe quel étudiant pourrait le faire...

Et l'avocat répond:

"Je ne suis pas expert en Java. C'est ma seconde affaire en Java, mais je ne suis pas un expert et je ne pourrais pas programmer cela en six mois."

La chance de Google est d'avoir affaire à un juge qui ait des connaissances techniques dans le domaine.

Le code de la fonction rangeCheck

Les 9 lignes de code de Google/Oracle en Java:

private static void rangeCheck(int arrayLen, int fromIndex, int toIndex) {
if(fromIndex > toIndex) throw new IllegalArgumentException("fromIndex(" + fromIndex + ") > toIndex(" + toIndex + ")");
if(fromIndex < 0) throw new ArrayIndexOutOfBoundsException(fromIndex); if(toIndex > arrayLen) throw new ArrayIndexOutOfBoundsException(toIndex);
}

Version JavaScript écrite en 5 minutes par moi-même (licence libre)...

function rangeCheck(int value, int min, int max)
{
if((value >= min) && (value <= max) && (min <= max) return true; alert("Error! " + value + " not in " + min + " " + max); return false;
}

L'avocat d'Oracle n'aurait pas pu l'écrire en six mois dit-il. Il n'est pas expert en Java, dit-il. On ne l'aurait pas engagé comme programmeur chez Google et peut-être même pas non plus chez Oracle dirais-je!

Le 20 juin 2012, le juge a décidé que Google devrait payer 0$ à Oracle (zéro) pour le "préjudice" subi, ce qui a été accepté par Oracle (qui fera appel pour le reste). Cela concernait la fonction ci dessus et des fichiers de configuration. En outre les frais de procès seront à la charge d'Oracle qui devra en outre payer 1 130 350 dollars à Google, pour couvrir une partie de ses frais (Google réclamait 4 millions).

Google avait proposé une conciliation sur la base de 28 millions de dollars, ce qu'Oracle avait refusé.

Des brevets peu intellectuels

Vient ensuite la question des deux brevets qui seraient utilisés par Dalvik, la machine virtuelle d'Android.

Pour juger du préjudice, deux experts ont été appellés à la barre. Terence Parr, professeur à l'Université de San Francisco, est un spécialiste des machines virtuelles et est bien connu des auteurs de langages de programmation pour son générateur ANTLR. Celui-ci permet de parser une grammaire, il est utilisé par les deux compilateurs du langage Scriptol (non pas l'interpréteur).

Terence Parr a déclaré que le brevet 6,061,520 avait un intérêt insignifiant pour la réalisation d'une machine virtuelle. Il s'agit d'une façon d'initialiser un tableau de façon statique (donc lors de la compilation).

L'autre expert, David August, professeur à l'Université de Princeton a déclaré que, quand au second brevet incriminé, RE38,104, il n'était pas du tout utilisé par la machine virtuelle Dalvik. Il s'agit d'une méthode pour accéder au contenu de la mémoire par référence, en attribuant des noms à des zones.

Rien dans les deux méthodes incriminées ne semble être le produit d'une imagination fertile et il n'est pas étonnant que les programmeurs d'Android aient utilisé des procédés similaires pour parvenir aux mêmes buts.

Les experts d'Oracle avaient en Mars 2012 évalué le dommage subi par Oracle pour l'utilisation de ces deux "inventions" à 2 milliards de dollars (au début du procès ils demandaient 6 milliards). Avec ce genre d'évaluation, chacun de mes scripts contient assez "d'inventions" pour valoir des milliards d'euros

Le 23 mai 2012, le jury du U.S. District Court of Northern California à San Francisco a décidé à l'unanimité que Google n'avait pas enfreint les deux brevets invoqués par Oracle. Une juriste américaine, Denise Howell, évalue les frais du procès pour Oracle à des dizaines de millions de dollars.

Déclaration de Google:

C'est une victoire pour Android et l'écosystème Android!

Déclaration du juge avant de renvoyer les jurés:

Je n'ai jamais eu un jury dans un procès civil qui ait duré si longtemps, "le plus long procès civil" et vous avez tous été un jury superbe, et ce pays est un grand pays, parce que les citoyens comme vous sont prêt à se sacrifier et viennent le faire comme vous l'avez fait. Je les remercie au nom du pays et de la cour Fédérale.

Après la décision qui suivra le 31 mai selon laquelle les API ne sont pas sous copyright, la question du fair-use ne se pose plus et c'est une victoire totale pour Android et Google.

Félicitation de Sun à Google

Le procès n'est pas terminé

Le 7 août 2012, le juge Alsup a ordonné que les deux parties dévoilent le nom des journalistes et blogueurs qui ont commenté cette affaire et qui aient un lien avec une des deux entrprises.

Parmi les blogeurs, un des plus fervent partisans d'Oracle était Florian Mueller, qui a déjà dû avouer qu'il était appointé par Oracle.

Google pour sa part reconnait avoir versé des compensations à James Gosling, le créateur de Java, pour s'être impliqué dans le procès. Gosling avait pris le parti de Google.

L'oracle n'a rien vu venir...

En adoptant Java pour sa plateforme Android, Google à rendu un énorme service à Sun, dont profite Oracle qui a racheté Java. Le patron de Sun à l'époque avait écrit des articles enthousiastes sur l'initiative de Google et sa contribution à l'expansion de Java.

En effet Java est loin d'être sans alternative. Apple utilise Objective-C, et Google pouvait aussi choisir la plateforme LLVM une fois optimisée, de même que Qt utilisée par Sailfish (Maj 2014, remplacé Meego par Sailfish ). D'autres systèmes comme webOS utilisent Node.js et HTML 5 qui fonctionnent parfaitement sur mobile - aussi.

Il est donc parfaitement malhonnête de la part d'Oracle de poursuivre Google, de l'accuser à la fois de fragmenter Java et copier son API, deux choses incompatibles, et de vouloir faire main basse sur les revenus d'Android, dont le succès tient à la notoriété de Google. La machine virtuelle d'Oracle pour mobile quand à elle n'ayant aucun succès. Et plus encore de menacer le monde de l'informatique tout entier en défendant le droit d'auteur sur les APIs.

Avec le plus grand cynisme, Oracle réclame encore des millions de dollars pour 9 lignes de code qu'un élève en programmation peut écrire en quelques minutes, et qui par ailleurs à été utilisé par Android par l'auteur du code devenu employé de Google, qui avait réutilisé son propre code par habitude. Sans doute comptaient-ils sur l'ignorance du juge et des jurés et espéraient-ils les impressionner avec un langage juridique obscur et intimidant? Je ne voudrais pas être client de cette entreprise. N'essaient-ils pas de m'impressionner sur la qualité de leur produit avec un langage technique obscur et intimidant?

Mise à jour 9 mai 2014: Les API sont sous copyright

La cour d'appel du circuit fédéral a estimé qu'Oracle disposait d'un droit de copyright sur son API. La cour du district avait jugé le 31 mai 2012 que ce n'était pas copyrightable. Ce nouveau jugement était prévu sachant que cette cour d'appel statue presque toujours en faveur des détenteurs de brevets et de droits. Mais cela institue le copyright sur une API, considérée comme une "structure, séquence et organisation", qu'elle est l'expression d'une idée et non l'idée elle-même. Cela existait pas auparavant, et cela est spécifiquement dénié en Europe. La cour d'appel a aussi laissé le soin à un nouveau procès de décider s'il y a fair use.
La cour d'appel reconnaît de la "créativité" dans la sélection et l'arrangement des déclarations de méthodes, ce qui n'est qu'une supputation. Les API sont généralement définies en suivant des règles. Par ailleurs les langages de programmation ne sont pas l'objet de copyright (l'implémentation est libre) et sont proches des API dans le principe qui en son l'extension. Le créateur du langage à toujours le choix d'inclure une fonction dans le langage ou la déporter dans une API séparée.
Le juge Alsup avait fait la différence entre les déclarations (l'interface des fonctions) et les implémentations qui sont l'expression des fonctions. Les premières étant considérées comme faisant partie du langage. La cour d'appel n'a pas pris en compte cet aspect et a estimé que les interfaces ne sont pas fonctionnelles, parce qu'elles auraient pu être conçues de différentes façons, et donc sont un acte de création, et donc à déduit que Google n'était pas obligé de les utiliser, que le précédent jugement a confondu la création et son utilisation, cette dernière devant être jugée ultérieurement quand au fair play.
Alors que le jugement précédent précisait bien qu'il s'appliquait uniquement au cas précis du langage Java, la cour d'appel s'est basée sur les notions plus générales qui définissent le copyright. Agissant de la sorte elle ignore le coté fonctionnel de l'API Java et émet un jugement général sur le copyright des API qui n'était pas de circonstance.
En fait, les bases du copyright sont définie ici avec une vision plutôt étroites: le programmeur qui choisit entre plusieurs moyens de déclarer une fonction est comme le plombier qui peut choisir entre une clé à pipe ou une clé à molette pour dévisser un boulon... le fait de choisir un outil parmi plusieurs serait un acte créatif!

Mise à jour 10 octobre 2014

Google demande à la Cour Suprême d'annuler le décision en appel en dénonçant un monopole possible sur les block de base de de conception et programmation des ordinateurs. Il compare le cas avec celui de Remington qui aurait pu réclamer des droits sur le clavier QWERTY à tous les fabricants de machine à écrire et ainsi s'approprier les revenus du travail accompli pour les rendre commercialisable. Même si la Cour Suprême refuse de statuer (ce qui est le plus souvent le cas lorsqu'on la sollicite) il y aura un nouveau procès devant le juge Alsup pour déterminer les dommages éventuels.

Dans tous les cas, on regrettera que Google ait choisi Java comme langage pour la plateforme Android, plutôt que LLVM ou tout autre solution, d'autant qu'elle a entièrement réécrit l'implémentation de l'API Java, elle aurait pu implémenter une API différente dans un autre langage. Et Oracle bien sûr ne prend pas en compte ce que cela a apporté à Java quand il fait ses compte.

Mise à jour 30 juin 2015

La Cour Suprême à dénié le 29 juin à Google un jugement pour remettre en cause le verdict d'appel, ce qui fait que les API restent sous copyright aux USA. Mais elle considère que leur utilisation peut être considéré fair-play et renvoie les deux parties devant un nouveau tribunal pour en juger. Il n'est pas exclu qu'elle juge le dossier une fois les procès exhaustés devant les juridictions inférieures.
Oracle déclare qu'il s'agit d'une victoire pour l'innovation et ceux qui comptent sur le copyright pour attiser l'innovation. Rappelons que Java date de 1995 et Dalvik de 2008. Et aussi qu'Oracle avait fait ce procès pour ses brevets logiciels et c'est seulement en voyant qu'il n'étaient pas utilisés par Google, qu'elle a ajouté la question des API à ses plaintes.

Mise à jour 30 décembre 2015

Google a décidé de remplacer son implémentation de l'API d'Oracle par OpenJDK, une version avec licence libre GPL 2. Cela ne changera rien pour les programmes déjà compilés, et pas grand chose pour les développeurs de nouvelles applications car les API sont similaires. Google va aussi contribuer à OpenJDK.
Google utilisait un fork de l'API standard nommé Harmony. Sun puis Oracle ont développé OpenJDK pour contrecarrer Harmony (en 2007), mais après le développement d'Android (vers 2004). Google aurait pu passer à OpenJDK plus tôt mais n'avait pas de raison de le faire. Ce procès lui a donné cette raison.
Pour résumer, des suites des actions d'Oracle envers Google, les API sont sous copyright, ce qui peut concerner les développeurs de tout langage de programmation, mais cela ne concerne plus Google qui utilise l'API Oracle implémentée sous licence libre!

Mise à jour le 26 mai 2016: Le fair use est établi par les jurés

Suite à la décision de la cour suprême de renvoyer les parties devant le premier tribunal pour juger si l'utilisation des API Java par Google tient du fair use (utilisation équitable), les jurés ont donné raison à Google: des 9 milliards de dollars que réclamait Oracle, par un sou ne lui sera attribué. C'est une défaite totale pour le nouveau détenteur des droits sur Java.

Les arguments d'Oracle pour réclamer une telle somme semblaient faibles dès le départ. Ses avocats se sont évertués à démontrer que les ventes de licences de Java Mobile ont chuté du fait de la concurrence d'Android, un système gratuit, mais ils n'ont pas démontré que c'est l'utilisation des API Java qui ont fait le succès d'Android. Il aurait pu avoir le même succès sous Objective-C (comme l'iPhone), sous LLVM ou .NET, puisque Google a créé sa propre machine virtuelle (Dalvik) et sa propre implémentation des API. Dans un tel cas de figure, Java aurait même perdu de son importance en général.
Par ailleurs le litige concerne 11500 lignes de "code" pour les déclarations qui font cette partie de l'API Java alors qu'Android à 13 millions de lignes de code.

Mises à jour de 2016 à 2018

Le 27 septembre 2016 le juge Alstup a refusé à Oracle la tenue d'un nouveau procès, estimant que les arguments de ce dernier pour cela étaient mal fondés. (Source)

Mais le 27 mars 2018, la cour d'appel a estimé qu'un jury ne pouvait décider de la question du fair use, seuls les faits sont de son ressort, et renvoie l'affaire devant un nouveau tribunal pour estimer les dommages à payer par Google.

Plus d'informations...