Oracle y el nuevo soporte de JDK

Desde el mes de abril los programadores hemos ido recibiendo el aviso de Oracle JDK (Java Developer Kit) del cambio de condiciones de las nuevas versiones: el soporte de Java 8, la última versión estable con las condiciones tradicionales llegará a su fin y las versiones posteriores ya no serán gratuitas. Recopilo las preguntas que he ido recibiendo desde entonces:

– ¿Por qué ese cambio?

Porque Oracle quiere hacer más dinero.

– ¿Las nuevas versiones de corta duración no siguen siendo gratis?

Sí, pero cada 6 meses tienes que hacer una migración completa a la siguiente versión, lo que no es operativo para aplicaciones grandes. Además haces de conejillo de indias, porque con ciclos de desarrollo tan cortos no se garantiza la estabilidad.

– ¿Pero Java no era de código abierto?

Lo era por parte de Sun Microsystems. Luego Oracle los compró e hizo lo que suele hacer con los proyectos de software libre: añadió capas extras propietarias y llegado un punto cerró para intentar monetizar.

– ¿Pero puede tener efecto retroactivo?

No, el código que era libre lo sigue siendo como OpenJDK, cuyo mantenimiento ha pasado a manos de Red Hat. A día de hoy esta versión es fácil de instalar en Linux, pero en otros sistemas no es tan amigable de poner en marcha.

– Espera, entonces, ¿cómo queda el tema de desarrollo de Java?

Oracle (código propietario) lidera el desarrollo porque es quien tiene la propiedad intelectual de Java SE (Standard Edition). Red Hat (código abierto) mantendrá la parte libre dándole las actualizaciones de seguridad. Lo que solía ser Java EE queda en manos de la Eclipse Foundation (software libre) y pasa a llamarse Jakarta. Básicamente Oracle se lava las manos de toda la parte colaborativa, pero sigue siendo quien manda.

– ¿Tengo alternativas entonces?

Si, AdoptOpenJDK proporciona los binarios libres y compilados. Va a remolque de OpenJDK, pero ellos ofrece versiones larga duración (LTS) con soporte mucho más largo que las LTS de Oracle.

– ¿Pero los entornos de desarrollo como Eclipse e IntelliJ funcionan con estas versiones alternativas?

Eclipse Photon funciona sin problemas, e IntelliJ 2019 incluye su propio bundle de Java basado en OpenJDK, por lo que la respuesta es sí.

– ¿Tiene sentido esta maniobra?

En mi opinión a largo plazo, no. El lenguaje Kotlin podría ser el gran beneficiado, pues corre sobre la máquina virtual de Java, la cual sigue siendo libre, y garantiza retrocompatibilidad con Java. Ya es un lenguaje oficial de Android y le evita a Google la guerra desgaste que Oracle tiene con ellos, por lo que se prevé crecimiento por esa parte. Además el negocio de sus creadores, Idea, es vender licencias de sus herramientas de desarrollo (IntelliJ), por lo que al ser ellos los que controlan el desarrollo del lenguaje tendrían una ventaja sobre sus competidores.

– ¿Es Oracle malvada con el software libre y el código abierto?

Tienen un largo y triste historial de comprar compañías con proyectos de software libre y dejarlos marchitarse (OpenOffice, MySQL…) o meterse en largas guerras de patentes, hasta el punto que tienen un nómina muchos más abogados que ingenieros. Yo siempre sonrío recordando que el edificio de Cyberdyne en Terminator Genisys está basado en su oficina…

La oficina de Cyberdyne en Terminator Genisys, basada en la oficina de Oracle de Redwood

Cuestiones de APIs

Cuando en términos de programación se habla de una API, hablamos de una serie de especificaciones: una “Interfaz de Programación de Aplicaciones” contiene una serie de prototipos, es decir, los nombres de las funcionalidades, los parámetros que usa como entradao salida, y una descripción de lo que se espera que ésta haga. Pero cuando nos preguntamos cómo hace eso que dice, se queda en blanco. El cómo se hace, que es donde está la chicha, es la implementación.

¿Qúe es lo bueno de las APIs? Pues que se pueden implementar de diversos modos, generando patrones de uso y facilitando el buen diseño de aplicaciones. Para los programadores es una herramienta fantástica, pues nos permiten no solo ayudar a afianzar buenas prácticas, sino que el manteniemiento del código es mejor: si tienes que cambiar un componente por dentro pero mantienes la interfaz, los cambios son invisibles desde otras capas de código, pues desde ellas solo ven los prototipos.

Cuestiones de APIs

¿Deberían patentarse las APIs? Evidentemente el derecho de autoría sobre los patrones es algo que debe reconocerse, pero aplicar copyright sobre algo que a fin de cuentas es humo es absurdo. Las implementaciones pueden tener copyright, evidentemente, pues hay un trabajo y un desarrollo de ideas tangible y real, pero no las APIs. Cerrar su uso solo llevaría al empobrecimiento del desarrollo software, lo que a todas luces es algo malo.

De ahí que espero que Oracle pierda una vez su caso contra Google, porque las APIs de Android son básicamente las mismas que las de Java, aunque sus implementaciones se parezcan como un huevo a una castaña. Que compartan las interfaces nos permite a los programadores de Java ser capaces de trabajar con Android con una transición prácticamente nula, permitiéndonos poder tener nuestras aplicaciones en entornos y dispositivos diferentes “picando el código” una única vez, lo que es algo fantástico. Oracle debería alegrarse de que de esta manera, Java siga siendo un lenguaje muy vivo, en lugar de intentar ahogarlo con patentes y falta de atención a su mantenimiento tal como está haciendo con MySQL, al que MariaDB cada vez le está comiendo más y mas terreno.

Instalando Oracle Java 7 en Ubuntu 12.04

Logotipo de Oracle Java
Logotipo de Oracle Java

Ubuntu 12.04 emplea OpenJDK y el plugin IceTea, su propia implementación libre de Java. Sin embargo, para el correcto uso de algunos programas y plugins, como puede pasar al instalar algunas versiones del IDE Eclipse, necesitaremos la implementación original  de Oracle Java.

El paquete Java se compone de 3 elementos que se instalan juntos para mantener mayor coherencia entre instancias:

  • Java Development Kit (JDK), para desarrolladores.
  • Java Runtime Enviroment (JRE), para usuarios.
  • Java Virtual Machine (JVM), donde se ejecuta el código Java.

Podemos instalar Oracle Java mediante repositorios para que se actualice con facilidad. Para ello debemos acceder a la consola (el atajode teclado  por defecto es Ctrl + Alt + T) e introducir:

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java7-installer