El lenguaje Java se utiliza para programar aplicaciones que pueden ser ejecutadas en distintas plataformas, entre ellas las distintas ediciones de la propia plataforma Java. Esta se encuentra disponible para los sistemas operativos más extendidos, como son Microsoft Windows, Apple OS X y GNU/Linux, así como para otros con un uso más minoritario, como es el caso de Solaris.
En realidad una aplicación estándar Java, una vez compilada, puede ser ejecutada sobre cualquier sistema para el que haya disponible alguna versión del entorno de ejecución de Java, conocido como JRE (Java Runtime Environment). Asimismo, también es posible compilar para una plataforma diferente.
Es necesario distinguir claramente entre dos partes muy diferenciadas dentro de la plataforma Java:
- JRE (Java Runtime Environment): su objeto es aportar el entorno necesario para ejecutar una aplicación Java. Forman parte del JRE la máquina virtual Java o JVM (Java Virtual Machine), encargada de ejecutar el bytecode Java, así como las bibliotecas que ofrecen los servicios definidos en la plataforma.
- JDK (Java Development Kit): es el paquete de herramientas precisas para llevar a cabo el desarrollo de dicha aplicación. Este JDK es un superconjunto del JRE, al que agrega herramientas como el compilador Java. Este toma el código fuente Java y genera como resultado bytecode, un formato de código objeto independiente del sistema operativo y el hardware.
La siguiente figura ilustra de manera visual la relación existente entre los diferentes componentes de la plataforma Java (pulsa para aumentar):
Tanto las herramientas aportadas por el JDK como los servicios ofrecidos por el JRE dependerán fundamentalmente de la edición de Java que esté utilizándose.
Ediciones de la plataforma Java
La configuración de una plataforma Java afecta fundamentalmente a los servicios que esta ofrece, las herramientas adicionales que incorpora y también a aspectos menos visibles, como el modo de funcionamiento de la JVM. De acuerdo a la documentación actual de Oracle podemos distinguir las siguientes cuatro plataformas Java:
-
Java SE: la conocida como Standard Edition es la edición más difundida de la plataforma Java. Incorpora los elementos necesarios para crear aplicaciones de escritorio con o sin interfaz gráfica de usuario, acceso al sistema de archivos, comunicación a través de redes, concurrencia y otros servicios básicos.
-
JavaFX: originalmente JavaFX era una alternativa a Java SE para el desarrollo de proyectos de tipo RIA (Rich Internet Applications), con un núcleo más ligero y fácil de distribuir, capacidad de aceleración 3D aprovechando la GPU, servicios avanzados para producción de gráficos y animaciones, y un mecanismo simplificado para el diseño de interfaces de usuario. JavaFX forma parte de Java SE desde la versión 7 de dicha edición de la plataforma.
-
Java EE: es la Enterprise Edition de la plataforma Java, dirigida al desarrollo de soluciones software que se ejecutarán en un servidor de aplicaciones. A las capacidades de Java SE, la edición EE agrega servicios para gestionar la persistencia de objetos en bases de datos, hacer posible la invocación remota de métodos, crear aplicaciones con interfaz de usuario web, etc.
-
Java ME: esta edición de la plataforma, Micro Edition, está enfocada a la creación de programas que se ejecutarán en sistemas con recursos limitados, tales como teléfonos móviles, electrodomésticos y dispositivos de domótica o equipos para entornos empotrados como la Rasperry Pi y similares.
Nota: Java SE, EE, ME, la JVM y otras partes de Java son en realidad especificaciones abstractas de los servicios y modos de funcionamiento de los distintos elementos de la plataforma. Encontraremos múltiples implementaciones de dichas especificaciones. Por ejemplo, HotSpot es la implementación de Oracle de la JVM, existiendo implementaciones alternativas de esa misma especificación como la de OpenJDK o la de IBM.
Por regla general, salvo que tengamos alguna necesidad más específica de desarrollo, partiremos siempre de la Java SE, procediendo después a instalar plataformas adicionales en caso de que precisemos algún servicio no disponible en la edición estándar.
Java y sistemas operativos
Para ejecutar aplicaciones desarrolladas en Java sobre un sistema operativo es necesario que exista para el mismo una implementación concreta de la plataforma.
Además de la implementación de cada plataforma procedente de Oracle, que podría considerarse la oficial o de referencia y que está disponible para múltiples sistemas, podemos encontrar otras alternativas:
- OpenJDK, la organización respaldada por Oracle cuyo objetivo es mantener una versión de código abierto de la plataforma Java, ofrece Java SE para múltiples distribuciones de GNU/Linux.
- Si queremos utilizar OpenJDK en otros sistemas, como Windows u OS X, podemos recurrir a Zulu.
- IBM también ofrece su propia implementación de la plataforma Java, conocida como IBM J9, para GNU/Linux, así como para varios de sus sistemas operativos para mainframes y derivados de UNIX, como AIX y z/OS.
Nota: La implementación de Java SE de Oracle está basada en el código de OpenJDK, por lo que estas dos variantes comparten un núcleo funcionalmente idéntico.
- Si nuestro objetivo es desarrollar para dispositivos embebidos, tales como Smart TV o dispositivos tipo Raspberry Pi, encontraremos versiones específicas de la plataforma Java para tal fin. Un ejemplo de ello son las versiones Embedded de Java SE y Java ME de la propia Oracle. También derivadas de OpenJDK, se están preparando versiones de Java SE para iOS, Android y Windows Mobile.
- Android es un sistema operativo algo especial en cuanto a la ejecución de aplicaciones Java, ya que incorpora un entorno de ejecución propio, llamado ART (Android RunTime), en lugar de la correspondiente implementación del JRE. Las aplicaciones para Android se desarrollan usando el JDK de Java SE, pero el código se compila posteriormente para ART.
Espero que esto te ayude a tener clara la diferencia que existe entre Java, la plataforma Java, sus componentes y sus diferentes implementaciones.
También te puede interesar: Java y JavaScript: ¿son lo mismo?