Código Abierto

3.359877488495 (1306)
Publicado por grag 02/04/2009 @ 18:11

Tags : código abierto, derecho de autor, derecho, sociedad

últimas noticias
Los portátiles de Educación dan oxígeno a la industria TIC - Cinco Días
Por ejemplo, Extremadura ha apostado por el software de código abierto durante los últimos años, mientras que Aragón ha optado por las aplicaciones de Microsoft para los tablet PC de los alumnos. Otra duda es cómo será el mantenimiento de esta flota de...
Disponible una nueva revisión de la suite de código abierto OpenOffice - CIO España
La primera revisión importante de las series 3,0 de la suite ofimática de código abierto OpenOffice.org, la versión 3.1, está ya disponible. En ella se han introducido grandes mejoras en términos de usabilidad e interfaz de usuario....
La compañía especializada en software de BI de código abierto ... - BI-Spain.com
Talend, compañía especializada en software de BI de código abierto ha dado a conocer Newsletter de mayo, la cual contiene whitepapers, noticias, artículos y eventos sobre el Business Intelligence. Sobresalen en esta entrega un mensaje de Vincent Pineau...
IBM lanzó una red social para sus desarrolladores de código abierto - CanalAR
Esta iniciativa se basó en que los profesionales de código abierto admitieron que las redes sociales, foros y blogs son sus principales fuentes de intercambio de conocimientos y relación con colegas de todas partes del mundo. El nuevo espacio lleva el...
«Euskera y comercio quedan reflejados en una sola imagen» - El Correo Digital (Vizcaya)
La letra E, «que representa a Eibar y al euskera al mismo tiempo», con asas y código de barras «que representa al comercio» es, desde ahora, la imagen que estará asociada al uso del euskera en los comercios del municipio....
España es el número dos del mundo en adopción de código abierto - TICpymes
Los resultados de un estudio realizado por Red Hat, junto al Georgia Institute of Technology, sobre la adopción del open source, sitúan a España en el segundo puesto en el nivel de adopción de las tecnologías de código abierto, sólo por detrás de...
Seresco libera su plataforma de código abierto Aries destinada al ... - IS-Portal (Comunicado de prensa)
Seresco, compañía española fundada en 1969 y dedicada al desarrollo de soluciones de software y al suministro de servicios dentro del ámbito de las Tecnologías de la Información y Comunicación (TIC), ha liberado una plataforma de código abierto para el...
COMUNICADO: El proyecto abierto de traducción de TED proporciona ... - Europa Press
Cada uno de los más de 400 diálogos de TED cuenta con una transcripción interactiva con código de tiempo y todos los idiomas disponibles. Gracias al uso de esta transcripción interactiva, un usuario puede elegir cualquier frase y disponer de la...
Informe sobre tendencias del Código Abierto en 75 países - Centro Internacional de Referencia Linux
Red Hat ha anunciado Open Source Index, un estudio realizado conjuntamente con el Instituto de Tecnología de Georgia en el que se compara la actividad y el entorno del código abierto en un total de 75 países. Este estudio es presentado a la comunidad...
IE pierde un 10% cada dos años - Muy Computer
Firefox es seguramente el software de código abierto más popular del mercado, superando recientemente las 900 millones de descargas desde su lanzamiento en noviembre de 2004 y convirtiéndose en una clara alternativa al navegador web de Microsoft....

Código abierto

Logotipo de Open Source.

Código abierto (en inglés open source) es el término con el que se conoce al software distribuido y desarrollado libremente. Fue utilizado por primera vez en 1998 por algunos usuarios de la comunidad del software libre, tratando de usarlo como reemplazo al ambiguo nombre original en inglés del software libre (free software). No obstante, el término continúa siendo ambivalente, puesto que se usa en la actualidad por parte de programadores que no ofrecen software libre pero, en cambio, sí ofrecen las fuentes o código de los programas para su revisión o modificación previamente autorizada por parte de sus pares académicos.

Dada la anterior ambivalencia, se prefiere el uso del término Software Libre para referirse a programas que se ofrecen con total libertad de modificación, uso y distribución bajo la regla implícita de no modificar dichas libertades hacia el futuro.

Free en inglés significa dos cosas distintas dependiendo del contexto: gratuidad y libertad. Lo cual implica, para el caso que nos ocupa, "software por el que no hay que pagar" (software gratuito) y, además, software libre, según la acepción española de libertad.

El término para algunos no resultó apropiado como reemplazo para el ya tradicional free software, pues eliminaba la idea de libertad, confundida usualmente con la simple gratuidad.

Desde el punto de vista de una "traducción estrictamente literal", el significado textual de "código abierto" es que "se puede examinar el código fuente", por lo que puede ser interpretado como un término más débil y flexible que el del software libre. Sobre esta base, se argumenta que un programa de código abierto puede ser software libre, pero también puede ser semilibre o incluso completamente no libre. Sin embargo, por lo general, un programa de código abierto puede ser y de hecho es software libre, como igualmente un programa Software Libre es Open Source. Esto ocurre dado que ambos movimientos reconocen el mismo conjunto de licencias y mantienen principios equivalentes.

Hay que diferenciar los programas Open source, que dan a los usuarios la libertad de mejorarlos, de los programas que simplemente tienen el código fuente disponible, posiblemente con fuertes restricciones sobre el uso de dicho código fuente. Mucha gente cree que cualquier software que tenga el código fuente disponible es open source, puesto que lo pueden manipular. Sin embargo, mucho de este software no da a sus usuarios la libertad de distribuir sus modificaciones, restringe el uso comercial, o en general restringe los derechos de los usuarios.

Un término que pretende resolver posibles ambigüedades o confusiones que ambos términos generan es FOSS (Free Open Source Software).

En la actualidad open source es utilizado para definir un movimiento nuevo de software (la Open Source Initiative), diferente al movimiento del Software Libre, incompatible con este último desde el punto de vista filosófico, y completamente equivalente desde el punto de vista práctico, de hecho, ambos movimientos trabajan juntos en el desarrollo práctico de proyectos.

