Article de reference

Java (langage de programmation)

{{cite magazine|url=https://www.forbes.com/sites/oracle/2015/05/20/javas-20-years-of-innovation/|title=Java's 20 Years of Innovation|magazine=Forbes|date=May 20, 2015|access-dat...

Page semi-protégée
langage de programmation orienté objet , généraliste et sûr en mémoire . Il est conçu pour permettre aux programmeurs d'écrire une fois et d'exécuter partout (WORA) , ce qui signifie que le code Java compilé peut s'exécuter sur toutes les plateformes compatibles Java sans nécessiter de recompilation . Les applications Java sont généralement compilées en bytecode exécutable sur n'importe quelle machine virtuelle Java (JVM), quelle que soit l' architecture sous- jacente . La syntaxe de Java est similaire à celle de C et C++ , mais offre moins de fonctionnalités de bas niveau . L' environnement d'exécution Java fournit des capacités dynamiques (telles que la programmation réflexive et la modification du code à l'exécution) généralement indisponibles dans les langages compilés traditionnels.

Java a rapidement gagné en popularité après sa sortie et est depuis lors un langage de programmation très répandu. GitHub . Bien que toujours très populaire, l'utilisation de Java a progressivement diminué ces dernières années, d'autres langages utilisant la JVM gagnant en popularité.

Java a été conçu par James Gosling chez Sun Microsystems . Il a été lancé en mai 1995 en tant que composant essentiel de la plateforme Java de Sun. Les compilateurs Java d'origine et de référence , les machines virtuelles (VM) et les bibliothèques de classes ont été distribués par Sun sous des licences propriétaires . En mai 2007, conformément aux spécifications du Java Community Process , Sun a placé la plupart de ses technologies Java sous la licence GPL-2.0 uniquement . Oracle , qui a racheté Sun en 2010, propose sa propre machine virtuelle Java, HotSpot . Cependant, l' implémentation de référence officielle reste la JVM OpenJDK , un logiciel libre utilisé par la plupart des développeurs et qui est la JVM par défaut de presque toutes les distributions Linux .

Duke , la mascotte de Java
James Gosling , le créateur de Java, en 2008

James Gosling , Mike Sheridan et Oak , en référence à un chêne qui se dressait devant le bureau de Gosling. Plus tard, le projet a porté le nom de Green , puis a finalement été renommé Java , d'après le café Java , un type de café indonésien . Gosling a conçu Java avec une syntaxe de type C / C++ , familière aux programmeurs système et d'applications.

Sun Microsystems a publié la première implémentation publique sous le nom de Java 1.0 en 1996 Ce langage promettait une fonctionnalité WORA ( Write Once, Run Anywhere ), offrant un environnement d'exécution gratuit sur les plateformes les plus courantes . Relativement sécurisé et doté d'une sécurité configurable, il permettait de restreindre l'accès au réseau et aux fichiers. Les principaux navigateurs web ont rapidement intégré la possibilité d'exécuter des applets Java au sein des pages web, et Java a rapidement gagné en popularité. Le compilateur Java 1.0 a été réécrit en Java par Arthur van Hoff afin de se conformer strictement à la spécification du langage Java 1.0 . Avec l'arrivée de Java 2 (initialement publié sous le nom de J2SE 1.2 en décembre 1998-1999 ) , les nouvelles versions proposaient plusieurs configurations conçues pour différents types de plateformes. J2EE incluait des technologies et des API pour les applications d'entreprise généralement exécutées dans des environnements serveur, tandis que J2ME offrait des API optimisées pour les applications mobiles. La version pour ordinateurs de bureau a été renommée J2SE. En 2006, à des fins marketing, Sun a renommé les nouvelles versions de J2 respectivement Java EE , Java ME et Java SE .

En 1997, Sun Microsystems a sollicité l' organisme de normalisation ISO/IEC JTC 1 , puis Ecma International, afin de formaliser Java, mais s'est rapidement retiré du processus. Java demeure une norme de facto , contrôlée par le biais du Java Community Process . À une époque, Sun proposait gratuitement la plupart de ses implémentations Java, malgré leur statut de logiciel propriétaire . Sun tirait des revenus de Java grâce à la vente de licences pour des produits spécialisés tels que Java Enterprise System.

Le 13 novembre 2006, Sun a publié une grande partie de sa machine virtuelle Java (JVM) en tant que logiciel libre et open source (FOSS), sous les termes de la licence GPL-2.0 uniquement . Le 8 mai 2007, Sun a finalisé le processus, rendant disponible l'intégralité du code source de base de sa JVM sous les termes d'une distribution de logiciel libre /open source, à l'exception d'une petite portion de code dont Sun ne détenait pas les droits d'auteur.

Le vice-président de Sun, Rich Green, a déclaré que le rôle idéal de Sun concernant Java était celui d' évangéliste . Suite à l'acquisition de Sun Microsystems par Oracle Corporation en 2009-2010, Oracle s'est présentée comme la gardienne de la technologie Java, avec un engagement sans faille à promouvoir une communauté de participation et de transparence. Cela n'a pas empêché Oracle de porter plainte contre Google peu après pour l'utilisation de Java dans le SDK Android (voir la section Android ).

Le 2 avril 2010, James Gosling a démissionné d' Oracle .

En janvier 2016, Oracle a annoncé que les environnements d'exécution Java basés sur JDK 9 abandonneraient le plugin navigateur.

Le logiciel Java fonctionne sur la plupart des appareils, des ordinateurs portables aux centres de données , des consoles de jeux aux supercalculateurs scientifiques .

Oracle (et d'autres) recommandent fortement de désinstaller les versions obsolètes et non prises en charge de Java, en raison de problèmes de sécurité non résolus dans les versions plus anciennes.

Principes

La création du langage Java visait cinq objectifs principaux :

  1. Il doit être simple, orienté objet et familier.
  2. Il doit être robuste et sécurisé.
  3. Il doit être indépendant de toute architecture et portable.
  4. Il doit s'exécuter avec des performances élevées.
  5. Il doit être interprété , multithread et dynamique .

Versions

à support à long terme (LTS).

Oracle a publié la dernière mise à jour publique gratuite pour l' ancienne version Java 8 LTS en janvier 2019 pour un usage commercial, tout en continuant à prendre en charge Java 8 avec des mises à jour publiques pour un usage personnel, et ce indéfiniment. D'autres fournisseurs, tels qu'Adoptium, continuent de proposer des versions gratuites des outils de support à long terme (LTS) d'OpenJDK. Ces versions peuvent inclure des correctifs de sécurité et des corrections de bogues supplémentaires.

Versions majeures de Java, ainsi que leurs dates de sortie :

VersionDate
JDK Beta1995
JDK 1.023 janvier 1996
JDK 1.119 février 1997
J2SE 1.28 décembre 1998
J2SE 1.38 mai 2000
J2SE 1.46 février 2002
J2SE 5.030 septembre 2004
Java SE 611 décembre 2006
Java SE 728 juillet 2011
Java SE 8 (LTS)18 mars 2014
Java SE 921 septembre 2017
Java SE 1020 mars 2018
Java SE 11 (LTS)25 septembre 2018
Java SE 1219 mars 2019
Java SE 1317 septembre 2019
Java SE 1417 mars 2020
Java SE 1515 septembre 2020
Java SE 1616 mars 2021
Java SE 17 (LTS)14 septembre 2021
Java SE 1822 mars 2022
Java SE 1920 septembre 2022
Java SE 2021 mars 2023
Java SE 21 (LTS)19 septembre 2023
Java SE 2219 mars 2024
Java SE 2317 septembre 2024
Java SE 2418 mars 2025
Java SE 25 (LTS)16 septembre 2025
Java SE 2617 mars 2026

Éditions

API afin qu'elles appartiennent à l'une de ces plateformes. Ces plateformes sont :

Les classes des API Java sont organisées en groupes distincts appelés packages . Chaque package contient un ensemble d' interfaces , de classes, de sous-packages et d'exceptions associés .

Sun proposait également une édition appelée Personal Java , qui a été remplacée par des paires de profils de configuration Java ME plus récentes et basées sur des normes.

Système d'exécution

JVM Java et bytecode

la portabilité , ce qui signifie que les programmes écrits pour la plateforme Java doivent fonctionner de manière similaire sur toute combinaison de matériel et de système d'exploitation disposant d'une prise en charge d'exécution adéquate. Ceci est réalisé en compilant le code Java en une représentation intermédiaire appelée bytecode JVM , au lieu de le compiler directement en code machine spécifique à l'architecture . Les instructions du bytecode JVM sont analogues au code machine, mais elles sont destinées à être exécutées par une machine virtuelle (VM) conçue spécifiquement pour le matériel hôte. Les utilisateurs finaux utilisent généralement un environnement d'exécution Java (JRE) installé sur leur appareil pour les applications Java autonomes ou un navigateur web pour les applets Java .

Les bibliothèques standard offrent un moyen générique d'accéder aux fonctionnalités spécifiques à l'hôte telles que les graphismes, le multithreading et la mise en réseau .

L'utilisation du bytecode universel simplifie le portage. Cependant, la surcharge liée à l'interprétation du bytecode en instructions machine rend les programmes interprétés presque toujours plus lents que les exécutables natifs . Les compilateurs Just-In-Time (JIT), qui compilent le bytecode en code machine à l'exécution, ont été introduits très tôt. Le compilateur Hotspot de Java est en réalité composé de deux compilateurs : GraalVM (inclus dans Java 11, par exemple, mais supprimé à partir de Java 16) permet machine virtuelle Java (JVM), qui traduit le bytecode JVM en langage machine de la plateforme.

Performance

C++ . Cependant, la vitesse d'exécution des programmes Java s'est considérablement améliorée avec l'introduction de la compilation à la volée (JIT) en 1997/1998 pour Java 1.1 , l'ajout de fonctionnalités du langage favorisant une meilleure analyse du code (telles que les classes internes, la classe StringBuilder, les assertions optionnelles, etc.) et les optimisations de la machine virtuelle Java, comme le choix de HotSpot comme JVM par défaut de Sun en 2000. Avec Java 1.5, les performances ont été améliorées grâce à l'ajout du sans verrou des ConcurrentMaps et d'autres collections multicœurs, et encore améliorées avec Java 1.6.

Non-JVM

Certaines plateformes offrent une prise en charge matérielle directe pour Java ; il existe des microcontrôleurs qui peuvent exécuter du bytecode JVM en matériel au lieu d'une machine virtuelle Java logicielle, et certains processeurs basés sur ARM pourraient avoir une prise en charge matérielle pour l'exécution de bytecode JVM via leur option Jazelle , bien que la prise en charge ait été en grande partie abandonnée dans les implémentations actuelles d'ARM.

Gestion automatique de la mémoire

Java utilise un ramasse-miettes automatique pour gérer la mémoire durant le cycle de vie des objets . Le programmeur détermine la création des objets, et l'environnement d'exécution Java se charge de récupérer la mémoire une fois les objets inutilisés. Dès qu'il ne reste plus aucune référence à un objet, la mémoire inaccessible peut être libérée automatiquement par le ramasse-miettes. Un problème similaire à une fuite de mémoire peut néanmoins survenir si le code du programmeur conserve une référence à un objet devenu inutile, généralement lorsque des objets inutilisés sont stockés dans des conteneurs encore utilisés. Si des méthodes d'un objet inexistant sont appelées, une exception de pointeur nul est levée.

L'un des principes du modèle de gestion automatique de la mémoire de Java est de libérer les programmeurs de la gestion manuelle de la mémoire. Dans certains langages, la mémoire nécessaire à la création d'objets est allouée implicitement sur la pile ou explicitement allouée et libérée du tas . Dans ce dernier cas, la responsabilité de la gestion de la mémoire incombe au programmeur. Si le programme ne libère pas un objet, une fuite de mémoire se produit. Si le programme tente d'accéder à une mémoire déjà libérée ou de la libérer, le résultat est indéfini et difficile à prévoir, et le programme risque de devenir instable ou de planter. L'utilisation de pointeurs intelligents permet d'atténuer partiellement ce problème , mais cela engendre une surcharge et une complexité supplémentaires. Le ramasse-miettes ne prévient pas les fuites de mémoire logiques , c'est-à-dire celles où la mémoire est référencée mais jamais utilisée.

Le ramasse-miettes peut s'effectuer à tout moment. Idéalement, il a lieu lorsqu'un programme est inactif. Il est systématiquement déclenché si la mémoire libre sur le tas est insuffisante pour allouer un nouvel objet ; cela peut entraîner un blocage momentané du programme. La gestion explicite de la mémoire n'est pas possible en Java, mais il est possible de configurer manuellement la JVM pour qu'elle effectue le ramasse-miettes .

Java ne prend pas en charge l'arithmétique des pointeurs de type C/C++ , où les adresses d'objets peuvent être manipulées arithmétiquement (par exemple en ajoutant ou en soustrayant un décalage). Ceci permet au ramasse-miettes de relocaliser les objets référencés et garantit la sûreté des types et la sécurité.

Comme en C++ et dans certains autres langages orientés objet, les variables de types primitifs en Java sont stockées soit directement dans des champs (pour les objets), soit sur la pile (pour les méthodes), et non sur le tas comme c'est généralement le cas pour les types non primitifs (voir toutefois l'analyse d'échappement ). Ce choix a été délibérément fait par les concepteurs de Java pour des raisons de performance.

Java intègre plusieurs types de ramasse-miettes. Depuis Java 9, HotSpot utilise le ramasse-miettes Garbage First (G1GC) par défaut. Cependant, d'autres ramasse-miettes peuvent être utilisés pour gérer le tas, tels que le ramasse-miettes Z (ZGC), introduit dans Java 11, et Shenandoah GC, introduit dans Java 12 mais indisponible dans les distributions OpenJDK d'Oracle. Shenandoah est en revanche disponible dans les distributions OpenJDK tierces, comme Eclipse Temurin . Pour la plupart des applications Java, G1GC est suffisant. Dans les versions antérieures de Java, comme Java 8, le ramasse-miettes parallèle était utilisé par défaut.

Ce graphe de dépendances des classes Java Core a été créé avec jdeps et Gephi .

La syntaxe de Java est fortement influencée par C++ et C. Contrairement à C++, qui combine les syntaxes de la programmation structurée, générique et orientée objet, Java a été conçu presque exclusivement comme un langage orienté objet. Tout le code est écrit à l'intérieur de classes, et chaque donnée est un objet, à l'exception des types primitifs (entiers, nombres à virgule flottante, booléens et caractères), qui ne sont pas des objets pour des raisons de performance.

Contrairement à C++, Java ne prend pas en charge la surcharge d'opérateurs ni l'héritage multiple pour les classes, bien que l'héritage multiple soit pris en charge pour les interfaces .

Java utilise des commentaires similaires à ceux de C++. Il existe trois styles de commentaires : un style sur une seule ligne, délimité par deux barres obliques ( //), un style sur plusieurs lignes, ouvert par /*et fermé par */, et le style Javadoc , ouvert par /**et fermé par */. Ce dernier permet à l’utilisateur d’exécuter le fichier Javadoc pour générer la documentation du programme. Cette documentation peut ensuite être lue par certains environnements de développement intégrés (IDE), tels qu’Eclipse , permettant ainsi aux développeurs d’accéder à la documentation directement depuis l’IDE.

Bonjour le monde

Voici un exemple de programme « Hello, World ! » en syntaxe Java traditionnelle :

Bonjour le monde ! " ) ;}}

Java 25 a introduit une syntaxe simplifiée pour la classe principale et la méthode principale, ce qui permet aux utilisateurs d'écrire de petits programmes Java de manière succincte :

" ) ;}

classes spéciales

La technologie des servlets Java offre aux développeurs Web un mécanisme simple et cohérent pour étendre les fonctionnalités d'un serveur Web et accéder aux systèmes d'entreprise existants. Les servlets sont des composants Java EE côté serveur qui génèrent des réponses aux requêtes des clients . Le plus souvent, cela implique la génération de pages HTML en réponse aux requêtes HTTP , bien qu'il existe d'autres classes de servlets standard, par exemple pour la communication WebSocket .

L'API Java Servlet a été en partie remplacée (mais est toujours utilisée en interne) par deux technologies Java standard pour les services web :

Les implémentations typiques de ces API sur les serveurs d'applications ou les conteneurs de servlets utilisent une servlet standard pour gérer toutes les interactions avec les requêtes et réponses HTTP qui délèguent aux méthodes du service Web la logique métier proprement dite.

Pages JavaServer

JSP ) sont des composants Java EE côté serveur qui génèrent des réponses, généralement des pages HTML , aux requêtes HTTP des clients . Les JSP intègrent du code Java dans une page HTML à l'aide des délimiteurs<% spéciaux `<script> ` et ` %></script>`. Lors de son premier accès, une JSP est compilée en une servlet Java , une application Java à part entière. Ensuite, la servlet générée crée la réponse.

application Swing

Swing est une bibliothèque d'interface utilisateur graphique pour la plateforme Java SE. Grâce à son système d' interface personnalisable, il est possible de définir une apparence différente . Sun propose des clones de Windows , GTK+ et Motif. Apple fournit également l' interface Aqua pour macOS . Alors que les implémentations précédentes de ces interfaces pouvaient être jugées insuffisantes, Swing dans Java SE 6 remédie à ce problème en utilisant davantage les routines de dessin natives des widgets d'interface graphique des plateformes sous-jacentes.

Application JavaFX

JavaFX est une plateforme logicielle permettant de créer et de distribuer des applications de bureau , ainsi que des applications web riches compatibles avec une grande variété d'appareils. JavaFX est conçu pour remplacer Swing comme bibliothèque d'interface graphique (GUI) standard pour Java SE , mais depuis le JDK 11, il n'est plus intégré au JDK et est disponible en tant que module distinct. JavaFX est compatible avec les ordinateurs de bureau et les navigateurs web sous Microsoft Windows , Linux et macOS . Il ne prend cependant pas en charge l'interface utilisateur native des systèmes d'exploitation.

Génériques

les génériques ont été introduits dans le langage Java, dans le cadre de J2SE 5.0. Avant leur introduction, chaque déclaration de variable devait être d'un type spécifique. Pour les classes conteneurs, par exemple, cela posait problème car il n'existait aucun moyen simple de créer un conteneur n'acceptant que certains types d'objets. Soit le conteneur opérait sur tous les sous-types d'une classe ou d'une interface, généralement `List<T>` Object, soit une classe conteneur différente devait être créée pour chaque classe contenue. Les génériques permettent une vérification des types à la compilation sans avoir à créer de nombreuses classes conteneurs, chacune contenant un code quasi identique. Outre une écriture plus efficace, certaines exceptions d'exécution sont évitées grâce à la génération d'erreurs à la compilation. Si Java empêchait toutes les erreurs de type à l' ClassCastExceptionexécution, il serait totalement sûr en termes de types .

En 2016, il a été démontré que le système de types de Java est défectueux, car il est possible d'utiliser les génériques pour construire des classes et des méthodes permettant d'affecter une instance d'une classe à une variable d'une autre classe sans lien avec celle-ci. Un tel code est accepté par le compilateur, mais échoue à l'exécution avec une exception de conversion de type.

Critique

HotSpot , l'implémentation principale de la machine virtuelle Java . Les développeurs ont critiqué la complexité et la verbosité de l'API Java Persistence (JPA), composante standard de Java EE. Ceci a favorisé l'adoption d'abstractions de plus haut niveau comme Spring Data JPA, qui vise à simplifier les opérations de base de données et à réduire le code répétitif. La popularité croissante de ces frameworks suggère que l'implémentation standard de JPA présente des limites en termes de facilité d'utilisation pour le développement Java moderne.

bibliothèques de classes

bibliothèque de classes Java (JCL) est la bibliothèque standard développée pour faciliter le développement d'applications en Java. Elle est gérée par Oracle en collaboration avec d'autres acteurs via le programme Java Community Process (JCP) . Les entreprises et les personnes participant à ce processus peuvent influencer la conception et le développement des API. Ce processus a fait l'objet de controverses au cours des années 2010. La bibliothèque de classes comprend notamment les fonctionnalités suivantes :

Documentation

Sun Microsystems . Il offre aux développeurs un système organisé pour documenter leur code. Les commentaires Javadoc commencent par un astérisque supplémentaire, c'est-à-dire que les délimiteurs sont `<br>` /**et */`<p>`, tandis que les commentaires multilignes classiques en Java sont délimités par `<br>` /*et ` */<p>`, et les commentaires sur une seule ligne commencent par `<br>` //.

Mises en œuvre

Oracle Corporation détient l'implémentation officielle de la plateforme Java SE, suite à l'acquisition de Sun Microsystems le 27 janvier 2010. Cette implémentation est basée sur l'implémentation originale de Java développée par Sun. L'implémentation Oracle est disponible pour Windows , macOS , Linux et Solaris . En l'absence de toute normalisation formelle de Java reconnue par Ecma International , l'ISO/IEC, l'ANSI ou d'autres organismes de normalisation tiers, l'implémentation Oracle fait office de norme de facto .

L'implémentation Oracle est distribuée sous deux formes : l'environnement d'exécution Java (JRE), qui contient les composants de la plateforme Java SE nécessaires à l'exécution des programmes Java et est destiné aux utilisateurs finaux, et le kit de développement Java (JDK), destiné aux développeurs et incluant des outils de développement tels que le compilateur Java , Javadoc , Jar et un débogueur . Oracle a également publié GraalVM , un compilateur et interpréteur Java dynamique haute performance.

OpenJDK est une autre implémentation de Java SE distribuée sous licence GNU GPL. Son développement a débuté lorsque Sun a commencé à publier le code source de Java sous cette licence. Depuis Java SE 7, OpenJDK est l'implémentation de référence officielle de Java.

L'objectif de Java est de rendre toutes les implémentations de Java compatibles. Historiquement, la licence de marque de Sun pour l'utilisation de la marque Java exige que toutes les implémentations soient compatibles . Cela a engendré un litige avec Microsoft , Sun affirmant que l'implémentation de Microsoft ne prenait pas en charge l'invocation de méthodes à distance (RMI) ni l'interface native Java (JNI) et avait ajouté des fonctionnalités spécifiques à sa plateforme. Sun a porté plainte en 1997 et, en 2001, a obtenu un règlement à l'amiable de 20 millions de dollars américains, ainsi qu'une injonction judiciaire contraignant Sun à respecter les termes de la licence. En conséquence, Microsoft ne fournit plus Java avec Windows .

L'indépendance de la plateforme Java est essentielle à Java EE , et une validation encore plus rigoureuse est requise pour certifier une implémentation. Cet environnement permet le développement d'applications serveur portables.

Utilisation en dehors de la plateforme Java

Le langage de programmation Java nécessite la présence d'une plateforme logicielle pour que les programmes compilés puissent être exécutés.

Oracle fournit la plateforme Java pour son utilisation avec Java. Le kit de développement logiciel Android (SDK) est une plateforme logicielle alternative, principalement utilisée pour le développement d'applications Android dotées de leur propre interface graphique.

Androïde

Android , un système d'exploitation mobile open source . Bien qu'Android, basé sur le noyau Linux , soit principalement écrit en C, le kit de développement logiciel (SDK) Android utilise Java comme base pour les applications Android, mais n'utilise aucune de ses interfaces graphiques (GUI), ni les standards SE et ME, ni aucun autre standard Java établi. Le bytecode pris en charge par le SDK Android est incompatible avec celui de la JVM et s'exécute sur sa propre machine virtuelle, optimisée pour les appareils à faible mémoire tels que les smartphones et les tablettes . Selon la version d'Android, le bytecode est soit interprété par la machine virtuelle Dalvik , soit compilé en code natif par l' environnement d'exécution Android (Android Runtime ).

Android ne fournit pas l'intégralité de la bibliothèque standard Java SE, bien que le kit de développement logiciel (SDK) Android inclue une implémentation indépendante d'une grande partie de celle-ci. Il prend en charge Java 6 et certaines fonctionnalités de Java 7, offrant une implémentation compatible avec la bibliothèque standard ( Apache Harmony ).

Controverse

William Alsup a statué le 31 mai 2012 que les API ne pouvaient être protégées par le droit d'auteur, mais cette décision a été infirmée par la Cour d'appel des États-Unis pour le circuit fédéral en mai 2014. Le 26 mai 2016, le tribunal de district a donné raison à Google, jugeant que la violation du droit d'auteur de l'API Java dans Android relevait de l'usage loyal. En mars 2018, cette décision a été cassée par la Cour d'appel, qui a renvoyé l'affaire devant un tribunal fédéral de San Francisco afin de déterminer le montant des dommages et intérêts. En janvier 2019, Google a déposé un pourvoi en cassation auprès de la Cour suprême des États-Unis afin de contester les deux arrêts rendus par la Cour d'appel en faveur d'Oracle. Le 5 avril 2021, la Cour a statué à six voix contre deux en faveur de Google, jugeant que son utilisation des API Java relevait de l'usage loyal . Toutefois, la Cour a refusé de se prononcer sur la protection par le droit d'auteur des API, préférant considérer l'API Java comme protégeable « à titre purement spéculatif ».

Plus d articles de Worldlex Wiki

Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.

Explorer l index