Java et logiciel libre
114905
30882828
2008-06-22T15:04:54Z
Dhatier
269771
ortho
{{À réactualiser}}
Bien que '''[[Java (langage)|Java]]''' ne soit pas officiellement '''libre''' (devenu faux le {{Date|13|novembre|2006}} voir [[#La politique de Sun|plus loin]]), sa licence est suffisamment ouverte pour avoir permis l'éclosion d'un grand nombre d'outils libres dans les domaines les plus variés.
== Discussion sur la licence de Java ==
== Licence n°1! ==
La licence de Java (Sun Community Sourced License - SCSL) permet :
* L'acquisition gratuite sur le site de Sun de la JRE (machine virtuelle accompagnée des bibliothèques de base)
* La redistribution gratuite de la JRE si elle accompagne une application écrite en Java à destination d'un ordinateur de bureau ou serveur à usage général, sont donc soumis à royalties les machines spécialisées pour un seul usage (comme les téléphones, les consoles de jeu, les voitures etc...) ce que l'on appelle "logiciel embarqué".
La licence Java ne permet pas :
* La décompilation, la modification de la plate-forme Java
Cette licence ne permet pas de considérer la technologie Java comme libre. Elle permet en revanche de créer des outils, des logiciels et des bibliothèques libres écrites en Java.
Un organisme indépendant, le [[JCP]], permet de faire normaliser ces outils, afin d'unifier l'effort de développement et d'aider la promotion de ces outils.
De nombreuses voix s'élèvent depuis le début de [[2004]] pour que [[Sun Microsystems|Sun]] libère le code de Java. La demande initiale vient d'[[International Business Machines Corporation|IBM]], suivie de personnalités du monde du logiciel libre, comme [[Eric Raymond]].
Depuis mars [[2005]], Sun a introduit de nouvelles licences pour Java, augmentant son ouverture, sans toutefois devenir open-source :
* Java Internal User License (JIUL), destinée aux déploiements internes
* Java Distribution License (JDL), permettant de distribuer pleinement Java
* Java Research License (JRL), dans un but d'évaluation et d'usage non-commercial. Cette licence permet également de consulter le code source de Java.
De plus, Sun propose de contribuer au développement de la prochaine version de Java (''Mustang'') sur [http://java.sun.com/developer/technicalArticles/J2SE/peabody/ cette page].
Comme indiqué ci-dessous, Sun devrait libérer Java durant l'année 2006.
== La politique de Sun ==
La politique de Sun vise à conserver le contrôle sur l'évolution de Java, ce qui explique son refus de placer la JVM et le compilateur Java en ''open-source''.
Sun a placé par le passé la technologie [[Jini]], basée sur Java, sous une licence que Sun prétendait ''open-source''. Ceci était toutefois remis en cause, notamment par [[Linus Torvalds]] (cf. ''Il était une fois Linux'').
Toutefois, après avoir placé [[NetBeans]] en ''open-source'' en [[juin 2000]], on assiste à une évolution de Sun, qui a placé des éléments des packages Java en ''open- source'' lors de la conférence JavaOne [[2004]] :
* [[Java3D]]
* Les extensions pour [[Java Foundation Classes|JFC]] permettant de définir une interface graphique complète dans un fichier [[Extensible Markup Language|XML]] ([[XUI]]), JDNC (Java Desktop Network Components) et JDIC (Desktop Integration Components)
* L'interface graphique en 3D pour [[Linux]] [[Projet Looking Glass|Looking Glass]]
D'une manière générale, on peut noter un engagement plus fort de Sun envers le logiciel libre depuis quelque temps :
* Lancement d'une distribution Linux propre (Java Desktop System)
* [[OpenOffice.org]]
* Lancement de [http://www.java.net/ java.net], le site communautaire comprenant le [[wiki]] [http://wiki.java.net/bin/view/Javapedia/WebHome Javapedia], inspiré par [[Wikipedia]].
Début [[2005]], Sun a annoncé la création d'une nouvelle licence libre, appelée ''Common Development and Distribution License'' (CDDL). Cette licence servira à la publication d'un grand nombre de logiciels, parmi lesquels [[Solaris (informatique)|Solaris]], dans sa version [[OpenSolaris]], ainsi que Java Enterprise System et Java Desktop System. Il est possible (ce qui veut dire que cela a été évoqué) que l'intégralité du catalogue logiciel de Sun soit publié sous cette licence, ce qui inclurait donc la plate-forme Java.
En juin [[2005]], Sun a annoncé le lancement d'un projet open-source pour créer la prochaine version de Java System Application Server dans sa version destinée aux développeurs, sous le nom de ''projet GlassFish'', ainsi que de sa spécification de [[bus d'intégration]] Java, [[JBI]].
En [[2006]], Sun a décidé de libérer l'intégralité de ses outils de développement, y compris ceux pour Java, à savoir [[Java Studio Creator]] et [[Java Studio Enterprise]] ([[NetBeans]] était déjà libre).
De plus, durant son discours d'ouverture de la conférence [[JavaOne]] le [[16 mai]], le nouveau CEO de Sun, [[Jonathan Schwartz]], a indiqué qu'il avait l'intention de rendre Java libre.
Le [[13 novembre]] [[2006]], Sun met le cœur de la technologie Java, le JDK (la JRE - JVM et bibliothèques - et les outils de développement, dont le compilateur javac) sous licence [[Licence publique générale GNU|GPL]] version 2, ainsi que du framework Java ME. L'implémentation Sun de Java EE ([[GlassFish]]), déjà sous licence libre [[CDDL]] se voit rajouter également la licence GPL. Ce changement met donc fin à l'aspect propriétaire de Java, qui devient finalement un [[logiciel libre]].
Le [[8 mai]] [[2007]], Sun annonce que Java est désormais totalement en Open Source dans le projet [http://openjdk.java.net OpenJDK]
== Implémentations libres de Java ==
La [[Free Software Foundation]] a été la première à tenter de créer des éléments d'une implémentation libre de Java, à travers deux projets distincts :
* [[GNU Classpath]], une implémentation libre des bibliothèques Core de Java
* [[GCJ]], une extension du compilateur [[GNU Compiler Collection|GCC]] permettant de compiler du code Java
Au mois de mai [[2005]], la fondation Apache a annoncé le lancement du projet [[Apache Harmony|Harmony]], visant à créer un environnement Java libre complet, avec compilateur, JVM et bibliothèques Core. Le projet vise la compatibilité [[J2SE]].
D'autres éléments de l'environnement Java ont été implémentés dans une version libre :
* [[Kaffe]], une machine virtuelle
* [[Black-down]], une machine virtuelle
* [[Jikes]], un compilateur
* [[Jikes RVM]], une machine virtuelle
* [[SableVM]], une machine virtuelle
== Outils Java libres ==
Les outils libres pour Java appartiennent essentiellement à 4 catégories :
* Outils de développement
* Serveurs
* Bibliothèques
* Logiciels complets
=== Outils de développement ===
{| class=wikitable
! Nom !! Version actuelle (date) !! Description !! Licence !! Lien externe
|-
| [[Apache Ant|Ant]] || 1.6.5 (02/06/2005) || Outil de construction d'application || Apache Software License 2.0 || http://ant.apache.org/
|-----
| Avalon || 4.2 || Outil de développement de composants par ''[[design pattern]]s'' || Apache Software License || http://avalon.apache.org/index.html
|-
| [[Eclipse (environnement de développement)|Eclipse]] || 3.3 || Environnement de développement || Common Public License 1.0 || http://www.eclipse.org/
|-----
| Jakarta Cactus || 1.6.1 || ''Framework'' de test pour applications Web, basé sur JUnit || Apache Software License || http://jakarta.apache.org/cactus/index.html
|-
| [[GCJ|GNU Compiler for Java]] (GCJ) || 4.1.1 (version de GCC) || Compilateur permettant la compilation native, sur des plate-formes variées (Linux sur PC, Alpha, Itanium, PowerPC, Athlon 64, SH-3/4, Solaris sur SPARC, BSD sur PC, Irix, Windows, MacOS X...), inclus dans GCC || GPL || http://gcc.gnu.org/java/
|-----
| [[jEdit]] || 4.2 || Editeur de texte orienté programmation écrit en Java || GPL || http://www.jedit.org/index.php
|-
| [[Jikes]] || 1.21 || Compilateur || IBM Public Licence || http://www-124.ibm.com/developerworks/oss/jikes/
|-----
| [[JMeter|Jakarta JMeter]]|| 2.0.1 || Outil de mesure des performances || Apache Software License || http://jakarta.apache.org/jmeter/index.html
|-
| JSwat || 1.5.4 || Débogueur graphique || GPL || http://www.bluemarsh.com/java/jswat/
|-----
| JUnit || 3.8.1 || ''Framework'' de test unitaire automatisé, orienté Extreme Programming || Common Public License || http://www.junit.org/index.htm
|-
| [[Kaffe]] || 1.0.7 || Machine virtuelle || GPL || http://www.kaffe.org/
|-----
| [[Apache Maven|Maven]] || 1.0 (13/07/2004) || Outil d'intégration d'application et de gestion de projet|| Apache Software License 2.0 || http://maven.apache.org/
|-
| [[NetBeans]] || 3.6 (03/09/2004) || Environnement de développement || Sun Public License || http://www.netbeans.org/
|-----
| SableCC || 2.18.2 || Générateur de compilateurs orientés-objets || LGPL || http://sablecc.org/
|-
| [[SableVM]] || 1.1.9 || Machine virtuelle || LGPL || http://sablevm.org/
|-----
| Jakarta Watchdog || 4.0 || Outil de validation de code pour ''servlets'' et JSP || Apache Software License || http://jakarta.apache.org/watchdog/index.html
|-
| [[XDoclet]]|| 1.2.2 || Outil de génération de code || Apache Software License || http://xdoclet.sourceforge.net/xdoclet/index.html
|-----
| Jalopy || 1.3 || Outil permettant la mise en page du code java selon des règles prédéfinies || BSD License || http://jalopy.sourceforge.net/
|-
| Checkstyle || 4 (2006) || Outil de contrôle des normes de développement || LGPL || http://checkstyle.sourceforge.net/
|}
=== Serveurs ===
{| class=wikitable
! Nom !! Version actuelle (date) !! Description !! Licence !! Lien externe
|-----
| [[GlassFish]] || 2 beta || Serveur complet Java EE 5 (clustering compris) || CDDL et GPL || http://glassfish.java.net
|-
|-----
| [[EasyBeans]] || 1.0RC1 || Conteneur léger et serveur EJB3.0 || LGPL || http://www.easybeans.org
|-
| [[Apache Tomcat|Jakarta Tomcat]] || 5.5 (03/09/2004) || Serveur Web et conteneur de ''servlets'', compatible JSP || Apache Software License 2.0 || http://jakarta.apache.org/tomcat/index.html
|-----
| [[Jetty]] || 5.0 || Serveur Web et conteneur de ''servlets'', compatible JSP || Apache Software Licence || http://www.mortbay.org/jetty/index.html
|-
| [[JBoss]] || 4.0 || Conteneur et serveur d'EJB, de ''servlets'' et de JSP (par embarquement de Tomcat), totalement compatible J2EE || LGPL || http://www.jboss.org/index.html
|-----
| [[JOnAS]] || 4.8.6 || Serveur compatible J2EE || LGPL ||http://jonas.objectweb.org/
|-
| Enhydra Server || 5.1-15 || Conteneur et serveur de ''servlets'' orienté XML || LGPL || http://enhydra.objectweb.org/
|-----
| Java Apache Mail Enterprise Server (James) || 2.2.0 || Serveur de courriel et de ''news'' (protocoles SMTP, POP3 et NNTP) || Apache Software Licence || http://james.apache.org/
|-
| JServ || 1.1.2 || Conteneur et serveur de ''servlets'' compatible JSP. JServ est un projet en sommeil, il n'évolue plus || Apache Software Licence || http://archive.apache.org/dist/java/
|-----
| [[Apache Geronimo|Geronimo]] || 1.0-M2 || Serveur fédérant de nombreux projets Java d'Apache dans le but de créer un serveur J2EE complet et innovant, autour de JMX || Apache Software Licence || http://geronimo.apache.org/
|-
| OpenEJB || 0.9.2 || Conteneur et serveur d'EJB || Spécifique : http://www.exolab.org/license.html || http://openejb.exolab.org/
|}
=== Bibliothèques et ''frameworks'' ===
{| class=wikitable
! Nom !! Version actuelle (date) !! Description !! Licence !! Lien externe
|-
| [[Apache Cocoon|Cocoon]] || 2.1 (03/09/2004) || ''Framework'' de développement Web basé sur XML || Apache Software License 2.0 || http://cocoon.apache.org/
|-----
| [[Standard Widget Toolkit|SWT]] || 3.2 || Bibliothèque graphique || [[Eclipse Public License]] || http://www.eclipse.org/swt/
|-
| JDOM || 1.0 RC1 || Bibliothèque de ''parsing'' XML || spécifique, proche de l'Apache Software Licence || http://www.jdom.org/
|-----
| Xalan || || Moteur de transformation XSL || ||
|-
| Xerces || || Moteur de ''parsing'' XML || ||
|-----
| [[Apache Struts|Jakarta Struts]] || 1.2.2 || ''Framework'' de publication Web || Apache Software Licence || http://struts.apache.org/
|-
| JAC || || Bibliothèque pour la programmation orientée aspect || ||
|-----
| Colt || || Bibliothèque pour le calcul scientifique || || http://hoschek.home.cern.ch/hoschek/colt/
|-
| [[dom4J|dom4j]] || || Bibliothèque de ''parsing'' XML || || http://www.dom4j.org/
|-----
| Jeks || 1.0.2 || Tableur et blibliothèque permettant d'ajouter des fonctions de tableur à un logiciel || GPL || http://www.eteks.com/jeks/
|-
| Castor || 0.9.5.3 || Bibliothèque de ''mapping'' XML, de ''mapping'' relationnel/objet et de persistance, compatible JDO || spécifique, proche de la licence BSD : http://castor.exolab.org/license.html || http://castor.exolab.org/
|-----
| OpenJMS || 0.7.6.1 || Bibliothèque JMS || ||
|-
| Tyrex || 1.0.1 || Bibliothèque de gestion de transaction JTA, compatible JDBC et JNDI || spécifique, proche de la licence BSD : http://tyrex.sourceforge.net/license.html || http://tyrex.sourceforge.net/
|-----
| GNU Classpath || 0.91 || Implémentation de la bibliothèque Java standard || GPL || http://www.gnu.org/software/classpath/
|-
| iText || 1.02b || Bibliothèque permettant de générer du PDF, mais aussi du XML, du HTML et du RTF || LGPL et MPL || http://www.lowagie.com/iText/
|-----
| SugarCubes || 4.0.0a5 || Bibliothèque pour le traitement multithreadé, puis performante que les Java Threads standard || || http://homepage.mac.com/jeanferdinandsusini/SugarCubes.html
|-
| JADE || 7.0 || Bibliothèque utilitaire offrant des services aussi variés que des fonctionnalités temps réel, du calcul scientifique, la prise en compte d'unités de mesure et de monnaies, du traitement avancé de chaînes de caractères...|| LGPL || http://jade.dautelle.com/
|-----
| JContractor || 0.0.2 || Bibliothèque permettant la programmation par contrat || Apache Software Licence || http://jcontractor.sourceforge.net/
|-
| JFinance || 0.3.0 || Bibliothèque pour applications financières || GPL || http://www.object-refinery.com/jfinance/
|-----
| JWorkbook || 0.2.0 || Bibliothèque permettant de lire et d'écrire des fichiers au format du tableur Gnumeric || GPL || http://www.object-refinery.com/jworkbook/
|-
| JCommon || 0.9.5 || Bibliothèque utilisée par [[JFreeChart]] et JFreeReport. Contient des fonctions de traitement de chaînes de caractères, d'interface graphique, de traitement de dates, de sérialisation et de traitement XML || GPL || http://www.jfree.org/jcommon/
|-----
| JFreeChart || 0.9.20 || Bibliothèque permettant de créer des histogrammes, courbes, diagrammes|| GPL || http://www.jfree.org/jfreechart/
|-
| JFreeReport || 0.8.4.10 || Bibliothèque permettant de générer des ''reports'', aux formats PDF, HTML, CSV, Excel ou texte || LGPL || http://www.jfree.org/jfreereport/
|-----
| JGraph || 5.0 || Bibliothèque de génération d'organigrammes et de schémas || LGPL || http://www.jgraph.com/
|-
| JUMP || 0.4.1 || Bibliothèque de calcul scientifique || BSD || http://jump-math.sourceforge.net/
|-----
| MX4J || 2.0.1 || Bibliothèque JMX || Apache Software Licence || http://mx4j.sourceforge.net/
|-
| Jakarta Byte Code Engineering Library (BCEL) || 5.1 || Bibliothèque de manipulation du ''bytecode'' || Apache Software Licence || http://jakarta.apache.org/bcel/index.html
|-----
| Jakarta Bean Scripting Framework (BSF) || 2.3.0-rc1 || ''Framework'' permettant le scriptage d'une application à l'aide de différents langages ([[Javascript]], [[Tool Command Language|Tcl]], [[Python (langage)|Python]], [[Rexx]], [[XSLT]]...) || Apache Software Licence || http://jakarta.apache.org/bsf/index.html
|-
| Jakarta Element Construction Set (ECS) || 1.4.2 || Bibliothèque de génération de HTML || Apache Software Licence || http://jakarta.apache.org/ecs/index.html
|-----
| Jakarta HiveMind|| 1.0-rc-1 || ''Framework'' [[Service Oriented Architecture|SOA]] || Apache Software Licence || http://jakarta.apache.org/hivemind/index.html
|-
| Jakarta ORO || 2.0.8 || Bibliothèque de gestion des expressions rationnelles, fournissant également des expressions rationnelles compatibles [[Perl (langage)|Perl]] 5, [[Awk]]... || ||
|-----
| [[POI|Jakarta POI]] || 2.5.1 || Bibliothèque permettant de lire et d'écrire des fichiers dans différents formats créés par [[Microsoft]] ([[Microsoft Word|Word]], [[Microsoft Excel|Excel]], OLE2...) || Apache Software Licence || http://jakarta.apache.org/poi/index.html
|-
| Jakarta Regexp || 1.3 || Bibliothèque de gestion des expressions rationnelles || Apache Software Licence ||http://jakarta.apache.org/regexp/index.html
|-----
| Jakarta Tapestry|| 3.0 || ''Framework'' Web constituant une alternative aux JSP || Apache Software License || http://jakarta.apache.org/tapestry/index.html
|-
| Jakarta Turbine || 2.3 || Framework Web || Apache Software Licence || http://jakarta.apache.org/turbine/index.html
|-----
| [[Apache Velocity|Jakarta Velocity]] || 1.4 || Moteur de substitution basé sur un langage propre, le Velocity Template Language (VTL) || Apache Software Licence || http://jakarta.apache.org/velocity/index.html
|-
| Log4J || 1.2.13 || Bibliothèque de journalisation de l'exécution d'une application. À noter que des projets analogues existent pour C++, .net, Perl, PHP et PL/SQL || Apache Software Licence || http://logging.apache.org/log4j/docs/index.html
|-----
| [Axis (informatique)|Axis] || 1.1 || Bibliothèque [[SOAP]]. Existe aussi pour C++ || Apache Software Licence || http://ws.apache.org/axis/
|-
| jNative || 1.3 || Appels aux bibliothèques C/C++ sans utiliser manuellement [[Java Native Interface|JNI]] || LGPL || http://jnative.sf.net
|-----
| [[JasperReports]] || 1.2.6 || Bibliothèque permettant de générer des reports, aux formats PDF, HTML, CSV, XML, Excel ou texte, basé sur Itext || LGPL || http://jasperforge.org/sf/projects/jasperreports
|}
=== Logiciels complets ===
{| class=wikitable
! Nom !! Version actuelle (date) !! Description !! Licence !! Lien externe
|-
| [[XWiki]] || 0.9.840 || Logiciel de gestion de [[wiki]] || GPL || http://www.xwiki.org/
|-----
| [[Azureus]] || 2.5.0.0 || Client [[BitTorrent]] || GPL || http://azureus.sourceforge.net/
|-
| [[IRATE|iRATE]] || 0.3 || Radio || GPL || http://irate.sourceforge.net/
|-----
| [[GeoGebra]] || 2.7 || Mathématique (géométrie et algèbre) || GPL || http://www.geogebra.at/
|-
| [[GEONExT]] || 1.51 || Mathématique (géométrie dynamique) || GPL || http://www.geonext.de/
|}
=== Autres outils ===
{| class=wikitable
! Nom !! Version actuelle (date) !! Description !! Licence !! Lien externe
|-
| [[Apache Lenya|Lenya]] || 1.2 || Système de gestion de contenu basé sur Apache Cocoon || Apache Software License 2.0 || http://cocoon.apache.org/lenya/
|-----
| [[Jython]] || 2.1 || Interpréteur Python écrit en Java || spécifique : http://www.jython.org/license.html || http://www.jython.org/
|-
| BeanShell || || || || http://www.beanshell.org/
|-----
| AspectJ || 1.2 || Extension pour la programmation orientée aspect || Common Public License 1.0 || http://eclipse.org/aspectj/
|-
| Jakarta Lucene || 1.4 || Moteur de recherche || Apache Software License || http://jakarta.apache.org/lucene/docs/index.html
|-----
| Jakarta Slide || 2.0 || ''Repository'' pour serveur Web, compatible [[WebDAV]] || Apache Software License || http://jakarta.apache.org/slide/index.html
|}
== Liens externes ==
* {{fr}} [http://www.java.com/fr/download/license.jsp Licence de la technologie Java] (sur le site Java.com)
* {{en}} [http://www.catb.org/~esr/writings/let-java-go.html Lettre ouverte d'Eric Raymond pour la libération de Java]
* {{en}} [http://wiki.java.net/ Le Wiki Java sur java.net]
* {{en}} [http://java-source.net/ Un site qui recense tous les projets open-source autour de Java]
{{portail logiciel libre}}
[[Catégorie:Java]]
[[Catégorie:Logiciel libre|*]]