Difference between revisions of "Licencia de Java"

From FdIwiki ELP
Jump to: navigation, search
Line 93: Line 93:
  
 
Por ahora
 
Por ahora
 +
 +
== Características de Java ==
 +
Java, compilador e intérprete, es un lenguaje que fue pensado para ejecutarse en cualquier maquina, por lo que su forma de compilarse y ejecutarse es de la siguiente manera:
 +
 +
Tenemos un código fuente, escrito por el programador, que se guarda en unos archivos .java.
 +
 +
Los .java, al compilarlos, generamos un bytecode en archivos .class, no ligados a ningún sistema.
 +
 +
Estos, al ser independiente de sistema operativo y hardware, se van a ejecutar en una maquina virtual de Java, que si depende de estos últimos, pero que ejecuta los programas que se han compilado para cualquier maquina.
 +
 +
Tenemos dos elementos muy importantes:
 +
 +
- JDK (Java Development Kit).- Mas tarde, SDK, son aplicaciones y herramientas para desarrollar como por ejemplo:
 +
o Javac.- Compilador de java.
 +
o Java.- Interprete (Maquina virtual). Ejecuta bytecode (.class).
 +
o Applet Viewer.- Verifica applets y ejecuta.
 +
o JDB.- Depurador bytecode.
 +
o Javap.- Desamblador bytecode.
 +
o Javadoc.- Generador de autodocumentacion.
 +
 +
- JRE (Java Runtime Environment).- Maquina virtual y librerías para ejecutar código.
 +
 +
Características de Java
 +
 +
- Simple
 +
- Orientado a objetos
 +
- Portable
 +
- Eficiente
 +
- Concurrente (Multhread y Distribuido)
 +
- Robusto
 +
- Seguro (Paranoico)
 +
- Interpretado
 +
- Independiente de la plataforma
 +
 +
Corrección y estilo
 +
 +
- Clases en mayúscula
 +
- Variables en minúscula
 +
- Métodos en minúscula, excepto si está formado por varias palabras, que empezaran con mayúscula
 +
- Constantes en mayúsculas, juntas, y en clase estática.
 +
 +
== Funcionalidades ==
 +
 +
'''Tipos Primitivos
 +
 +
Atributos
 +
 +
Clases
 +
 +
Constructores
 +
 +
Array
 +
 +
Casting
 +
 +
Herencia
 +
 +
Polimorfismo
 +
 +
''a) Selección dinámica de método
 +
 +
b) Sobrescritura de un método
 +
 +
c) Sobrecarga de método''
 +
 +
Vinculación dinámica
 +
 +
Excepciones'''
  
 
==Fuentes==
 
==Fuentes==
 +
 
*http://dirkriehle.com/2011/06/30/the-java-ip-story/
 
*http://dirkriehle.com/2011/06/30/the-java-ip-story/

Revision as of 21:18, 20 February 2015

Plantilla:Licencia de Java


Introducción

Java es una marca que engloba varias tecnologías, que han evolucionado a lo largo del tiempo. Principalmente se puede dividir en tres grandes partes: ‘Lenguaje Java’, ‘Librerías Java’ (Java ClassPath) y ‘Plataforma Java’. Hay una ramificación de la Plataforma Java, que se llama Java EE que tiene entre otros una ampliación del Lenguaje, ClassPath y Plataforma. La tecnología de Java Servlets y Java Server son muy cercanos a JavaEE, excepto que tienen alternativas libres. Este escrito no trata de JavaEE ni de servlets y server (p.e. sobre Tomcat). Más bien se hablará sobre Lenguaje Java, Java ClassPath y Plataforma Jva Un lenguaje, como tal, no es patentable n tiene copyright, (aún así, Oracle ha intentado cobrar a Google por una implementación muy parecida de sus APIs ). Para ejecutar un programa escrito en lenguaje Java, necesitamos ante nada, librerías (Java ClassPath) y una plataforma, que integra Java Hotspot (máquina virtual) y javac (compilador a código objeto de Java).


Este artículo, es principalmente una traducción del Artículo de Dirk Riehle (licencia CC): Traducción : R. Daton Fuente: Dirk Rihle Licencia:CC BY 3.0

¿Qué es Java?

