GNU Classpath es una implementación de software libre de la biblioteca de clases estándar para el lenguaje de programación Java . La mayoría de las clases de J2SE 1.4 y 5.0 están implementadas. Classpath puede utilizarse para ejecutar aplicaciones basadas en Java . GNU Classpath es parte del Proyecto GNU . Originalmente se desarrolló en paralelo con libgcj debido a incompatibilidades de licencia, pero más tarde los dos proyectos se fusionaron.
GNU Classpath fue considerado un proyecto de alta prioridad por la Free Software Foundation . Cuando comenzó el proyecto Classpath, la licencia para la implementación oficial de Java de Sun Microsystems no permitía la distribución de ninguna modificación. Desde el inicio del proyecto Classpath, OpenJDK se publicó bajo la licencia GPL y ahora sirve como implementación de referencia oficial para la plataforma Java .
GNU Classpath tiene licencia de la Licencia Pública General de GNU con una excepción de enlace . Esta es una licencia de software libre . Todo el código es propiedad formal de la Free Software Foundation , [ cita requerida ] y este propietario está sujeto a sus propias obligaciones contractuales con los desarrolladores. [ aclaración necesaria ]
Muchos entornos de ejecución Java gratuitos (como Kaffe , SableVM , JamVM , Jikes RVM y VMKit) utilizan GNU Classpath porque cada máquina virtual Java con todas las funciones debe proporcionar una implementación de las bibliotecas de clases estándar.
Algunos otros usos incluyen:
El desarrollo de GNU Classpath comenzó en 1998 con cinco desarrolladores. [ cita requerida ] Durante su historia, se fusionó varias veces con otros proyectos que tenían objetivos similares ( Kaffe , libgcj). En el pasado, GNU Classpath proporcionaba su propia máquina virtual (Japhar). A medida que Classpath se convertía en una biblioteca base, compartida con muchos proyectos diferentes, esta máquina virtual recibió cada vez menos atención y ahora ya no recibe soporte. [ cita requerida ]
Después de implementar la mayoría de la API oficial de Java 1.4, el trabajo en el proyecto se centró más en la detección de errores que en la cobertura de la API. El 24 de octubre de 2006, se comprometió la implementación de la última clase faltante de la versión 1.4, HTMLWriter. La velocidad de desarrollo (calculada matemáticamente como el número promedio de nuevas líneas de código por día) alcanzó su nivel más alto en 2006. [ cita requerida ]
El nombre GNU Classpath fue sugerido originalmente por Bradley M. Kuhn a uno de los primeros desarrolladores, Paul Fisher. En ese momento, había una gran preocupación en la comunidad de implementaciones de Java libre sobre la aplicación de la marca registrada de Sun en Java contra las implementaciones libres. Kuhn sugirió el nombre $CLASSPATH , que es la variable de entorno utilizada por la mayoría de los sistemas Java para indicar dónde residen las bibliotecas Java en la computadora. Dado que $CLASSPATH a menudo se expandía a un nombre de ruta que incluía la palabra java (como /usr/lib/java
), era una forma de evocar el nombre Java sin decirlo realmente. A Fisher y otros desarrolladores no les gustó el uso antiestético del $ y todas las letras mayúsculas y se decidieron por Classpath .
El encargado del mantenimiento se ocupa del aspecto legal del proyecto, prepara los lanzamientos regulares del proyecto y se encarga de la gestión de calidad. El encargado del mantenimiento también otorga los permisos de acceso al CVS . [ cita requerida ]
GNU Classpath no tiene una jerarquía formal. El trabajo lo realizan los más capacitados técnicamente y tampoco hay una división estricta del trabajo. Todos los cambios de código se publican primero en la lista de discusión como parches, donde se puede oponerse a ellos si es necesario. El proyecto suele recibir entre cinco y ocho parches por día.
El progreso de la cobertura del código de la biblioteca GNU Classpath se puede rastrear en relación con OpenJDK6 [4] y OpenJDK7. [5]
GNU Classpath contiene clases del espacio de nombres oficial de la API de Java. Cuando las llamadas a código nativo son necesarias o muy deseadas, esto se hace desde un pequeño número de clases "VM". El nombre de una clase VM de este tipo coincide con el nombre de la clase que requiere métodos nativos, más el prefijo VM adicional : VMObject, VMString, etc. Las clases VM, almacenadas por separado del resto del código, son privadas del paquete y finales . Los métodos de estas clases contienen la palabra clave native , que indica la necesidad de la biblioteca nativa de soporte. Dichas bibliotecas son proporcionadas por los autores de una máquina virtual Java, por lo tanto, GNU Classpath se puede conectar a casi cualquier máquina virtual Java si las fuentes de dicha máquina virtual están disponibles y se pueden modificar.
Antes de la versión 0.95, cada lanzamiento de GNU Classpath consistía en dos paquetes tar de lanzamiento separados: uno que representaba el estado de la rama de desarrollo principal y otro que contenía el contenido de una rama más experimental, que admitía las adiciones, como genéricos, enumeraciones y anotaciones, presentes en Java 1.5. [6]
Desde la versión 0.95, [7] las adiciones de Java 1.5 como los genéricos se han integrado completamente en la rama principal. La rama se puede construir utilizando el compilador Eclipse , ecj, para compilar el código fuente de Java 1.5 a bytecode. En el caso de GCJ, utiliza ecj para realizar esta etapa inicial, luego convierte el bytecode a código nativo. Desde la versión 0.95 en adelante, GNU Classpath también admite la compilación y ejecución del compilador javac de código abierto recientemente aprobado por GPL utilizando GNU Classpath y también permite que la biblioteca de clases, las herramientas y los ejemplos de GNU Classpath se compilen con el propio javac .
GNU Classpath no acepta ningún código que tenga una licencia no libre o que haya sido generado automáticamente a partir de código con una licencia no libre. La API estándar de Java contiene numerosas clases del dominio omg.org que normalmente se generan a partir de los archivos IDL , publicados por Object Management Group . La licencia de "uso, pero no modificación" de estos archivos se considera no libre. Por esta razón, las clases mencionadas en el proyecto GNU Classpath se escribieron desde cero, utilizando únicamente las especificaciones oficiales impresas de OMG. Por lo tanto, esta parte de GNU Classpath es tan libre como cualquier otro código del proyecto.