miércoles, 29 de enero de 2014

Open Source O Código Abierto

Código Abierto es la expresión con la que se conoce al software distribuido y desarrollado libremente. Se focaliza más en los beneficios prácticos (acceso al código fuente) que en cuestiones éticas o de libertad que tanto se destacan en el software libre.
La mayoría del software que compras o te descargas de Internet, solo viene en un formato ya compilado y preparado para usar. Cuando hablamos de compilado, nos referimos a que el código del programa informático que creó el diseñador, conocido como código fuente, ha sido pasado por un programa especial llamado compilador, que traduce el código fuente en un formato que el ordenador puede entender.
Es extremadamente difícil modificar la versión compilada de la mayoría de las aplicaciones, y casi imposible ver como el diseñador del programa creo las diferentes partes del software. Muchos fabricantes de software comerciales ven esto como una ventaja que previene que otras compañías puedan copiar el código y usarlo en un producto competitivo. También les da un control sobre la calidad y las funciones que se pueden encontrar en un producto en particular.
Un software open source, o de código abierto en español, es todo lo contrario de lo que hemos expuesto. El código fuente es incluido con la versión compilada, y la modificación o personalización de este código es algo que se ve con buenos ojos. Los desarrolladores de software que soportan el concepto de open source, creen que permitiendo a cualquiera que esté interesado en modificar el código fuente, la aplicación será más útil y más perfecta a la larga.

Extraído el 29/01/2014 de: http://www.ordenadores-y-portatiles.com/open-source.html

Derechos de Autor de un Software


Al Crear Un Nuevo Software 
¿De Quién Son Los Derechos de Autor? 


Software Propietario

El término ha sido creado para designar al antónimo del concepto de software libre, por lo cual en diversos sectores se le han asignado implicaciones políticas relativas al mismo. Para la Fundación para el Software Libre (FSF), este concepto se aplica a cualquier programa informático que no es libre o que sólo lo es parcialmente (semilibre), sea porque su uso, redistribución o modificación está prohibida, o sea porque requiere permiso expreso del titular del software.

La persona física o jurídica (compañía, corporación, fundación, etc.), al poseer los derechos de autor sobre un software, tiene la posibilidad de controlar y restringir los derechos del usuario sobre su programa, lo que en el software no libre implica por lo general que el usuario sólo tendrá derecho a ejecutar el software bajo ciertas condiciones, comúnmente fijadas por el proveedor, que signifique la restricción de una o varias de las cuatro libertades.


Extraido el 29/01/2014 de: http://es.wikipedia.org/wiki/Software_propietario

Derechos de Autor: Son las facultades morales y patrimoniales, que se reconocen al autor de la obra original.
  • Los derechos morales hacen referencia al derecho personal de autor, y como tal resultan intransferibles, irrenunciables e inembargables. Art 14 TRLPI
  • Los derechos patrimoniales hacen referencia a los derechos de explotación económica de la obra. Art 17-23 TRLPI
La regla general, es que el autor de una obra (software) será el titular de los derechos de autor.



Titularidad de los Derechos de autor sobre el software  Art 97 TRLPI


Los Derechos de autor de un programa de ordenador o software, puede corresponder:


a)  A la persona natural o física, que como autor ha creado el programa de ordenador. Art 97.1 LPI


b)  Al grupo de personas físicas o naturales que han colaborado de forma individualizada en la creación del programa de ordenador. Cada aportación es identificable de forma aislada.


En este caso, el programa de ordenador se califica como una obra en colaboración, es decir, el programa es el fruto de la aportación independiente de varios autores. Los derechos de autor sobre el programa,  corresponde a todos ellos en la proporción que estos determinen. La divulgación y explotación del programa, requiere el consentimiento de todos ellos.


c)  A la persona jurídica (sociedad mercantil) que edite y divulgue el programa de ordenador bajo su nombre, salvo pacto en contrario.


Así pues, corresponderá a una empresa la titularidad de los derechos patrimoniales sobre un programa de ordenador, siempre y cuando dicho programa se haya creado por iniciativa y bajo las instrucciones de aquella, y se edite y divulgue bajo su nombre. En este caso el programa de ordenador se califica como una obra colectiva.


Una de las cuestiones que más dudas suscita en la práctica, es la relativa a la titularidad sobre el software creado por un trabajador asalariado.


El Art 97.4 LPI establece que “cuando un trabajador asalariado cree un programa de ordenador, en el ejercicio de las funciones que le han sido confiadas o siguiendo las instrucciones del empresario, la titularidad de los derechos de explotación correspondientes al programa de ordenador así creado, tanto el programa fuente como el programa objeto, corresponderá, exclusivamente al empresario, salvo pacto en contrario”.