Java tiene múltiples componentes. Java, el lenguaje de programación, que se ha convertido en un estándar. JRE, que contiene la infraestructura necesaria para ejecutar aplicaciones Java. JDK, que es el JRE junto a sus librerías y entorno de ejecución y alguna herramientas más. además, hay muchas librerías de terceros y Entornos de Desarrollo Integrados. Java existe en varios formatos orientados a diferentes entornos de ejecución, entre los cuales: sistemas embebidos, escritorio y sistemas empresariales. Java, como lenguaje de programación, está mutando muy lentamente. Sin embargo, las librerías están avanzando rápidamente. Para que éstas sean útiles a La Industria, el JCP, Proceso de Comunidad de Java, define especificaciones y desarrolla implementaciones de referencia y paquetes de testeo de compatibilidad. El JCP fue puesto en marcha por Sun y juntó los principales actores de la Industria, interesados en Java. Para participar en el proceso, los fabricantes deben firmar un JSPA, Acuerdo de Participación en Especificaciones de Java. Las especificaciones individuales son llamadas JSR’s (Solicitud de Especificación de Java).

Licencias iniciales de Java

En su origen, Sun y ahora Oracle, posee las siguientes propiedades intelectuales: la marca registrada Java, que le permite impedir a otros etiquetar sus productos con el nombre de ‘Java’ , en el ámbito de las TIC. varios paquetes de testeo de JSR; así se reservan el control del output del JCP, a fin de poder certificar las implementaciones de componentes de Java nuevos. muchos patentes dentro de la implementación del lenguaje central de Java y del entorno de ejecución. Estos derechos de propiedad, han sido usados en varios casos.

Para empezar, repasemos algunos momentos clave en a historia de Java. Java fue lanzado en 1996, bajo una licencia restrictiva. Los desarrolladores podían usar Java, pero este no era de código abierto. Con el interés de la Industria, al alza, Sun anunció y formalizó el JCP en 1998 para ayudar Java avanzar, implicando otros actores de la Industria. Microsoft fue uno de los actores que integró, de forma temprana, Java en su plataforma. Ya en 1997, Sun inició una demanda judicial contra Microsoft, por no respetar el acuerdo de licencia, y en 2001 la ganó. Desde entonces, Java ha eliminado Java de su plataforma, dejando a terceros que hagan la integración (de java).

Una primera implementación, de código abierto, de las herramientas Java , entorno y librerías, fue iniciado en forma del proyecto GNU Classpath; a día de hoy, aún, no ha sido completado. El proyecto usa licencia GPL con ‘excepción Classpath’, que permite que aplicaciones enlacen a dichas librerías, sin tener que adoptar la licencia GPL. (nota del traductor: no confundir con LGPL, que ademas permite ingeniería inversa del programa principal) Otra implementación de código abierto, de Java fue empezada al abrigo de ASF, Apache Software Foundation, en 2005, con el nombre de ‘Project Harmony’. Sun, ahora Orcale, ofrece a la comunidad-sn-animo-de-lucro, certificación gratuita de Java, si aceptan ciertas restricciones de uso. El ASF, siguiendo la filosofía de código abierto, rehusó la oferta, perdiendo el derecho de usar la marca ‘Java’. Sun , mismo, liberó la mayor parte de sus utilidades, librerías y entorno de ejecución Java en 2006, acabandolo en 2007, bajo la licencia de código abierto GPLv2. LLamado el OpenJDK, esta es por el momento, la única implementación de código abierto de Java disponible a día de hoy.

Modelo de Negocio de Java

Contaré tres historias, en las cuáles la propiedad intelectual y la estrategia de negocio confluyen: La guerra de plataformas, Java contra Windows Obtener ganancias con el modelo Open Core Luchar con la competencia utilizando Patentes y restricciones de uso

