# OpenJDK

OpenJDK es la versión libre de la plataforma de desarrollo Java bajo concepto de lenguaje orientado a objetos. Es el resultado de esfuerzos constantemente realizados por la empresa denominada Sun Microsystems. Esta implementación se encuentra catalogada dentro de la licencia GPL de GNU con una excepción de enlaces, por lo que algunos de los componentes de los folders de clases y sitios web de Java se excluyen de los términos de la licencia para poder ser considerados dentro de la versión estipulada como GNU.
OpenJDK es la implementación de referencia oficial desde Java SE 7.

## Historia

En 1995, Sun Microsystems lanza la versión 1.0 del JDK de Java bajo el lema de "Escribe una vez, ejecuta en todas partes", iniciando un capítulo importante en la industria de desarrollo de software. En 1998 la versión 1.1 tuvo dos millones de descargas.
Aunque ya era posible crear software libre con Java, ya que es un lenguaje de programación con una especificación abierta, para su ejecución depende de la máquina virtual Java, que era software no libre. Richard Stallman llamó a esta situación como "la trampa de Java", pues aunque el programa desarrollado sea software libre, este puede encontrar dificultades para distribuirse en entornos de software libre. Esto provocó que en todas las distribuciones GNU/Linux la máquina virtual java no esté incluida, pues el único mecanismo legal era descargarla de la propia web de Sun.
Se crearon diversos proyectos para implementar una máquina virtual Java con licencia libre, entre los que destacan Kaffe y Harmony así como GCJ que permiten compilar el código fuente Java en bytecodes y en código nativo. Para el desarrollo de las librerías base se creó el proyecto GNU Classpath.
Desde 1998, Sun crea un proceso de desarrollo abierto para la tecnología Java, a través del programa Java Community Process. El programa ha evolucionado desde entonces, permitiendo un desarrollo cada vez más abierto de la plataforma Java bajo la licencia JRL. En 2006, la versión Java SE 6 se realizó con una gran participación de la comunidad. Sin embargo, Sun se mostraba indeciso en la licencia con la que sería liberada, aunque se consideraba utilizar la licencia Common Development and Distribution License (CDDL) utilizada por OpenSolaris.
En agosto del 2006, Sun modificó su licencia de forma que pudiera incluirse el binario de la máquina virtual Java en distribuciones GNU/Linux.
El 13 de noviembre del 2006, después de 10 años de desarrollo, Sun anuncia el lanzamiento de las versiones Java SE 6 y SE 7 bajo licencia GPL versión 2. Al proyecto se le nombró OpenJDK e incluyó inicialmente la máquina virtual Java HotSpot, el compilador de Java javac y el sistema de ayuda JavaHelp 2.0. Anuncia también la liberación del resto de la plataforma a lo largo del primer semestre del 2007, con excepción de unos pocos componentes con problemas de licenciamiento ajenos a Sun.

### Liberación de la biblioteca de clases

En cumplimiento de su promesa de liberar el Java Development Kit (JDK) basado casi íntegramente en código abierto y libre durante el primer semestre de 2007 , Sun liberó el código fuente completo de la Biblioteca de Clases de Java Class bajo licencia GPL el 8 de mayo de 2007, a excepción de algunas componentes limitadas licenciadas a Sun por terceros que rechazaron los términos de la GPL. Entre las partes afectadas se contaban varias componentes importantes de la interfaz gráfica de usuario de Java (GUI). Sun declaró que tenía planificado reemplazar las restantes componentes de código no libre con implementaciones alternativas a fin de llegar a una biblioteca de clases completamente libre.

## Desarrollo del proyecto

El proyecto tiene su propia página web, un portal para la comunidad de desarrollo, blogs. y cuenta con listas de correo. Además tiene un canal IRC, y un Wiki para promover ideas y con una página para el reporte de errores.
La herramienta que se utiliza para el desarrollo es NetBeans, que tiene una licencia Common Development and Distribution License (CDDL), y utiliza CVS como repositorio. El crecimiento del JDK y de NetBeans están íntimamente vinculados, pues comparten la misma comunidad de desarrollo. Para contribuir con el proyecto a través de parches, debe firmarse el convenio Sun Contributor Agreement (SCA). Los cambios en el lenguaje se controlan a través del Java Community Process.

## Estructuras organizativas de decisión