La idea que late detrás del open source es sencilla: cuando los programadores en internet pueden leer, modificar y redistribuir el código fuente de un programa, éste evoluciona, se desarrolla y mejora. Los usuarios lo adaptan a sus necesidades, corrigen sus errores a una velocidad impresionante, mayor a la aplicada en el desarrollo de software convencional o cerrado, dando como resultado la producción de un mejor software.

Entre 1998 y 2000 se observó un gran crecimiento en la popularidad de Linux y de la formación de muchas empresas 'pro software de código abierto'. El movimiento también capturó la atención de la principal industria del software, llevando al software de código abierto las ofertas de compañías de software consolidadas como Sun Microsystems con StarOffice, que es su suite ofimática, e IBM con OpenAFS, que es una implementación de código abierto del Sistema de Ficheros Distribuido de Andrew.

La prehistoria del open source incluye la historia completa de UNIX, de los programas gratuitos (freeware) de internet y la cultura hacker.

La filosofía del Open Source orienta su atención en la premisa de que al compartir el código, el programa resultante tiende a ser de calidad superior al software propietario, es una visión técnica. Por otro lado, el Software Libre funciona bajo un ideal: el software propietario, al no poder compartirse, es antiético dado que prohibir compartir entre seres humanos va en contra de las leyes naturales.

Actualmente el director de la película antitrust (2001) esta en proceso de ofrecer su película de forma abierta.

El Open Source o Código Abierto, es hablar de Software Libre pero de forma amigable a las empresas. El término Open Source NO PLANTEA cuestiones éticas, como lo hace el término Software Libre. Richard Stallman, el creador del sistema GNU y la licencia libre GPL así como principal evangelizador acerca del software Libre y la cultura libre ha expresado su rechazo a utilizar el término "Open Source o Código Abierto" y prefiere usar Software Libre o Free Software.

Por supuesto, no se refieren a hacker como criminal informático, sino en el sentido original de la palabra: una persona que le apasiona el conocimiento, descubrir o aprender nuevas cosas y entender el funcionamiento de éstas, y que quiere compartir sus resultados con los demás. Los hackers de internet y de UNIX entienden muy bien el componente técnico del open source. Es parte de su forma de trabajar: es como se realiza el trabajo en internet.

La relación hacker-open source se encuentra por escrito en "La Catedral y el Bazar". Conocen lo fiables que son los engranajes de internet comparándolos con sus equivalentes privativos. Reemplazar el TCP/IP, DNS, Perl, Apache, etc., por el software Privativo sería, cuando menos, suicida.

Muchos hackers conocen y comparten las bondades del "open source" o "código abierto", pero se muestran reacios a utilizarlo porque creen que pueden perder su trabajo remunerado. Sin embargo, hay suficientes razones para pensar que ese temor es infundado.

El "open source" o "código abierto" no es sólo el medio por el que unos cuantos hackers tienen la oportunidad de luchar contra un monopolio. Este, además, ofrece la posibilidad a pequeñas y medianas empresas o individuos de colaborar para conseguir un producto que no podrían obtener debido a las altas restricciones y costosas licencias del software cerrado o privativo. También es una fórmula útil para corregir errores en un programa e introducir rápidamente los cambios que solicita el usuario final. El modelo open source lleva asociado un incremento en la seguridad de un sistema: su código fuente es público y está expuesto a millones de ojos. Lo cual quiere decir que los problemas se resolverán en lugar de esconderse hasta que la persona equivocada los descubra.

Al principio



Movimiento del software de código abierto

El movimiento del software de código abierto (o de fuentes abiertas) es una ramificación del movimiento del software libre que defiende el software de código abierto como una etiqueta alternativa del software libre, en el campo pragmático más que en el filosófico.

El movimiento fue fundado en 1998 por John 'maddog' Hall, Larry Augustin, Eric S. Raymond, Bruce Perens y otros. Raymond es quizás la persona a quien más se identifica con el movimiento; es todavía y se reconoce a sí mismo como el principal teórico, pero no reclama el liderazgo en algún sentido exclusivo. En contraste con el movimiento del software libre, el cual siempre ha estado dirigido esencialmente por una sola figura (Richard Stallman), el movimiento del software de código abierto está conducido por una especie de consejo de ancianos que incluye a Raymond, otros cofundadores son notables personalidades como Linus Torvalds, Larry Wall y Guido van Rossum.

Los fundadores estaban insatisfechos con lo que vieron como una actitud de confrontación por parte del movimiento del software libre y se inclinaron a defender el software libre solamente en los terrenos de su superioridad técnica (una declaración previamente hecha por Raymond en su ensayo "La Catedral y el Bazar"). Se esperaba que el "código abierto" y la propaganda asociada se volvieran un argumento más persuasivo para las empresas. El comentario de Raymond fue "si quieres cambiar al mundo, tienes que cooperar con la gente que firma los grandes cheques". (Cygnus Support buscó exactamente este enfoque desde hace ya algunos años, pero no se había anunciado de manera extensa).

El grupo adoptó la Definición de Open Source para el software de código abierto, basado en las Directrices de software libre de Debian. También estableció la Open Source Initiative (OSI) como organización administrativa del movimiento. Sin embargo, no tuvieron éxito en su intento de asegurar una marca registrada open source, para que funcionase como un imprimátur y así prevenir el mal uso del término. A pesar de esto, la OSI alcanzó una considerable influencia en la esfera corporativa y ha sido capaz de evitar el abuso del término a un mínimo tolerable a través de una vigorosa persuasión. Junto con la FSF, se ha convertido en una de las dos principales organizaciones defensoras de la comunidad hacker.

El periodo inicial del movimiento del software de código abierto coincidió con y en parte condujo la explosión de las punto-com entre 1998 y 2000 y observó gran crecimiento en la popularidad de Linux y de la formación de muchas empresas "pro software de código abierto". El movimiento también capturó la atención de la principal industria del software, llevando al software de código abierto las ofertas de compañías de software consolidadas como Corel (Corel Linux), Sun Microsystems (StarOffice) e IBM (OpenAFS). En el momento en que terminó la explosión de las punto-com en 2001, muchas de las esperanzas iniciales de los defensores del software de código abierto ya habían dado frutos y el movimiento continuó golpe a golpe durante el clima de recorte de costos de la recesión de 2001 a 2003.