Los temas de propiedad intelectual y sistema legal, tienen la costumbre de aburrir mucho.. Espero que este no sea el caso. El eslogan (y promesa) inicial , de marketing, de Java a los desarrolladores de software fue “escribir una vez, ejecutar en cualquier sitio” (“write once, run anywhere”). Describe la estrategia básica de la Industria, la ‘Estrategia de Plataforma” En una estrategia de plataforma, un fabricante de software intenta convertir su producto en una plataforma propiamente dicha sobra la que todo el mundo programa. Programando aplicaciones sobre la plataforma de alguien, conlleva a que estas aplicaciones pasan a depender de dicha plataforma, y siempre que una copia de la aplicación es comprada, hay que comprar también una copia de la plataforma. Eso es por qué Windows es tan poderoso y Bill Gates se enriqueció tanto. Java pone en jaque la plataforma Windows, ocultando enteramente la interfaz de programación de Windows, i.e. la API Win32, detrás de las librerías de clases de Java. De ahí que aplicaciones puedan ser implementadas usando las librerías de Java nada más, sin tener conocimientos de plataforma Windows o Linux , por ejemplo. Eso hizo las aplicaciones ‘portables’ a varios sistemas operativos y llevó al grito de guerra “write once, run anywhere”. Por supuesto, Java estaba intentando convertirse en la plataforma líder, ocultando el S.O. base, ya sea Windows o MacOS. Scott McNealy, el CEO de Syn, quizás quería ser tan rico como Bill Gates. A Microsoft no le gustaba la estrategia Java de Sun, ya que reduciría la dependencia de la API Win32 de las aplicaciones, y Windows no estaría tan necesario. Aún así, los clientes seguían pidiendo Java para Windows. Finalmente, Microsoft escuchó a sus clientes: obtuvo licencia Java de Sun y la desplegó en la plataforma Windows. Según una demanda judicial de 1997, por Sun, Microsoft lo había hecho infringiendo el acuerdo de licencia. Sun afirmó que Microsoft modificó el JDK al omitir librerías que eran necesaria para ejecutar el propio Java. Eso obligaba a los programadores a invocar la API de Win32. Esta jugada estratégica buscaba imponer la plataforma Windows que Java estaba intentando ocultar . Sun ganó la demanda en 2001, obligando Microsoft a pagar perjuicios. A posteriori, Microsoft eliminó Java de su plataforma e introdujo tecnologías alternativas. Hoy por hoy, Java en Windows es fabricado por terceros.

OpenJDK y Opencore

Sabiendo que Sun lanzó Java como código abierto en 2007 y sabiendo que había implementaciones alternativas, uno se pregunta cómo Sun pensaba sacar dinero de Java. La respuesta de eso es el modelo actual de ‘open core’. El lanzamiento de OpenJDK, por Sun, en 2007, dio a los desarrolladores un entorno de desarrollo y ejecución bajo la licencia GPLv2. La licencia incluye un anexo llamado ‘Classpath Exception’ que permite a fabricante de software acoplar sus aplicaciones con el OpenJDK sin tener que abrir el código de sus aplicaciones. Para no perder su (posible) flujo de ganancias , Sun hace dos cosas, que juntas , presentan la estrategia de propiedad intelectual ‘core’ (núcleo) detrás de ‘open core model’: Sun tiene el copyright completo y de ahí la propiedad sobre la base de código OpenJDK. Cualquier colaborador externo tiene que firmar un acuerdo conjunto de copyright. Aunque esto favorece contribuciones de código, asegura que Sun sigue siendo el dueño del JDK. Sun, usa su derechos de propiedad para ofrecer OpenJDK bajo una licencia comercial a aquellos que no gustan el GPL (licencia dual ), y a la vez proveyendo funcionalidad (código cerrado) adicional . (modelo open core). De ahí que , para obtener tanto funciones mejoradas, los desarrolladores de aplicaciones Java deben pagar una licencia comercial. En sus inicios , Java , para ganar contra Microsoft, necesitaba realizar un crecimiento rápido y ventas en los años noventa. Java creció tan rápido, debido a que Sun colaboró con otros actores de la Industria. Eso fue realizado mediante el JCP, Proceso de Comunidad de Java. En aquel proceso, compañías como IBM, SAP, y cualquiera al que le importase , podía influir en el desarrollo de Java a través de especificaciones de librerías y asegurarse de la interoperabilidad con sus productos. Un output tangible del JCP es una serie de JSR’s, Solicitudes de Espeficaciones de Java. Cada JSR especifica una librería o componente similar. A cada especificación JSR le corresponde un TCK, Kit de Compatibilidad Tecnológica. Un TCK es, de facto, un paquete de pruebas que comprueba una implementación de la librería con la especificación. Si la librería aprueba, es considerada una implementación válida. Un TCK de Java combina varios TCK’s en un paquete de pruebas completo, para una configuración de Java determinada. Cualquiera con una implementación Java que quiera la licencia de marca de Java de Oracle, tiene que pasar el Java TCK correspondiente. Un rápido crecimiento y el modelo ‘open core’ significaba que podría haber un volumen de negocio significante.

Había solamente una amenaza a estas ganancias: implementaciones alternativas. estas implementaciones de Java incluyendo JVM, herramientas, y librerías de clases. La primera de las implementaciones , el proyecto GNU Classpath, empezó en 1998. Una implementación alternativa posterior el el proyecto ‘Apache Harmony’. Debido a la amplia participación de la industria, Sun y luego Oracle, no podía cerrar nuevamente Java, dado que era el lenguaje dominante en entorno empresarial. De ahí que Oracle provee una manera muy clara, para que la Industria adquiera una licencia de Java para etiquetar su propia implementación de Java. Hoy por hoy, Oracle, provee la licencia de marca Java , en dos variantes diferentes:

