330 likes | 451 Views
Evento/Tema: Implementaciones libres de J2SE: estado actual. II Conferencia Internacional de Software Libre (España). Fecha: 17 / 02 / 2006 Abraham Otero y Álvaro Sánchez-Mariscal/ javaHispano. Agenda. La plataforma Java ¿qué es? Implementaciones libres de J2SE: GCJ + Classpath Kaffe
E N D
Evento/Tema: Implementaciones libres de J2SE: estado actual. II Conferencia Internacional de Software Libre (España). Fecha: 17 / 02 / 2006 Abraham Otero y Álvaro Sánchez-Mariscal/ javaHispano
Agenda • La plataforma Java ¿qué es? • Implementaciones libres de J2SE: • GCJ + Classpath • Kaffe • IKVM • JNode • Discusión y conclusiones
¿Qué es la plataforma Java? • Un conjunto de especificaciones que definen todas y cada una de las tecnologías de la plataforma. • También definen el lenguaje, el formato binario de los bytecodes, la máquina virtual y las librerías estándar (JDK). • Hay múltiples implementaciones de las especificaciones. • Pero Java no es un software, una implementación concreta.
Java Community Process: organización • El Java Java Community Process es el organismo que crea y mantiene las especificaciones. • Cualquier individuo u organización puede pertenecer a él. • Dos comités ejecutivos (CE) se encargan de aprobar las especificaciones: • Uno se encarga de J2SE y J2EE y el otro de J2ME. • Cualquier miembro del JCP es elegible para los CE.
Java Community Process: organización Composición:
Java Specification Request • Un Java Specification Request (JSR) define una tecnología de la plataforma. Consta de: • Una especificación: un documento que describe la tecnología, su necesidad, y cómo afectará al resto de la plataforma. • Una implementación de referencia (IR). Demuestra que la tecnología es factible. • Un test de compatibilidad (TC): batería de pruebas que permiten verificar si una implementación cumple la especificación.
Java Specification Request • Cualquiera, pertenezca o no al JCP, puede proponer JSR. • Puede implementarse un JSR bajo cualquier licencia sin necesidad de pagar royalties. • Algunos JSR antiguos no pueden certificarse si se implementan bajo una licencia libre: el JSR debe estar bajo la versión 2.5 o 2.6 del JCP. • En lo que a J2SE atañe, sólo se puede certificar Java 1.5. • La certificación para una implementación sin ánimo de lucro sería completamente gratuita.
Java es un conjunto de “estándares” • La plataforma Java puede considerarse un conjunto de estándares. • Lo que aquí vamos a analizar es el estado actual de las implementaciones libres del “estándar” (especificación) J2SE. • Más información en A Otero, "Estándares libres y Java: ¿Es el JPC un organismo que crea estándares libres?. II Congreso javaHispano, páginas 87-98. Madrid, 2004.
Agenda • La plataforma Java ¿qué es? • Implementaciones libres de J2SE: • GCJ + Classpath • Kaffe • IKVM • JNode • Discusión y conclusiones
Implementaciones libres de J2SE • Sólo analizamos las que han conseguido logros considerables. • Tomamos como baremo principal de dichos logros las aplicaciones Java que han sido capaces de compilar y/o ejecutar. • El realizar un estudio exhaustivo desborda los límites de espacio que tenemos: hay, al menos, unas dos docenas.
Agenda • La plataforma Java ¿qué es? • Implementaciones libres de J2SE: • GCJ + Classpath • Kaffe • IKVM • JNode • Discusión y conclusiones
GCJ + Classpath • Implementación de la FSF que se integra dentro de la colección de compiladores GCC. • Permite compilar código Java a código máquina y a bytecode, y bytecode a código máquina. • Libgcj proporciona las librerías estándar Java, un colector de basura y un intérprete de bytecode. • Libgcj se basa en Classpath, proyecto que también pertenece a la FSF y que es empleado como librerías por todas las implementaciones libres que analizaremos.
GCJ + Classpath • Classpath puede considerarse: • Totalmente compatible con los JDK 1.0 y 1.1 • Compatible, a excepción de Swing, con 1.2 y 1.3 • Respecto a la compatibilidad con 1.4: • Dos paquetes, 54 clases, 85 métodos y 11 constructores; 5 clases, 2 campos 1 constructor mal implementado el 12-01-06. • Classpath 0.20 98% compatible con 1.4 (esta versión se publicó tras escribir el artículo).
GCJ + Classpath • Classpath, rama que incluye tipos genéricos (Java 1.5): • Faltan 22 paquetes, 118 clases, 15 interfaces, 8 enumeraciones, 57 campos, 396 métodos y 66 constructores. 13 clases, 4 campos, 4 constructores y 3 métodos estan mal implementados. • Libgcj se funde regularmente con Classpath. • En la actualidad no proporcionan datos concretos de su compatibilidad con las librerías base.
GCJ + Classpath • GCJX, en desarrollo, incluirá soporte para las nuevas características de Java 1.5. • Actualmente es capaz de analizar correctamente código 1.4, y soporta bastantes características de 1.5, aunque con bastantes bugs, y sin soporte completo para tipos genéricos. • GCJ ha permitido ejecutar Openoffice.org, Eclipse, Tomcat, Jonas, Ant…
GCJ + Classpath • Carece de keytool, jarsigner, javap, serialver, native2ascii… • Algunas de estas herramientas se están desarrollando en Classpath::Tools • Sólo gjdoc (javadoc) tiene archivos liberados. • Soporta Applets y JNLP mediante gcjwebplugin • … pero no tiene gestor de seguridad ni soporte amplio. • No soporta JDWP (Java Debug Wire Protocol) • Planeado para el futuro.
Agenda • La plataforma Java ¿qué es? • Implementaciones libres de J2SE: • GCJ + Classpath • Kaffe • IKVM • JNode • Discusión y conclusiones
Kaffe • Una de las primeras implementaciones (1996), llegó a ganar el premio de JavaWorld a la mejor JVM en 1998. • Pasó un mal momento cuando el fundador del proyecto lo abandonó y, poco más tarde, quebró la compañía que lo respaldaba (Transvirtual Technologies ). • Es una máquina virtual basada en intérprete y JIT. • Inicialmente tenía sus propias librerías que se han fusionado con Classpath.
Kaffe • Su principal problema es la carencia casi total de documentación. • Posee ciertas herramientas equivalentes a javap, serialver, rmic, rmiregistry, javadoc... • Pero no soporta JDWP. • Ha permitido ejecutar, entre otros, Eclipse, Tomcat, JBoss, Resin, HSQLDB, Berkeley DB, Prevayler, SwingWT, Ant, Rhino y varios drivers JDBC y proyectos de Apache Jakarta.
Agenda • La plataforma Java ¿qué es? • Implementaciones libres de J2SE: • GCJ + Classpath • Kaffe • IKVM • JNode • Discusión y conclusiones
IKVM • Es una implementación de Java para Microsoft .NET y Mono (Novell y Miguel de Icaza). • Licencia tipo Apache. • Puede interpretar bytecode dinámicamente o traducirlo a IL (Intermediate Language). • No proporciona compilador ni herramientas de apoyo al desarrollo, sólo entorno de ejecución. • Soporta completamente Java 1.4, aunque no 1.5
IKVM • Se base en Classpath, pero debe añadir cierto código específico para AWT. • Por tanto, está detrás de las demás en cuanto compatibilidad de librerías. • Este punto no es prioritario para los desarrolladores. • Ha ejecutado Eclipse, Jython y JBoss, entre otros.
Agenda • La plataforma Java ¿qué es? • Implementaciones libres de J2SE: • GCJ + Classpath • Kaffe • IKVM • JNode • Discusión y conclusiones
JNode • Java New Operating System Design Effort, sistema operativo con licencia LGPL desarrollado en Java cuyo propósito es permitir ejecutar aplicaciones Java. • En la actualidad es funcional y soporta una gran parte del hardware más común para PCs. • Sólo proporciona un entorno de ejecución, no compiladores o herramientas de apoyo al desarrollo.
JNode • Emplea Classpath para obtener las librerías. • En lo que destaca es en soporte del lenguaje: completo hasta 1.5:
Agenda • La plataforma Java ¿qué es? • Implementaciones libres de J2SE: • GCJ + Classpath • Kaffe • IKVM • JNode • Discusión y conclusiones
Discusión y conclusiones • El principal factor limitante de todas las implementaciones es el soporte de Swing. • Es imprescindible para obtener un JDK 1.2+. • A excepción de este punto ya hay compatibilidad con 1.4. • Aunque todavía queda camino para llegar hasta 1.5. • Respecto al lenguaje, a nivel de compilador se soporta 1.4 al completo, y de ejecución 1.5 (JNode).
Discusión y conclusiones • Los principales impedimentos a la hora de ejecutar aplicaciones Java en un entorno libre son: • Swing (emplear SWT o AWT). • No es imposible hacerlas funcionar: OpenOffice.org 2.0 • ¡Dependencias con paquetes com.*!. • Por otro lado, esta tarea no es fácil y requiere, habitualmente, bastante trabajo manual (“hacks”).
Discusión y conclusiones • Tanto Kaffe como GCJ se orientan a conseguir un entorno de ejecución, no un JDK completo. • Escasean las herramientas libres de soporte al desarrollo. • Si ejecutar aplicaciones en un entorno completamente libre es complejo, desarrollarlas es casi imposible.
Discusión y conclusiones • Harmony, implementación de Apache, es una gran promesa de futuro. • No tiene ningún desarrollo funcional (es muy reciente). • No podrán utilizar código de los anteriores por incompatibilidad de licencias. • Pero tiene el apoyo de Apache… • …y de un número creciente de empresas: IBM e Intel ya han contribuido.
Discusión y conclusiones • En cualquier caso, hay éxitos innegables: Eclipse, OpenOffice.org, JOnAS, JBoss, Tomcat, Resin, Ant, etc. • Estamos muy cerca de tener esa implementación completa. Los principales candidatos son: • Kaffe + Classpath (Roxo). • CCJ + Classpath. • Harmony.
Muchas gracias por su atención. Contacto: Abraham Otero Quintana abraham.otero@javaHispano.org