Desde su inicio, el movimiento del software de código abierto ha sido materia de controversia dentro de la comunidad hacker.

Stallman, hablando por la Fundación del Software Libre (FSF), ha criticado los motivos del movimiento del software de código abierto. De acuerdo con él, el enfoque pragmático del movimiento distrae a los usuarios de las cuestiones morales centrales y de las libertades que el software libre ofrece, borrando la distinción con el software semi-libre o completamente propietario. Stallman describe a los movimientos del software libre y del software de código abierto como terrenos políticos separados dentro de la misma comunidad de software libre sin embargo, y agrega: Disentimos en los principios básicos, pero estamos de acuerdo más o menos en las recomendaciones prácticas. Así que podemos trabajar juntos en muchos proyectos específicos.

Tanto los defensores del software libre como los del software de código abierto se han aliado en tiempos de crisis, como contra los intensos ataques de Microsoft acerca de la GPL en 2001 y la demanda de SCO atacando al núcleo Linux en 2003. En realidad no hay una estricta división entre ambos movimientos, ya que muchos se identifican hasta cierto punto con ambos grupos (aunque algunos como Stallman, se casan con una de las dos filosofías exclusivamente).

Las tensiones entre ambas comunidades ocasionalmente han sido exacerbadas por el hábito de la prensa comercial y en general de encasillar sus diferencias como un drama personal entre Stallman y las celebridades del software de código abierto como Raymond o Torvalds.

En la práctica, las definiciones operativas del software libre y el software de código abierto son las mismas. Las listas de licencias que las cumplen mantenidas por la FSF y la OSI son casi idénticas, solo difieren en casos extremos como la de la primera versión de la Apple Public Source License (APSL). Los seguidores de los movimientos del software libre y software de código abierto comúnmente no tienen dificultad en cooperar en proyectos de software.

La confrontación del software de código abierto contra el software libre por tanto, reúne la lista de las divisiones filosóficas entre los hackers, junto con la guerra de editores y de KDE contra GNOME.

Algunos autores cuando discuten acerca de ambos movimientos, utilizan términos distintos de "software de código abierto" y "software libre" para intentar describir la unión de estos conceptos. Entre esos otros términos están open source software / free software (OSS/FS), free / open source software (FOSS) y free-libre / open source software (FLOSS).

Algunos dentro del movimiento de software de código abierto han declarado que los principios del código abierto pueden aplicarse en áreas distintas del software de computadoras, como protocolos de comunicaciones digitales, formatos de almacenamiento de datos y hardware abierto. Hay declaraciones más audaces que extienden las ideas del código abierto a campos completamente diferentes, tales como la diseminación del conocimiento general.

Al principio



Resetadsl

ResetADSL es un software de código abierto y de libre distribución (freeware) creado por Daniel Aparicio García, un Ingeniero en Informática cuando aún cursaba los últimos años de carrera. Este software surgió debido a la necesidad de corregir bloqueos (o cuelgues) de los router ADSL debidos a distintas causas manteniendo así la conexión permanente.

Tras publicar el programa bajo licencia GPL en la página Página de ADSLAyuda, donde se dispone de un foro destinado a resolver dudas y aportar ideas sobre este software, aparecieron distintas versiones, adaptadas a distintas necesidades según el tipo de router que posea el usuario.

Se puede descargar desde la página Página de descarga de ResetADSL.

Al principio



PalmOrb

PalmOrb es un software de código abierto para los dispositivos compatibles PalmOS que permite que sean usados como pantallas LCD de un ordenador. PalmOrb se puede utilizar con cualquier software de PC que sea compatible con MatrixOrbital LK204-25. (Una excepción es con un cable USB en Windows, que necesita LCD Smartie). El software compatible incluye LCD Smartie para Microsoft Windows o LCDproc y LCD4Linux (para Linux).

Al principio



Hamlets

Hamlets (conocido previamente como IBM Servlet-based Content Creation Framework) es el nombre de un sistema de código abierto para generar páginas de web, desarrollado originalmente por René Pawlitzek en IBM. Un Hamlet se define como una extensión a un servlet que lee plantillas en formato XHTML usando SAX (Simple API for XML), añadiendo contenido dinámicamente en lugares de la plantilla que están señalados con etiquetas e identificadores especiales. Un compilador de plantillas puede usarse para acelerar la operación de Hamlets.

Hamlets proporciona un framework que facilita el desarrollo de aplicaciones basadas en Web, y que es fácil de usar y de entender, ligero y pequeño, basado en servlets. Hamlets no solo soporta sino que hace obligatoria la separación entre contenido y presentación.

Al principio



Lenguaje de programación Java

Java es un lenguaje de programación orientado a objetos desarrollado por Sun Microsystems a principios de los años 90. El lenguaje en sí mismo toma mucha de su sintaxis de C y C++, pero tiene un modelo de objetos más simple y elimina herramientas de bajo nivel, que suelen inducir a muchos errores, como la manipulación directa de punteros o memoria.

Las aplicaciones Java están típicamente compiladas en un bytecode, aunque la compilación en código máquina nativo también es posible. En el tiempo de ejecución, el bytecode es normalmente interpretado o compilado a código nativo para la ejecución, aunque la ejecución directa por hardware del bytecode por un procesador Java también es posible.

La implementación original y de referencia del compilador, la máquina virtual y las bibliotecas de clases de Java fueron desarrollados por Sun Microsystems en 1995. Desde entonces, Sun ha controlado las especificaciones, el desarrollo y evolución del lenguaje a través del Java Community Process, si bien otros han desarrollado también implementaciones alternativas de estas tecnologías de Sun, algunas incluso bajo licencias de software libre.

Entre noviembre de 2006 y mayo de 2007, Sun Microsystems liberó la mayor parte de sus tecnologías Java bajo la licencia GNU GPL, de acuerdo con las especificaciones del Java Community Process, de tal forma que prácticamente todo el Java de Sun es ahora software libre (aunque la biblioteca de clases de Sun que se requiere para ejecutar los programas Java todavía no es software libre).