Del artículo de referencia se desprende, que la facultad de explotación del programa de ordenador corresponde a la empresa, siempre y cuando:

  1. El programa de ordenador ha sido creado por el trabajador asalariado en el ámbito del ejercicio de sus funciones.
  2. El programa de ordenador ha sido creado por el trabajador asalariado en virtud de las instrucciones dadas por el empresario.
  3. Que concurriendo las condiciones anteriores, las partes (empresa y trabajador), no hayan pactado lo contrario en un contrato.

Así por ejemplo, un programador puede pactar con la empresa para la que presta sus servicios, que el software que cree o desarrolle será de su titularidad, pudiendo ceder a dicha empresa su explotación, si bien dicha cesión por regla general no será gratuita.


En ausencia de pacto o si nada se ha señalado al respecto, la titularidad sobre los derechos de explotación del programa de ordenador así creado, corresponde a la empresa.


Finalmente, cabe preguntarse ¿a quién corresponde la titularidad sobre los derechos de explotación de un programa de ordenador, creado por un trabajador asalariado, cuando dicha creación estaba fuera del ámbito de sus funciones (no era su tarea o cometido), y no se le dio instrucciones al respecto?


La STS de 21 de junio de 2007, atribuye en este caso la titularidad de los derechos al trabajador asalariado, por cuanto de la prueba practicada se revela, que el trabajador asalariado procedió a la invención del programa de ordenador por propia iniciativa, y no por ser esta su tarea o cometido, ni por encargo expreso o indicaciones concretas de la empresa.

Extraído el 29/01/2014 de: http://convelia.com/titularidad-de-los-derechos-de-software


1.  El derecho de autor y el software.

•Ha quedado ampliamente expresado que el derecho de autor es el primer llamado a proteger las creaciones de la informática expresadas bajo la categoría de software, programa de computador o soporte lógico.

•El Decreto 1360 de 1989 lo equiparó entonces a una creación literaria, aunque el software va más allá del código en sí mismo, su apariencia puede ser objeto de protección igualmente por el derecho de autor (por ejemplo los video juegos)

•En términos generales la definición de software comporta un elemento funcional acorde con el cual, un software debe ser un conjunto organizado de instrucciones que permiten interacción con una máquina que procesa información.

2. Transferencias y Licenciamiento

•Para efectuar alguna negociación en materia de derechos de autor sobre un software es imprescindible tener en cuenta qué es lo que se desea hacer 

•Transferir completamente la propiedad (cesión de derechos)

•Otorgar una licencia de uso.

3. Registro de Software

•¿Qué se requiere para el registro?

 •Requisitos

•Interés jurídico

•Capacidad

•Documentación

•Tiempo

•¿Qué se registra?

•Qué es lo que se entrega

•Cómo se entrega

•Cuánto cuesta y cuánto tiempo toma

Extraido el 29/01/2014 de: DIRECCIÓN NACIONAL DE DERECHOS DE AUTOR 
Ministerio del Interior y de Justicia de Colombia
http://www.propiedadintelectualcolombia.com/Site/LinkClick.aspx?fileticket=gbQDcDZdMsw%3D&tabid=99

 

Ingeniería Inversa



El objetivo de la ingeniería inversa es obtener información o un diseño a partir de un producto accesible al público, con el fin de determinar de qué está hecho, qué lo hace funcionar y cómo fue fabricado.

Hoy en día (principios del siglo XXI), los productos más comúnmente sometidos a ingeniería inversa son los programas de computadoras y los componentes electrónicos, pero, en realidad, cualquier producto puede ser objeto de un análisis de Ingeniería Inversa.

El método se denomina así porque avanza en dirección opuesta a las tareas habituales de ingeniería, que consisten en utilizar datos técnicos para elaborar un producto determinado. En general, si el producto u otro material que fue sometido a la ingeniería inversa fue obtenido en forma apropiada, entonces el proceso es legítimo y legal. De la misma forma, pueden fabricarse y distribuirse, legalmente, los productos genéricos creados a partir de la información obtenida de la ingeniería inversa, como es el caso de algunos proyectos de Software libre ampliamente conocidos.

El programa Samba es un claro ejemplo de ingeniería inversa, dado que permite a sistemas operativos UNIX compartir archivos con sistemas Microsoft Windows. El proyecto Samba tuvo que investigar información confidencial (no liberada al público en general por Microsoft) sobre los aspectos técnicos relacionados con el sistema de archivos Windows. Lo mismo realiza el proyecto WINE para el conjunto de API de Windows y OpenOffice.org con los formatos propios de Microsoft Office, o se hace para entender la estructura del sistema de archivos NTFS y así poder desarrollar drivers para la lectura-escritura sobre el mismo (principalmente para sistemas basados en GNU/Linux).

