Cómo configurar un entorno de seguridad de Linux para ejecutar programas JavaCrear máquinas virtuales de alto rendimiento y al mismo tiempo mantenerse al día con el creciente conjunto central de API de Java facilita el desarrollo de código de programa de fuente abierta en la plataforma Java. Implementaciones tempranas de "Sala Limpia" se volvió muy difícil. Las implementaciones bajo licencia de la tecnología Java pueden eventualmente usarse en Linux, pero estas implementaciones no son código de programa de fuente abierta. Por lo tanto, la mayoría de las distribuciones de Linux no incluyen una implementación de esta licencia. A pesar de estas dificultades, la plataforma Java ofrece muchas ventajas, lo que ha llevado a un uso cada vez mayor de esta implementación bajo licencia en Linux, especialmente para aplicaciones de servidor. En este artículo, reviso las ventajas que la plataforma Java aporta a las aplicaciones de servidor y luego examino los problemas involucrados en la implementación de servicios Java en Linux de manera simple y segura. Como ejemplo práctico, discutiré los detalles de la configuración del motor de servlet Tomcat Java de Apache Software Foundation, ampliamente utilizado, para operación independiente. Las aplicaciones Java proporcionan compatibilidad binaria entre múltiples sistemas operativos y plataformas de hardware. Esto es especialmente cierto para aplicaciones de servidor sin GUI, donde las pruebas generalmente rara vez se realizan en el sistema de destino real. Los empleados pueden codificar y depurar en cualquier plataforma que prefieran y al mismo tiempo implementar estas aplicaciones en entornos que quizás no controlen directamente. Las características de tiempo de ejecución del entorno Java Virtual Machine (JVM) mejoran la seguridad del programa de varias maneras. Uno de los aspectos más notables es que la combinación de una estricta verificación de clases, verificación de límites de matriz y recolección automática de basura previene por completo las formas más destructivas de ataques al código del servidor: desbordamientos de búfer, errores libres duplicados y punteros libres. El lenguaje Java se utilizó para subprogramas en sus inicios. Después de un desarrollo continuo, el lenguaje también cuenta con un completo sistema de control de acceso detallado para instalaciones que se considera que tienen riesgos de seguridad. Estos métodos pueden ser utilizados por aplicaciones independientes, pero ya están integrados en la arquitectura de muchos servicios Java. Estas características de seguridad del programa en tiempo de ejecución también brindan la conveniencia de desarrollar en el lenguaje Java. Es difícil realizar mediciones precisas de este problema, pero la mayoría de los trabajadores con experiencia en lenguajes como C y C que han cambiado a la programación Java admiten que su productividad ha aumentado desde la transición. Esto se debe en parte a la estricta implementación de la determinación de categorías en tiempo de compilación y tiempo de ejecución y a la simplicidad de la gestión automática de la memoria. Otro factor es la colección de extensiones API estándar desarrolladas para la plataforma Java. Estas API pueden ser un desafío importante para los nuevos empleados, pero una vez aprendidas, brindan un excelente soporte multiplataforma para una variedad de necesidades empresariales. Por supuesto, para algunas aplicaciones, la plataforma Java puede ser una mala elección. Aunque la arquitectura JVM continúa mejorando, las aplicaciones Java normalmente se ejecutan algo más lentas que las aplicaciones C o C++ que utilizan los mismos algoritmos. Según mi experiencia y mis pruebas, calculo que para la mayoría de las aplicaciones de servidor que se ejecutan en una JVM con licencia, esta diferencia de velocidad está en el rango de 20 a 50, pero depende en gran medida de la calidad del código del programa. Las aplicaciones Java que se ejecutan en estas JVM también sufren un inicio lento en comparación con los programas independientes, pero esto generalmente no es un gran problema para las aplicaciones de servidor de larga ejecución. En la mayoría de los casos, un rendimiento reducido y un inicio más lento son un pequeño precio a pagar por la seguridad mejorada y los beneficios de desarrollo más rápido de la plataforma Java. Una alternativa al código abierto es Standard Chartered JVM (de uso gratuito, pero el código fuente es limitado; Linux está disponible para organizaciones Sun, IBM, BEA y Blackdown), y existen varias otras alternativas a Linux. Estas opciones incluyen implementaciones JVM de código abierto de "sala limpia", de las cuales Kaffe es probablemente la más utilizada (está incluida en muchas distribuciones de Linux). Kaffe es un proyecto muy interesante que hace un trabajo increíble, pero solo ofrece compatibilidad limitada con las JVM con licencia actuales. Por lo tanto, generalmente no se puede utilizar para aplicaciones de servidor de clase empresarial, que es el tema central de este artículo.
También existen varias alternativas a los esfuerzos de código abierto para compiladores de código de programa nativos para programas Java. El proyecto más importante aquí es el GCJ de la Colección de Compiladores GNU. Un compilador de código de programa nativo que utiliza una clase como CGJ convertirá el código de bytes de Java independiente de la plataforma en código de programa específico de la plataforma antes de la ejecución (a diferencia de la ejecución en una JVM, que normalmente convierte los bytes en el código de tiempo de ejecución en código de programa específico de la plataforma). ). La compilación del código del programa nativo indica que esta es probablemente una forma de evitar un inicio lento de las aplicaciones Java que se ejecutan en la JVM. Sin embargo, los compiladores que utilizan este enfoque a menudo no logran lograr el rendimiento estable de las JVM con licencia contemporáneas. Esto es especialmente cierto si su aplicación Java utiliza características dinámicas de la plataforma Java, como el uso de reflexión para acceder a campos o cargar categorías que se seleccionan en el momento de la ejecución. Dependiendo de las opciones de implementación y compilación utilizadas, la compilación del código de programa nativo también puede debilitar muchas de las características de seguridad en tiempo de ejecución de la plataforma Java. Finalmente, debido a problemas de licencia, muchas API de Java no se pueden utilizar con código de programa nativo compilado. Debido a estas limitaciones, la compilación de código de programa nativo no es actualmente una buena opción para aplicaciones de servidor de plataforma Java. Otro enfoque que tiene muchas similitudes con el entorno de ejecución de Java es el lenguaje C# de Microsoft y el Common Language Runtime (CLR) relacionado. C# es un derivado estrechamente relacionado del lenguaje Java y CLR puede permitir que C# se utilice en muchas plataformas. El CLR también proporciona muchas de las características de seguridad en tiempo de ejecución de la JVM (aunque hay salidas que debilitan gravemente las garantías de seguridad). Microsoft. La implementación Net también admite la opción de precompilar código de programa nativo para un inicio más rápido, similar a lo que hace GCJ para el código de bytes de Java. Por supuesto, los usuarios de Linux no pueden utilizar esta función directamente porque. Net sólo está disponible en sistemas Windows. El Proyecto Mono se compromete a construir una "sala limpia" para varios productos Linux, código fuente abierto C# y productos equivalentes a CLR. Ahora, se ha desarrollado el compilador de C# en este proyecto y el CLR se ha completado en su mayor parte. Microsoft lo ha lanzado con fines de estandarización. Sin embargo, todavía queda mucho trabajo por hacer antes de que pueda convertirse en un sustituto razonable de la plataforma Java, tanto en términos de rendimiento como de funcionalidad. El CLR solo contiene contenido básico equivalente a la biblioteca de clases principales de Java. Es necesario complementarlo con muchas API adicionales antes de que pueda considerarse una opción razonable para el desarrollo de software empresarial. El Proyecto Mono está desarrollando puertos de otras partes. Excepto CLR. Si estos puertos tienen éxito, si Microsoft no impone sus derechos de patente sobre estas piezas. Luego ayudarán a satisfacer la necesidad de que C# se convierta en una plataforma confiable para el desarrollo de software de servidor en Linux. Sin embargo, aún queda mucho trabajo por hacer para hacer realidad estos supuestos. Al mismo tiempo, los compiladores de código de programa nativo para programas Java y JVM de código abierto brindan una alternativa estable para los usuarios que realmente desean evitar el uso de JVM con licencia y pueden tolerar una funcionalidad limitada. Apache Tomcat es una de las aplicaciones de servidor de plataforma Java más comunes. Tomcat es un proyecto de código abierto basado en el código fuente originalmente donado por Sun. Es un servidor HTTP desarrollado por Sun a través del Proceso de la Comunidad Java y es la implementación de referencia oficial de las tecnologías ampliamente utilizadas de servlet y JavaServer Page (JSP). En este artículo, usaré Tomcat como una aplicación Java de muestra y la implementaré como un servicio en Linux. Si desea intentar ejecutar Tomcat usted mismo, deberá instalar el Java Development Kit (JDK) en su sistema, en lugar de instalar un Java Runtime Environment (JRE) más pequeño. Las tecnologías Servlet y JSP se utilizan para crear aplicaciones de servidor HTTP. Aunque la tecnología de servlet agrega muchas características (incluyendo seguridad de acceso, administración de sesiones y control de subprocesos), solo es aproximadamente equivalente a una interfaz CGI personalizada para llamadas rápidas y directas al lenguaje Java.