La tecnología Java se creó como una herramienta de programación para ser usada en un proyecto de set-top-box en una pequeña operación denominada the Green Project en Sun Microsystems en el año 1991. El equipo (Green Team), compuesto por trece personas y dirigido por James Gosling, trabajó durante 18 meses en Sand Hill Road en Menlo Park en su desarrollo.

El lenguaje se denominó inicialmente Oak (por un roble que había fuera de la oficina de Gosling), luego pasó a denominarse Green tras descubrir que Oak era ya una marca comercial registrada para adaptadores de tarjetas gráficas y finalmente se renombró a Java.

El término Java fue acuñado en una cafetería frecuentada por algunos de los miembros del equipo. Pero no está claro si es un acrónimo o no, aunque algunas fuentes señalan que podría tratarse de las iniciales de sus creadores: James Gosling, Arthur Van Hoff, y Andy Bechtolsheim. Otros abogan por el siguiente acrónimo, Just Another Vague Acronym ("sólo otro acrónimo ambiguo más"). La hipótesis que más fuerza tiene es la que Java debe su nombre a un tipo de café disponible en la cafetería cercana, de ahí que el icono de java sea una taza de cafe caliente. Un pequeño signo que da fuerza a esta teoría es que los 4 primeros bytes (el número mágico) de los archivos .class que genera el compilador, son en hexadecimal, 0xCAFEBABE. Otros simplemente dicen que el nombre fue sacado al parecer de una lista aleatoria de palabras.

Los objetivos de Gosling eran implementar una máquina virtual y un lenguaje con una estructura y sintaxis similar a C++. Entre junio y julio de 1994, tras una sesión maratoniana de tres días entre John Gaga, James Gosling, Joy Naughton, Wayne Rosing y Eric Schmidt, el equipo reorientó la plataforma hacia la Web. Sintieron que la llegada del navegador web Mosaic, propiciaría que Internet se convirtiese en un medio interactivo, como el que pensaban era la televisión por cable. Naughton creó entonces un prototipo de navegador, WebRunner, que más tarde sería conocido como HotJava.

En 1994, se les hizo una demostración de HotJava y la plataforma Java a los ejecutivos de Sun. Java 1.0a pudo descargarse por primera vez en 1994, pero hubo que esperar al 23 de mayo de 1995, durante las conferencias de SunWorld, a que vieran la luz pública Java y HotJava, el navegador Web. El acontecimiento fue anunciado por John Gage, el Director Científico de Sun Microsystems. El acto estuvo acompañado por una pequeña sorpresa adicional, el anuncio por parte de Marc Andreessen, Vicepresidente Ejecutivo de Netscape, que Java sería soportado en sus navegadores. El 9 de enero del año siguiente, 1996, Sun fundó el grupo empresarial JavaSoft para que se encargase del desarrollo tecnológico. Dos semanas más tarde la primera versión de Java fue publicada.

La promesa inicial de Gosling era Write Once, Run Anywhere (Escríbelo una vez, ejecútalo en cualquier lugar), proporcionando un lenguaje independiente de la plataforma y un entorno de ejecución (la JVM) ligero y gratuito para las plataformas más populares de forma que los binarios (bytecode) de las aplicaciones Java pudiesen ejecutarse en cualquier plataforma.

El entorno de ejecución era relativamente seguro y los principales navegadores web pronto incorporaron la posibilidad de ejecutar applets Java incrustadas en las páginas web.

Java ha experimentado numerosos cambios desde la versión primigenia, JDK 1.0, así como un enorme incremento en el número de clases y paquetes que componen la biblioteca estándar.

Desde J2SE 1.4, la evolución del lenguaje ha sido regulada por el JCP (Java Community Process), que usa Java Specification Requests (JSRs) para proponer y especificar cambios en la plataforma Java. El lenguaje en sí mismo está especificado en la Java Language Specification (JLS), o Especificación del Lenguaje Java. Los cambios en los JLS son gestionados en JSR 901.

Además de los cambios en el lenguaje, con el paso de los años se han efectuado muchos más cambios dramáticos en la biblioteca de clases de Java (Java class library) que ha crecido de unos pocos cientos de clases en JDK 1.0 hasta más de tres mil en J2SE 5.0. APIs completamente nuevas, como Swing y Java2D, han sido introducidas y muchos de los métodos y clases originales de JDK 1.0 están obsoletas.

En el 2005 se calcula en 4,5 millones el número de desarrolladores y 2.500 millones de dispositivos habilitados con tecnología Java.

Entre noviembre de 2006 y mayo de 2007, Sun Microsystems liberó la mayor parte de sus tecnologías Java bajo la Licencia pública general de GNU, de acuerdo con las especificaciones del Java Community Process, de tal forma que prácticamente todo el Java de Sun es ahora software libre (aunque la biblioteca de clases de Sun que se requiere para ejecutar los programas Java todavía no es software libre).

Para conseguir la ejecución de código remoto y el soporte de red, los programadores de Java a veces recurren a extensiones como CORBA (Common Object Request Broker Architecture), Internet Communications Engine o OSGi respectivamente.

La primera característica, orientado a objetos (“OO”), se refiere a un método de programación y al diseño del lenguaje. Aunque hay muchas interpretaciones para OO, una primera idea es diseñar el software de forma que los distintos tipos de datos que usen estén unidos a sus operaciones. Así, los datos y el código (funciones o métodos) se combinan en entidades llamadas objetos. Un objeto puede verse como un paquete que contiene el “comportamiento” (el código) y el “estado” (datos). El principio es separar aquello que cambia de las cosas que permanecen inalterables. Frecuentemente, cambiar una estructura de datos implica un cambio en el código que opera sobre los mismos, o viceversa. Esta separación en objetos coherentes e independientes ofrece una base más estable para el diseño de un sistema software. El objetivo es hacer que grandes proyectos sean fáciles de gestionar y manejar, mejorando como consecuencia su calidad y reduciendo el número de proyectos fallidos. Otra de las grandes promesas de la programación orientada a objetos es la creación de entidades más genéricas (objetos) que permitan la reutilización del software entre proyectos, una de las premisas fundamentales de la Ingeniería del Software. Un objeto genérico “cliente”, por ejemplo, debería en teoría tener el mismo conjunto de comportamiento en diferentes proyectos, sobre todo cuando estos coinciden en cierta medida, algo que suele suceder en las grandes organizaciones. En este sentido, los objetos podrían verse como piezas reutilizables que pueden emplearse en múltiples proyectos distintos, posibilitando así a la industria del software a construir proyectos de envergadura empleando componentes ya existentes y de comprobada calidad; conduciendo esto finalmente a una reducción drástica del tiempo de desarrollo. Podemos usar como ejemplo de objeto el aluminio. Una vez definidos datos (peso, maleabilidad, etc.), y su “comportamiento” (soldar dos piezas, etc.), el objeto “aluminio” puede ser reutilizado en el campo de la construcción, del automóvil, de la aviación, etc.