La comunidad OpenJDK incluye dos secciones, una pública, dónde se encuentra el proyecto OpenJDK entre otros, y una sección privada dónde solo se puede participar si se es miembro y se ha aceptado la licencia JRL. Aunque los proyectos JDK6 y JDK7 se encuentran en la sección pública, mantienen una licencia JRL.
Es posible registrar un nuevo proyecto, que debe pasar por una etapa de incubación en el jdk-incubator hasta que este lo suficientemente maduro.
Se pueden tomar dos roles en esta comunidad:
* Desarrollador, que utiliza la API y las herramientas para crear aplicaciones. No contribuye con código en el JDK.
* Contribuidor, es aquel desarrollador que ha firmado la Sun Contributor Agreement y tiene la habilidad de realizar aportaciones como parches o mejoras en el código fuente.
Desde 1998 el desarrollo de la plataforma Java de Sun se realiza mediante el programa denominado Java Community Process (JCP) coordinado por la Process Management Office. Cuenta con cerca de 700 miembros, los cuales realizan propuestas a través de documentos formales llamados Java Specification Requests (JSR). Actualmente existen 926 JSR de las cuales 90 están en desarrollo para la nueva versión de la plataforma.
JCP incluye grupos de expertos que revisan los JSR que se incluyen en la lista oficial.
Existen dos comités ejecutivos (EC) para las ediciones de la plataforma Java, Standard/Enterprise y Micro Edition. Realizan las aprobaciones del proceso y de los JSR que se desarrollarán.

## Mejoras por parte de la comunidad

El 5 de noviembre de 2007, Red Hat anunció que había llegado a un acuerdo con Sun, firmando el contrato amplio de contribuidor de Sun (que regula la participación de todos los ingenieros de Red Hat en todos los proyectos de software abierto y libre encabezados por Sun), así como el contrato de licencia del "kit de compatibilidad tecnológica" Technology Compatibility Kit (TCK) para la comunidad OpenJDK de Sun (con lo que Red Hat obtenía acceso a las baterías de pruebas para determinar si acaso un proyecto basado en OpenJDK cumple con la especificación de Java SE 6).
También en noviembre de 2007, se creó en OpenJDK el llamado Grupo de Portadores con la misión de contribuir a los esfuerzos por el traspaso de OpenJDK a diferentes arquitecturas de procesador y sistemas operativos.
En diciembre de 2007, Sun cambió el control de versiones de OpenJDK de lo que había sido TeamWare a Mercurial, como parte del proceso de liberación de OpenJDK a las comunidades open source.
OpenJDK tiene procedimientos relativamente estrictos para aceptar contribuciones de código: toda proposición debe ser revisada por dos ingenieros de Sun/Oracle y el contribuidor debe haber firmado el Contrato de Contribuidor de Sun/Oracle (SCA/OCA). Preferiblemente, debería existir también un conjunto de pruebas jtreg que demuestre que el defecto en cuestión ha sido subsanado. Inicialmente el proceso de sumisión de parches externos era lento y los ingresos a la base de código se realizaban exclusivamente por ingenieros de Sun. Este proceso se optimizó y en años recientes los parches simples y backports desde OpenJDK 7 a OpenJDK 6 se pueden llevar a cabo en horas y no días.

## Radiografía

El análisis de acuerdo al modelo de estimación de costes COCOMO con el que se calcula un estimación del costo de producción del software bajo un modelo de Ingeniería de Software cerrado. Aplicando la herramienta SLOCCount:
Estimación de costos javac :
| Concepto | Valor |
| Total de líneas de código | 90.812 |
| Años de desarrollo | 1,76 |
| Esfuerzo persona-año | 12,96 |
| Costo estimado de desarrollo | 3.073.916 dólares |
Para tener un estimado de los costes se toma en consideración el salario de 56.286 dólares/año, que es el salario promedio de un programador en los Estados Unidos y luego se multiplica ese resultado por 2,40 que incluye cualquier gasto extra diferente de los programadores como pueden ser: luz, teléfono, papelería, etc.
Lenguajes de programación utilizados en javac :
| Lenguaje | Líneas de código | % |
| Java | 88,346 | 97,28% |
| sh | 2,466 | 0,10% |
Estas son las tablas correspondientes a HotSpot:
Estimación de costos HotSpot :
| Concepto | Valor |
| Total de líneas de código | 475.290 |
| Años de desarrollo | 3,40 |
| Esfuerzo persona-año | 129,37 |
| Costo estimado de desarrollo | 17.476.249 dólares |
Lenguajes de programación utilizados en HotSpot :
| Lenguaje | Líneas de código | % |
| cpp | 376.211 | 79.15% |
| java | 87.585 | 18.43% |
| ansic | 8.614 | 1.81% |
| asm | 1.724 | 0.36% |
| sh | 1.156 | 0.24% |