La ingeniería inversa es un método de resolución. Aplicar ingeniería inversa a algo supone profundizar en el estudio de su funcionamiento, hasta el punto de que podamos llegar a entender, modificar y mejorar dicho modo de funcionamiento.

Pero este término no sólo se aplica al software, sino que también se considera ingeniería inversa el estudio de todo tipo de elementos (por ejemplo, equipos electrónicos, microcontroladores, u objeto fabril de cualquier clase). Diríamos, más bien, que la ingeniería inversa antecede al nacimiento del software, tratándose de una posibilidad a disposición de las empresas para la producción de bienes mediante copiado desde el mismo surgimiento de la ingeniería.

En el caso concreto del software, se conoce por ingeniería inversa a la actividad que se ocupa de descubrir cómo funciona un programa, función o característica de cuyo código fuente no se dispone, hasta el punto de poder modificar ese código o generar código propio que cumpla las mismas funciones. La gran mayoría del software de pago incluye en su licencia una prohibición expresa de aplicar ingeniería inversa a su código, con el intento de evitar que se pueda modificar su código y que así los usuarios tengan que pagar si quieren usarlo.

La ingeniería inversa nace en el transcurso de la Segunda Guerra Mundial, cuando los ejércitos enemigos incautaban insumos de guerra como aviones u otra maquinaria de guerra para mejorar las suyas mediante un exhaustivo análisis.

La siguiente figura muestra los procesos que sigue la ingeniería directa, si seguimos ese camino hacia "atrás" (o de manera inversa), hacemos ingeniería inversa, si continuamos con el camino y planteamos cambios (o mejoras), por la derecha, ese camino nos lleva a una reingeniería, si no alteramos el contenido de los modelos obtenidos durante los procesos de la ingeniería inversa y seguimos el camino de la izquierda, eso se llama desarrollar una copia.

Extraído 29/01/2014 de: http://es.wikipedia.org/wiki/Ingenier%C3%ADa_inversa

Complidador



Un compilador es un programa informático que traduce un programa escrito en un lenguaje de programación a otro lenguaje de programación, generando un programa equivalente que la máquina será capaz de interpretar. Usualmente el segundo lenguaje es lenguaje de máquina, pero también puede ser un código intermedio (bytecode), o simplemente texto. Este proceso de traducción se conoce como compilación.

Un compilador es un programa que permite traducir el código fuente de un programa en lenguaje de alto nivel, a otro lenguaje de nivel inferior (típicamente lenguaje de máquina). De esta manera un programador puede diseñar un programa en un lenguaje mucho más cercano a cómo piensa un ser humano, para luego compilarlo a un programa más manejable por una computadora.


Como parte importante de este proceso de traducción, el compilador informa a su usuario de la presencia de errores en el programa fuente





Partes de un compilador


La construcción de un compilador involucra la división del proceso en una serie de fases que variará con su complejidad. Generalmente estas fases se agrupan en dos tareas: el análisis del programa fuente y la síntesis del programa objeto.

  • Análisis: Se trata de la comprobación de la corrección del programa fuente, e incluye las fases correspondientes al Análisis léxico (que consiste en la descomposición del programa fuente en componentes léxicos), Análisis sintáctico (agrupación de los componentes léxicos en frases gramaticales ) y Análisis semántico (comprobación de la validez semántica de las sentencias aceptadas en la fase de Análisis Sintáctico).
  • Síntesis: Su objetivo es la generación de la salida expresada en el lenguaje objeto y suele estar formado por una o varias combinaciones de fases de Generación de Código (normalmente se trata de código intermedio o de código objeto) y de Optimización de Código (en las que se busca obtener un código lo más eficiente posible).

Alternativamente, las fases descritas para las tareas de análisis y síntesis se pueden agrupar en Front-end y Back-end:

  • Front-end: es la parte que analiza el código fuente, comprueba su validez, genera el árbol de derivación y rellena los valores de la tabla de símbolos. Esta parte suele ser independiente de la plataforma o sistema para el cual se vaya a compilar, y está compuesta por las fases comprendidas entre el Análisis Léxico y la Generación de Código Intermedio.
  • Back-end: es la parte que genera el código máquina, específico de una plataforma, a partir de los resultados de la fase de análisis, realizada por el Front End.

Esta división permite que el mismo Back End se utilice para generar el código máquina de varios lenguajes de programación distintos y que el mismo Front End que sirve para analizar el código fuente de un lenguaje de programación concreto sirva para generar código máquina en varias plataformas distintas. Suele incluir la generación y optimización del código dependiente de la máquina.

El código que genera el Back End normalmente no se puede ejecutar directamente, sino que necesita ser enlazado por un programa enlazador (linker)


Extraido el 28/01/2014 de: http://es.wikipedia.org/wiki/Compilador