La reutilización del software ha experimentado resultados dispares, encontrando dos dificultades principales: el diseño de objetos realmente genéricos es pobremente comprendido, y falta una metodología para la amplia comunicación de oportunidades de reutilización. Algunas comunidades de “código abierto” (open source) quieren ayudar en este problema dando medios a los desarrolladores para diseminar la información sobre el uso y versatilidad de objetos reutilizables y bibliotecas de objetos.

La segunda característica, la independencia de la plataforma, significa que programas escritos en el lenguaje Java pueden ejecutarse igualmente en cualquier tipo de hardware. Es lo que significa ser capaz de escribir un programa una vez y que pueda ejecutarse en cualquier dispositivo, tal como reza el axioma de Java, ‘’’write once, run everywhere’’’.

Para ello, se compila el código fuente escrito en lenguaje Java, para generar un código conocido como “bytecode” (específicamente Java bytecode)—instrucciones máquina simplificadas específicas de la plataforma Java. Esta pieza está “a medio camino” entre el código fuente y el código máquina que entiende el dispositivo destino. El bytecode es ejecutado entonces en la máquina virtual (JVM), un programa escrito en código nativo de la plataforma destino (que es el que entiende su hardware), que interpreta y ejecuta el código. Además, se suministran bibliotecas adicionales para acceder a las características de cada dispositivo (como los gráficos, ejecución mediante hebras o threads, la interfaz de red) de forma unificada. Se debe tener presente que, aunque hay una etapa explícita de compilación, el bytecode generado es interpretado o convertido a instrucciones máquina del código nativo por el compilador JIT (Just In Time).

Hay implementaciones del compilador de Java que convierten el código fuente directamente en código objeto nativo, como GCJ. Esto elimina la etapa intermedia donde se genera el bytecode, pero la salida de este tipo de compiladores sólo puede ejecutarse en un tipo de arquitectura.

La licencia sobre Java de Sun insiste que todas las implementaciones sean “compatibles”. Esto dio lugar a una disputa legal entre Microsoft y Sun, cuando éste último alegó que la implementación de Microsoft no daba soporte a las interfaces RMI y JNI además de haber añadido características ‘’dependientes’’ de su plataforma. Sun demandó a Microsoft y ganó por daños y perjuicios (unos 20 millones de dólares) así como una orden judicial forzando la acatación de la licencia de Sun. Como respuesta, Microsoft no ofrece Java con su versión de sistema operativo, y en recientes versiones de Windows, su navegador Internet Explorer no admite la ejecución de applets sin un conector (o plugin) aparte. Sin embargo, Sun y otras fuentes ofrecen versiones gratuitas para distintas versiones de Windows.

Las primeras implementaciones del lenguaje usaban una máquina virtual interpretada para conseguir la portabilidad. Sin embargo, el resultado eran programas que se ejecutaban comparativamente más lentos que aquellos escritos en C o C++. Esto hizo que Java se ganase una reputación de lento en rendimiento. Las implementaciones recientes de la JVM dan lugar a programas que se ejecutan considerablemente más rápido que las versiones antiguas, empleando diversas técnicas, aunque sigue siendo mucho más lento que otros lenguajes.

La primera de estas técnicas es simplemente compilar directamente en código nativo como hacen los compiladores tradicionales, eliminando la etapa del bytecode. Esto da lugar a un gran rendimiento en la ejecución, pero tapa el camino a la portabilidad. Otra técnica, conocida como compilación JIT (Just In Time, o ‘’’compilación al vuelo’’’), convierte el bytecode a código nativo cuando se ejecuta la aplicación. Otras máquinas virtuales más sofisticadas usan una ‘’’recompilación dinámica’’’ en la que la VM es capaz de analizar el comportamiento del programa en ejecución y recompila y optimiza las partes críticas. La recompilación dinámica puede lograr mayor grado de optimización que la compilación tradicional (o estática), ya que puede basar su trabajo en el conocimiento que de primera mano tiene sobre el entorno de ejecución y el conjunto de clases cargadas en memoria. La compilación JIT y la recompilación dinámica permiten a los programas Java aprovechar la velocidad de ejecución del código nativo sin por ello perder la ventaja de la portabilidad.

El concepto de independencia de la plataforma de Java cuenta, sin embargo, con un gran éxito en las aplicaciones en el entorno del servidor, como los Servicios Web, los Servlets, los Java Beans, así como en sistemas empotrados basados en OSGi, usando entornos Java empotrados.

En C++, el desarrollador puede asignar memoria en una zona conocida como heap (montículo) para crear cualquier objeto, y posteriormente desalojar el espacio asignado cuando desea borrarlo. Un olvido a la hora de desalojar memoria previamente solicitada puede llevar a una fuga de memoria, ya que el sistema operativo seguirá pensando que esa zona de memoria está siendo usada por una aplicación cuando en realidad no es así. Así, un programa mal diseñado podría consumir una cantidad desproporcionada de memoria. Además, si una misma región de memoria es desalojada dos veces el programa puede volverse inestable y llevar a un eventual cuelgue. No obstante, se debe señalar que C++ también permite crear objetos en la pila de llamadas de una función o bloque, de forma que se libere la memoria (y se ejecute el destructor del objeto) de forma automática al finalizar la ejecución de la función o bloque.