A clientes de pago, una licencia completa, si la implementación pasa el Java TCK.

Para proyectos gratuitos, tales como GNU Classpath o Apache Harmony, una licencia limitada es otrogada.

La opción 1 funciona muy bien, economicamente, para Oracle. La opción 2 no es realmente viable para proyectos Open Source, ya que , es un intento de limitar el alcance de estos proyectos. Con OpenJDK, Oracle provee una completa implementación de código abierto de Java. Además, Sun, ahora Oracle, hizo dos jugadas estratégicas para mermar implementaciones alternativas: La elección de GPLv2 (editada en 1991) , ya que cubre bien poco las licencias Las restricciones de uso, en la licencia de marca, para proyectos de código abierto. Una implementación, de código abierto, de Java , que quiera llamarse ‘Java’ tiene que superar el Java TCK apropiado. El uso del TCK y la marca Java son gratuitamente permitidos, sólo si el proyecto (más bien la organización que lo lleva) acepta ciertas limitaciones de uso para dicho proyecto. Hoy por hoy (2011), la principal limitación es que las implementaciones alternativas no pueden pueden ser usadas para desarrollo en sistemas embebidos. Aplicaciones empresariales, por otro lado, son permitidas. Un ejemplo de implementación alternativa es Apache Harmony, que provee una implementación completa bajo licencia Apache 2.0. La definición de Software de Código Abierto prohíbe la imposición al usuario de limitaciones de uso. Las limitaciones que impone Oracle no son aceptables por un proyecto de software libre que se precie. (Lo mismo se puede decir del Software Libre).

Se ha llegado a un Terminus para implementaciones libres y abiertas y no-limitadas de Java. ¿Y por qué no se hace un fork de OpenJDK, arrebatandolo de las manos de Oracle? Para hacer un fork, tenemos dos opciones Si quieres poner la marca ‘Java’ en tu fork, tendrías que pasar el TCK y aceptar las limitaciones de uso de Oracle. Ya que has aceptado distribuir el software bajo licencia GPLv2, aceptar estas limitaciones(a usuario final) te lleva a violar dicha licencia ( que es incompatible con las limitaciones) Si te da igual la marca ‘Java’, puedes obviar la certificación. Eso sí, sin certificación, no obtienes licencias de las patentes de software embebidas en el código de OpenJDK. Luego, cualquier propietario de alguna de esas patentes, al que no le gustes, puede demandar a tus clientes, que a su vez te demandarán por no disponer cobertura de patentes. La unica esperanza es que Google Dalvik supere las demandas de Oracle … Pero es que a su vez, Dalvik tampoco es completamente libre. (nota del traductor: Google ha perdido… está migrando sus usuarios de Dalvik a ART )

Otro Terminus , nuevamente.

Por ahora

Características de Java

Java, compilador e intérprete, es un lenguaje que fue pensado para ejecutarse en cualquier maquina, por lo que su forma de compilarse y ejecutarse es de la siguiente manera:

Tenemos un código fuente, escrito por el programador, que se guarda en unos archivos .java.

Los .java, al compilarlos, generamos un bytecode en archivos .class, no ligados a ningún sistema.

Estos, al ser independiente de sistema operativo y hardware, se van a ejecutar en una maquina virtual de Java, que si depende de estos últimos, pero que ejecuta los programas que se han compilado para cualquier maquina.

Tenemos dos elementos muy importantes:

- JDK (Java Development Kit).- Mas tarde, SDK, son aplicaciones y herramientas para desarrollar como por ejemplo: o Javac.- Compilador de java. o Java.- Interprete (Maquina virtual). Ejecuta bytecode (.class). o Applet Viewer.- Verifica applets y ejecuta. o JDB.- Depurador bytecode. o Javap.- Desamblador bytecode. o Javadoc.- Generador de autodocumentacion.

- JRE (Java Runtime Environment).- Maquina virtual y librerías para ejecutar código.

Características de Java

- Simple - Orientado a objetos - Portable - Eficiente - Concurrente (Multhread y Distribuido) - Robusto - Seguro (Paranoico) - Interpretado - Independiente de la plataforma

Corrección y estilo

- Clases en mayúscula - Variables en minúscula - Métodos en minúscula, excepto si está formado por varias palabras, que empezaran con mayúscula - Constantes en mayúsculas, juntas, y en clase estática.

Funcionalidades

Tipos Primitivos

Atributos

Clases

Constructores

Array

Casting

Herencia

Polimorfismo

a) Selección dinámica de método

b) Sobrescritura de un método

c) Sobrecarga de método

Vinculación dinámica

Excepciones

Fuentes