OpenJDK
Contents
Como mi arranque en Liferay estoy seguro que una de las discusiones que voy a tener en los próximos meses es sobre la plataforma Java: rendimiento, el lenguaje y sobretodo, si Java es o no es ya software libre. Ahora mismo queda ya bastante claro de la FAQ de OpenJDK, la comunidad formada por SUN para desarrollar las versiones libre de Java, que casi todo JDK 6 es ya software libre aunque quedan algunas partes que aún están pendientes.
Presentación del estado de OpenJDK en Fosdem 2008 que muestra las partes que aún no son libres de JDK y que coinciden con las que se mencionan en la FAQ:
Graphics rasterizer
Font rasterizer
Imaging APIs
Sound engine
Crypto providers
Some SNMP code
Fully buildable != fully free
25,169 source files
894 (4%) binary only (“plugs”)Las partes que aún no son software libre quedan claras en la FAQ:
Q: What are the encumbered components in the JDK (Java SE)? A: The larger encumbered components requiring binary files for a full build include the font rasterizer, the graphics rasterizer, and the sound engine. Smaller components include some cryptographic algorithms, some SNMP code, and some of the imaging APIs.
y las presentaron el equipo de SUN dentro del FOSDEM en la sala de Free Java. Son las partes de JDK que están calificadas como "encumbered" y que tienen problemas para ser publicadas con licencia GPLv2.
Imaging APIs van a dejar de ser problema en breve (Marzo 2008).
Módulos que ya son software libre
Las partes de JDK (Java SM) que ya son software libre son:
In November 2006, Sun open sourced the Java programming language compiler ("javac"), and the Java HotSpot virtual machine. In addition, Sun open sourced the JavaHelp 2.0 extensible help system, Sun's reference implementation of JSR 97.
The following components are newly open sourced under GPL version 2 plus the Classpath Exception:
* Core libraries
* Networking libraries
* Security libraries
* Serviceability libraries
* Internationalization libraries
* 2D graphics subsystem
* AWT, the Abstract Windowing Toolkit
* Swing GUI toolkit
* Sound subsystem
* Various tools, including JConsole and javadoc
the exception of a few encumbered components that we hope, with the community's help, can be re-implemented so that 100% of the OpenJDK code commons is available as free software.
Guía del Desarrollador de OpenJDK
Guía para el que quiere ser desarrollador de OpenJDK
Comunidad OpenJDK 6 (objetivo similar a Iced Tea, OpenJDK 6 totalmente libre)
Construyendo OpenJDK desde las fuentes
Una de las actividades que quiero llevar a cabo es construir todo JDK desde las fuentes. Para ello lo mejor parece ser comenzar con NetBeans aunque intentaré hacerlo todo desde un terminal a la vieja usanza.
El IDE para Java
De momento tengo idea de seguir con mis terminales y vi/emacs para editar en Java. Pero quizá en el medio plazo acabe utilizando Eclipse, NetBeans o quien sabe, Monodevelop y su extensión para Java. El IDE comercial mejor considerado en Liferay es IntelliJ IDEA pero haré lo posible por huir de tecnologías privativas.
El proyecto Iced Tea
En Red Hat han lanzado el proyecto Iced Tea para «que el software OpenJDK publicado por Sun Microsystems como software libre en 2007 sea usable sin que sea necesario ningún otro software que no sea software libre». En SUN tiene un objetivo similar en OpenJDK así que no sé cuanto de sentido tiene este proyecto. Aunque siempre está bien que haya diversas comunidades con diversos intereses cuidando de la libertad de las cosas. En Iced Tea se puede ver bien las partes no libres que quedan en JDK (Java SE), como un 4%.
«IcedTea is not a fork, and is not meant to be a permanent project - just a stopgap measure to create a fully FOSS OpenJDK. »
Utilizando Javascript en Java
Con el motor de Javascript Rhino se pude integrar en desarrollos Java partes hechas en Javascript fácilmente. Javascript está en auge con la llegada de la Web 2.0 y futuras evoluciones, así que podría ser un lenguaje de scripting muy adecuado para los programas en Java.
Tecnologías Java
Dentro de las tecnologías Java que hay que manejar en Liferay tenemos Spring, Struts, Hibernate, Java Faces, jQeury o Velocity. A parte de profundizar en todas ellas me interesa a día de hoy explorar en profundidad el uso de genéricos en Java, un diseño que también se utiliza en C#.
Generics
Generics está disponible desde la versión Java SE 5.0. En C++ se conocen como "Templates" y la idea básica es definir tipos de datos, clases, que reciben como variables los tipos de datos con los que trabajan. En vez de tener contenedores genéricos de objetos (Object) en los que se puede meter cualquier tipo de clase pero que obliga a hacer un "casting" luego de sacar el objeto genérico a la clase que metismo, los genéricos permiten especificar que estamos creando una lista para guardar un determinado tipo de datos.
List myIntList = new LinkedList(); // 1 myIntList.add(new Integer(0)); // 2 Integer x = (Integer) myIntList.iterator().next(); // 3
pasa a ser
List<Integer> myIntList = new LinkedList<Integer>(); // 1’ myIntList.add(new Integer(0)); //2’ Integer x = myIntList.iterator().next(); // 3’