En Java, este problema potencial es evitado en gran medida por el recolector automático de basura (o automatic garbage collector). El programador determina cuándo se crean los objetos y el entorno en tiempo de ejecución de Java (Java runtime) es el responsable de gestionar el ciclo de vida de los objetos. El programa, u otros objetos pueden tener localizado un objeto mediante una referencia a éste (que, desde un punto de vista de bajo nivel es una dirección de memoria). Cuando no quedan referencias a un objeto, el recolector de basura de Java borra el objeto, liberando así la memoria que ocupaba previniendo posibles fugas (ejemplo: un objeto creado y únicamente usado dentro de un método sólo tiene entidad dentro de éste; al salir del método el objeto es eliminado). Aun así, es posible que se produzcan fugas de memoria si el código almacena referencias a objetos que ya no son necesarios—es decir, pueden aún ocurrir, pero en un nivel conceptual superior. En definitiva, el recolector de basura de Java permite una fácil creación y eliminación de objetos, mayor seguridad y puede que más rápida que en C++ .

La recolección de basura de Java es un proceso prácticamente invisible al desarrollador. Es decir, el programador no tiene conciencia de cuándo la recolección de basura tendrá lugar, ya que ésta no tiene necesariamente que guardar relación con las acciones que realiza el código fuente.

Debe tenerse en cuenta que la memoria es sólo uno de los muchos recursos que deben ser gestionados.

La sintaxis de Java se deriva en gran medida de C++. Pero a diferencia de éste, que combina la sintaxis para programación genérica, estructurada y orientada a objetos, Java fue construido desde el principio para ser completamente orientado a objetos. Todo en Java es un objeto (salvo algunas excepciones), y todo en Java reside en alguna clase (recordemos que una clase es un molde a partir del cual pueden crearse varios objetos).

Este ejemplo necesita una pequeña explicación.

Las applets de Java son programas incrustados en otras aplicaciones, normalmente una página Web que se muestra en un navegador.

La sentencia import indica al compilador de Java que incluya las clases java.applet. Applet y java.awt. Graphics, para poder referenciarlas por sus nombres, sin tener que anteponer la ruta completa cada vez que se quieran usar en el código fuente.

La clase Hola extiende (extends) a la clase Applet, es decir, es una subclase de ésta. La clase Applet permite a la aplicación mostrar y controlar el estado del applet. La clase Applet es un componente del AWT (Abstract Windowing Toolkit), que permite al applet mostrar una inteterfaz gráfica de usuario o GUI (Graphical User Interface), y responder a eventos generados por el usuario.

La clase Hola sobrecarga el método paint (Graphics) heredado de la superclase contenedora (Applet en este caso), para acceder al código encargado de dibujar. El método paint() recibe un objeto Graphics que contiene el contexto gráfico para dibujar el applet. El método paint() llama al método drawString (String, int, int) del objeto Graphics para mostrar la cadena de caracteres Hola, mundo! en la posición (65, 96) del espacio de dibujo asignado al applet.

La referencia al applet es colocada en un documento HTML usando la etiqueta <applet>. Esta etiqueta o tag tiene tres atributos: code="Hola" indica el nombre del applet, y width="200" height="200" establece la anchura y altura, respectivamente, del applet. Un applet también pueden alojarse dentro de un documento HTML usando los elementos object, o embed, aunque el soporte que ofrecen los navegadores Web no es uniforme.

Los servlets son componentes de la parte del servidor de Java EE, encargados de generar respuestas a las peticiones recibidas de los clientes.

Las sentencias import indican al compilador de Java la inclusión de todas las clases públicas e interfaces de los paquetes java.io y javax.servlet en la compilación.

La clase Hola extiende (extends), es heredera de la clase GenericServlet. Esta clase proporciona la interfaz para que el servidor le pase las peticiones al servlet y el mecanismo para controlar el ciclo de vida del servlet.

La clase Hola sobrecarga el método service (ServletRequest, ServletResponse), definido por la interfaz servlet para acceder al manejador de la petición de servicio. El método service() recibe un objeto de tipo ServletRequest que contiene la petición del cliente y un objeto de tipo ServletResponse, usado para generar la respuesta que se devuelve al cliente. El método service() puede lanzar (throws) excepciones de tipo ServletException e IOException si ocurre algún tipo de anomalía.

El método setContentType (String) en el objeto respuesta establece el tipo de contenido MIME a "text/html", para indicar al cliente que la respuesta a su petición es una página con formato HTML. El método getWriter() del objeto respuesta devuelve un objeto de tipo PrintWriter, usado como una tubería por la que viajarán los datos al cliente. El método println (String) escribe la cadena "Hola, mundo!" en la respuesta y finalmente se llama al método close() para cerrar la conexión, que hace que los datos escritos en la tubería o stream sean devueltos al cliente.

Swing es la biblioteca para la interfaz gráfica de usuario avanzada de la plataforma Java SE.

Las instrucciones import indican al compilador de Java que las clases e interfaces del paquete javax.swing se incluyan en la compilación.

La clase Hola extiende (extends) la clase javax.swing.JFrame, que implementa una ventana con una barra de título y un control para cerrarla.

El constructor Hola() inicializa el marco o frame llamando al método setDefaultCloseOperation (int) heredado de JFrame para establecer las operaciones por defecto cuando el control de cierre en la barra de título es seleccionado al valor WindowConstants.DISPOSE_ON_CLOSE. Esto hace que se liberen los recursos tomados por la ventana cuando es cerrada, y no simplemente ocultada, lo que permite a la máquina virtual y al programa acabar su ejecución. A continuación se crea un objeto de tipo JLabel con el texto "Hola, mundo!", y se añade al marco mediante el método add (Component), heredado de la clase Container. El método pack(), heredado de la clase Window, es invocado para dimensionar la ventana y distribuir su contenido.

El método main() es llamado por la JVM al comienzo del programa. Crea una instancia de la clase Hola y hace la ventana sea mostrada invocando al método setVisible (boolean) de la superclase (clase de la que hereda) con el parámetro a true. Véase que, una vez el marco es dibujado, el programa no termina cuando se sale del método main(), ya que el código del que depende se encuentra en un hilo de ejecución independiente ya lanzado, y que permanecerá activo hasta que todas las ventanas hayan sido destruidas.

El diseño de Java, su robustez, el respaldo de la industria y su fácil portabilidad han hecho de Java uno de los lenguajes con un mayor crecimiento y amplitud de uso en distintos ámbitos de la industria de la informática.

Desde la creación de la especificación J2ME (Java 2 Platform, Micro Edition), una versión del entorno de ejecución Java reducido y altamente optimizado, especialmente desarrollado para el mercado de dispositivos electrónicos de consumo se ha producido toda una revolución en lo que a la extensión de Java se refiere.

Es posible encontrar microprocesadores específicamente diseñados para ejecutar bytecode Java y software Java para tarjetas inteligentes (JavaCard), teléfonos móviles, buscapersonas, set-top-boxes, sintonizadores de TV y otros pequeños electrodomésticos.

El modelo de desarrollo de estas aplicaciones es muy semejante a las applets de los navegadores salvo que en este caso se denominan MIDlets.

Desde la primera versión de java existe la posibilidad de desarrollar pequeñas aplicaciones (Applets) en Java que luego pueden ser incrustadas en una página HTML para que sean descargadas y ejecutadas por el navegador web. Estas mini-aplicaciones se ejecutan en una JVM que el navegador tiene configurada como extensión (plug-in) en un contexto de seguridad restringido configurable para impedir la ejecución local de código potencialmente malicioso.

El éxito de este tipo de aplicaciones (la visión del equipo de Gosling) no fue realmente el esperado debido a diversos factores, siendo quizás el más importante la lentitud y el reducido ancho de banda de las comunicaciones en aquel entonces que limitaba el tamaño de las applets que se incrustaban en el navegador. La aparición posterior de otras alternativas (aplicaciones web dinámicas de servidor) dejó un reducido ámbito de uso para esta tecnología, quedando hoy relegada fundamentalmente a componentes específicos para la intermediación desde una aplicación web dinámica de servidor con dispositivos ubicados en la máquina cliente donde se ejecuta el navegador.

Las applets Java no son las únicas tecnologías (aunque sí las primeras) de componentes complejos incrustados en el navegador. Otras tecnologías similares pueden ser: ActiveX de Microsoft, Flash, Java Web Start, etc.

En la parte del servidor, Java es más popular que nunca, desde la aparición de la especificación de Servlets y JSP (Java Server Pages).

Hasta entonces, las aplicaciones web dinámicas de servidor que existían se basaban fundamentalmente en componentes CGI y lenguajes interpretados. Ambos tenían diversos inconvenientes (fundamentalmente lentitud, elevada carga computacional o de memoria y propensión a errores por su interpretación dinámica).

La especificación de Servlets y JSPs define un API de programación y los requisitos para un contenedor (servidor) dentro del cual se puedan desplegar estos componentes para formar aplicaciones web dinámicas completas. Hoy día existen multitud de contenedores (libres y comerciales) compatibles con estas especificaciones.

A partir de su expansión entre la comunidad de desarrolladores, estas tecnologías han dado paso a modelos de desarrollo mucho más elaborados con frameworks (pe Struts, Webwork) que se sobreponen sobre los servlets y las JSPs para conseguir un entorno de trabajo mucho más poderoso y segmentado en el que la especialización de roles sea posible (desarrolladores, diseñadores gráficos, ...) y se facilite la reutilización y robustez de código. A pesar de todo ello, las tecnologías que subyacen (Servlets y JSPs) son substancialmente las mismas.

Este modelo de trabajo se ha convertido en un estándar de-facto para el desarrollo de aplicaciones web dinámicas de servidor y otras tecnologías (pe. ASP) se han basado en él.

Hoy en día existen multitud de aplicaciones gráficas de usuario basadas en Java. El entorno de ejecución Java (JRE) se ha convertido en un componente habitual en los PC de usuario de los sistemas operativos más usados en el mundo. Además, muchas aplicaciones Java lo incluyen dentro del propio paquete de la aplicación de modo que se ejecuten en cualquier PC.

En las primeras versiones de la plataforma Java existían importantes limitaciones en las APIs de desarrollo gráfico (AWT). Desde la aparición de la biblioteca Swing la situación mejoró substancialmente y posteriormente con la aparición de bibliotecas como SWT hacen que el desarrollo de aplicaciones de escritorio complejas y con gran dinamismo, usabilidad, etc. sea relativamente sencillo.

Una versión del entorno de ejecución Java JRE (Java Runtime Environment) está disponible en la mayoría de equipos de escritorio. Sin embargo, Microsoft no lo ha incluido por defecto en sus sistemas operativos. En el caso de Apple, éste incluye una versión propia del JRE en su sistema operativo, el Mac OS. También es un producto que por defecto aparece en la mayoría de las distribuciones de Linux. Debido a incompatibilidades entre distintas versiones del JRE, muchas aplicaciones prefieren instalar su propia copia del JRE antes que confiar su suerte a la aplicación instalada por defecto. Los desarrolladores de applets de Java o bien deben insistir a los usuarios en la actualización del JRE, o bien desarrollar bajo una versión antigua de Java y verificar el correcto funcionamiento en las versiones posteriores.

Sun Microsystem, como creador del lenguaje de programación Java y de la plataforma JDK, mantiene fuertes políticas para mantener una especificación del lenguaje así como de la máquina virtual a través del JCP. Es debido a este esfuerzo que se mantiene un estándar de facto.

Harold dijo en 1995 que Java fue creado para abrir una nueva vía en la gestión de software complejo, y es por regla general aceptado que se ha comportado bien en ese aspecto. Sin embargo no puede decirse que Java no tenga grietas, ni que se adapta completamente a todos los estilos de programación, todos los entornos, o todas las necesidades.

La apariencia externa (el ‘’’look and feel’’’) de las aplicaciones GUI (Graphical User Interface) escritas en Java usando la plataforma Swing difiere a menudo de la que muestran aplicaciones nativas. Aunque el programador puede usar el juego de herramientas AWT (Abstract Windowing Toolkit) que genera objetos gráficos de la plataforma nativa, el AWT no es capaz de funciones gráficas avanzadas sin sacrificar la portabilidad entre plataformas; ya que cada una tiene un conjunto de APIs distinto, especialmente para objetos gráficos de alto nivel. Las herramientas de Swing, escritas completamente en Java, evitan este problema construyendo los objetos gráficos a partir de los mecanismos de dibujo básicos que deben estar disponibles en todas las plataformas. El inconveniente es el trabajo extra requerido para conseguir la misma apariencia de la plataforma destino. Aunque esto es posible (usando GTK+ y el Look-and-Feel de Windows), la mayoría de los usuarios no saben cómo cambiar la apariencia que se proporciona por defecto por aquella que se adapta a la de la plataforma.

El rendimiento de una aplicación está determinado por multitud de factores, por lo que no es fácil hacer una comparación que resulte totalmente objetiva. En tiempo de ejecución, el rendimiento de una aplicación Java depende más de la eficiencia del compilador, o la JVM, que de las propiedades intrínsecas del lenguaje. El bytecode de Java puede ser interpretado en tiempo de ejecución por la máquina virtual, o bien compilado al cargarse el programa, o durante la propia ejecución, para generar código nativo que se ejecuta directamente sobre el hardware. Si es interpretado, será más lento que usando el código máquina intrínseco de la plataforma destino. Si es compilado, durante la carga inicial o la ejecución, la penalización está en el tiempo necesario para llevar a cabo la compilación.

Algunas características del propio lenguaje conllevan una penalización en tiempo, aunque no son únicas de Java. Algunas de ellas son el chequeo de los límites de arrays, chequeo en tiempo de ejecución de tipos, y la indirección de funciones virtuales.

El uso de un recolector de basura para eliminar de forma automática aquellos objetos no requeridos, añade una sobrecarga que puede afectar al rendimiento, o ser apenas apreciable, dependiendo de la tecnología del recolector y de la aplicación en concreto. Las JVM modernas usan recolectores de basura que gracias a rápidos algoritmos de manejo de memoria, consiguen que algunas aplicaciones puedan ejecutarse más eficientemente.

El rendimiento entre un compilador JIT y los compiladores nativos puede ser parecido, aunque la distinción no está clara en este punto. La compilación mediante el JIT puede consumir un tiempo apreciable, un inconveniente principalmente para aplicaciones de corta duración o con gran cantidad de código. Sin embargo, una vez compilado, el rendimiento del programa puede ser comparable al que consiguen compiladores nativos de la plataforma destino, inclusive en tareas numéricas. Aunque Java no permite la expansión manual de llamadas a métodos, muchos compiladores JIT realizan esta optimización durante la carga de la aplicación y pueden aprovechar información del entorno en tiempo de ejecución para llevar a cabo transformaciones eficientes durante la propia ejecución de la aplicación. Esta recompilación dinámica, como la que proporciona la máquina virtual HotSpot de Sun, puede llegar a mejorar el resultado de compiladores estáticos tradicionales, gracias a los datos que sólo están disponibles durante el tiempo de ejecución.

Java fue diseñado para ofrecer seguridad y portabilidad, y no ofrece acceso directo al hardware de la arquitectura ni al espacio de direcciones. Java no soporta expansión de código ensamblador, aunque las aplicaciones pueden acceder a características de bajo nivel usando bibliotecas nativas (JNI, Java Native Interfaces).

El JRE (Java Runtime Environment, o Entorno en Tiempo de Ejecución de Java) es el software necesario para ejecutar cualquier aplicación desarrollada para la plataforma Java. El usuario final usa el JRE como parte de paquetes software o plugins (o conectores) en un navegador Web. Sun ofrece también el SDK de Java 2, o JDK (Java Development Kit) en cuyo seno reside el JRE, e incluye herramientas como el compilador de Java, Javadoc para generar documentación o el depurador. Puede también obtenerse como un paquete independiente, y puede considerarse como el entorno necesario para ejecutar una aplicación Java, mientras que un desarrollador debe además contar con otras facilidades que ofrece el JDK.

Las clases en las APIs de Java se organizan en grupos disjuntos llamados paquetes. Cada paquete contiene un conjunto de interfaces, clases y excepciones relacionadas. La información sobre los paquetes que ofrece cada plataforma puede encontrarse en la documentación de ésta.

El conjunto de las APIs es controlado por Sun Microsystems junto con otras entidades o personas a través del programa JCP (Java Community Process). Las compañías o individuos participantes del JCP pueden influir de forma activa en el diseño y desarrollo de las APIs, algo que ha sido motivo de controversia.

En 2004, IBM y BEA apoyaron públicamente la idea de crear una implementación de código abierto (open source) de Java, algo a lo que Sun, a fecha de 2006, se ha negado.

Java se ha convertido en un lenguaje con una implantación masiva en todos los entornos (personales y empresariales). El control que mantiene Sun sobre éste genera reticencias en la comunidad de empresas con fuertes intereses en Java (IBM, Oracle) y obviamente en la comunidad de desarrolladores de software libre.

La evolución basada en un comité en el que participen todos los implicados no es suficiente y la comunidad demandaba desde hace tiempo la liberación de las APIs y bibliotecas básicas de la JDK.

En diciembre de 2006, Sun está en pleno relanzamiento de su plataforma Java bajo la licencia GPL de GNU.

La importancia del código abierto en relación con Java puede verse entre otras cosas, en que el presidente y CEO de Sun, Jonathan Schwartz, ha retado a la compañía a que ofrezca código abierto para todo el software que produce Sun (fuente), Sun ya hace mucho tiempo que empezó a apostar por el código abierto cuando liberó StarOffice (Llamado ahora OpenOffice.org).

Existen alternativas suficientemente maduras para el entorno de ejecución y de desarrollo de Java con una gran cobertura de funcionalidades con respecto a las implementaciones comerciales de Sun, IBM, Bea, ...

Notar que este artículo fue escrito antes de la liberación del código fuente de Java. En la actualidad la postura de la Free Software Foundation y de Richard Stallman han cambiado, mostrándose partidarios ambos por su uso en software libre.

Al principio



Source : Wikipedia