Editorial Universidad Manuela Beltrán · Gerencia de Multimedia. Daniela Suarez Porras Corrección...

114

Transcript of Editorial Universidad Manuela Beltrán · Gerencia de Multimedia. Daniela Suarez Porras Corrección...

Editorial Universidad Manuela Beltrán

Software Libre: Apoyo a las TIC

2018

Software Libre: Apoyo a las TIC

Autores

David Albeiro Andrade Yejas

José Daniel Rodríguez Munca

Carlos Augusto Sánchez Martelo

Henry Leonardo Avendaño Delgado

Manuel Antonio Sierra Rodríguez

Carlos Andrés Collazos Morales

Domingo Alirio Montaño Arias

Breed Yeet Alfonso Corredor

Ricardo Luciano Chaparro Aranguren

9

Edición

Editorial Universidad Manuela Beltrán

Autores

David Albeiro Andrade Yejas

Magister en software libre e

Ingeniero de sistemas.

Docente universitario y

educacion básica y media.

José Daniel Rodríguez Munca

Magister en Ciencias de la

Educación, Master en

Estrategias y Tecnologías para

el Desarrollo, Especialista en

docencia mediada por las TIC

e Ingeniero Electrónico.

Carlos Augusto Sanchez

Martelo

Dr. (c) en Pensamiento

Complejo, Maestría en Diseño,

Gestión y Dirección de

Proyectos, Ingeniero de

sistemas, Certificado

Internacionalmente en ITIL Foundation v3,

Procesos en Desarrollo de Software y TIC

Henry Leonardo Avendaño

Delgado

Dr. (c) en Educación línea de

investigación Tecnologías de

la Información y

Comunicación para la

inclusión, Magister en

Educación, Especialista en Gerencia de

Telecomunicaciones, Ingeniero Electrónico.

Manuel Antonio Sierra

Rodríguez

Dr. (c) en Proyectos en la línea

de investigación en Tecnologías

de la Información y

Comunicación, Magíster en

Software Libre, Especialista en

Seguridad en Redes, Ingeniero

de Sistemas, Consultor en Seguridad de la

Información y Comunicaciones.

Carlos Andres Collazos

Morales

Postdoctorado en Ciencia y

Tecnología Avanzada, Dr. en

Ciencias, Magister en Ingeniería

Electrónica y Computadores,

Físico.

Domingo Alirio Montaño Arias

Dr. En Genética, Magister en

Biología, Biólogo, Investigador

Asociado, Universidad Manuela

Beltrán, BSc, MSc, PhD

Intereses de investigación en

Neurociencias, Genética y TIC

Aplicadas a la Educación.

Miembro comité editorial revista Journal of Science

Educations. Miembro fundador de la Sociedad

Iberoamericana de Biología Evolutiva.

Breed Yeet Alfonso Corredor

Dr. (c) en Proyectos, Magister

en Educación, Especialista en

Desarrollo e Implementación de

Herramientas Telemáticas,

Ingeniera Electrónica, Directora

Académica y Calidad,

Consultora Nacional e Internacional Académica de

Educación Superior.

Ricardo Luciano Chaparro

Aranguren

Docente investigador en temas

relacionados con metodología de

investigación. Mg. Informática

Educativa. Especialista en

Gerencia de Multimedia.

Daniela Suarez Porras

Corrección de estilo (Editor secundario)

Diagramación: Cesar Augusto Ricaurte

Diseño de portada: Cesar Augusto Ricaurte

Publicado en Diciembre de 2018

Formato digital PDF (Portable Document Format)

Editorial Universidad Manuela Beltrán

Avenida Circunvalar Nº 60-00

Bogotá – Colombia

Tel. (57-1) 5460600

11

David Albeiro Andrade Yejas, José Daniel Rodríguez Munca,

Carlos Augusto Sánchez Martelo, Henry Leonardo Avendaño

Delgado, Manuel Antonio Sierra Rodríguez, Carlos Andrés Collazos

Morales, Domingo Alirio Montaño Arias, Breed Yeet Alfonso

Corredor, Ricardo Luciano Chaparro Aranguren

Software Libre: Apoyo a las TIC,

Bogotá, UMB

© David Albeiro Andrade Yejas, José Daniel Rodríguez Munca,

Aranguren, Carlos Augusto Sánchez Martelo, Henry Leonardo

Avendaño Delgado, Manuel Antonio Sierra Rodríguez, Carlos

Andrés Collazos Morales, Domingo Alirio Montaño Arias, Breed

Yeet Alfonso Corredor, Ricardo Luciano Chaparro Aranguren

© Universidad Manuela Beltrán

Bogotá, Colombia

http:// www.umb.edu.co

Queda prohibida la reproducción total o parcial de este libro por

cualquier proceso gráfico o fónico, particularmente por fotocopia,

Ley 23 de 1982

Software Libre: Apoyo a las TIC. / David Albeiro Andrade Yejas… (y otros 8) -

Bogotá: Universidad Manuela Beltrán, 2018.

114 p.: ilustraciones, gráficas, tablas; [versión electrónica]

Incluye bibliografía

ISBN: 978-958-5467-29-3

1. Software libre 2. Software de código abierto 3. Desarrollo de software. i.

Andrade Yejas, David Albeiro. ii. Rodríguez Munca, José Daniel. iii. Sánchez

Martelo, Carlos Augusto. iv. Avendaño Delgado, Henry Leonardo v. Sierra

Rodríguez, Manuel Antonio vi. Collazos Morales, Carlos Andrés vii. Montaño Arias,

Domingo Alirio. viii. Alfonso Corredor, Breed Yeet. ix. Chaparro Aranguren, Ricardo

Luciano.

005.3 cd 23 ed.

CO-BoFUM

Catalogación en la Publicación – Universidad Manuela Beltrán

Autoridades Administrativas

Gerente

Juan Carlos Beltrán Gómez

Secretario General

Juan Carlos Tafur Herrera

Autoridades Académicas

Rectora

Alejandra Acosta Henríquez

Vicerrectoría de Investigaciones

Fredy Alberto Sanz Ramírez

Vicerrectoría Académica

Claudia Milena Combita López

Vicerrectoría de Calidad

Hugo Malaver Guzman

ISBN: 978-958-5467-29-3

13

TABLA DE CONTENIDO

Software Libre: Apoyo a las TIC

Contenido PRÓLOGO ...................................................................................................................................... 15

INTRODUCCIÓN ............................................................................................................................ 17

Capítulo 1: Fundamentos del software libre ......................................................................... 21

Introducción ............................................................................................................................... 21

1. Fundamentos del Software Libre .................................................................................... 22

1.1. Historia del Software Libre ............................................................................................ 22

1.2. Libertades del Software Libre ....................................................................................... 25

1.3. Software libre o Software de Código abierto ............................................................ 28

1.4. Ejemplos ............................................................................................................................. 31

2. Aspectos legales .................................................................................................................. 32

2.1. Aspectos legales y Licencias ........................................................................................ 32

2.2. Propiedad Intelectual ....................................................................................................... 33

2.3. Tipos de Licenciamiento ................................................................................................ 36

2.4. Ejemplos ............................................................................................................................. 39

2.5. Ejercicios de reflexión ..................................................................................................... 40

3. Sistemas operativos ........................................................................................................... 41

3.1. Ubuntu ................................................................................................................................. 43

3.2. Ejemplos ............................................................................................................................. 51

3.3. Ejercicios de reflexión ..................................................................................................... 52

3.4. Casos de estudio .............................................................................................................. 52

Capítulo 2: Aplicaciones en software libre ............................................................................ 57

Introducción ............................................................................................................................... 57

4. Entornos de desarrollo ....................................................................................................... 58

4.1. Eclipse ................................................................................................................................. 61

4.2. NetBeans ............................................................................................................................. 63

4.3. Lenguajes de Desarrollo ................................................................................................. 66

4.3.1. Java .............................................................................................................................................. 67

4.3.2. C++ ............................................................................................................................................... 68

4.4. Ejemplos ............................................................................................................................. 70

14

5. Desarrollo para móviles ..................................................................................................... 71

5.1. HTML Dinámico ................................................................................................................. 71

5.2. Framework .......................................................................................................................... 74

5.2.1. PhoneGhap................................................................................................................................. 75

5.2.1. Intel XDK ..................................................................................................................................... 76

5.3. Ejemplos ............................................................................................................................. 77

6. Alternativas al software privativo .................................................................................... 79

6.1. Sistemas operativos libres ............................................................................................ 82

6.2. Ejemplos ............................................................................................................................. 83

Capítulo 3: Implantación de software libre ............................................................................ 87

Introducción ............................................................................................................................... 87

6. Desarrollo en software libre .............................................................................................. 88

6.1. Entorno de Programación GNU/C ................................................................................ 88

6.2. Construcción de Software en GNU/C .......................................................................... 90

6.3. Comunidades Linux ......................................................................................................... 92

6.4. Ejemplos ............................................................................................................................. 94

7. Gestión de proyectos en software libre ......................................................................... 95

7.1. Forjas o Repositorios ...................................................................................................... 95

7.2. Control de versiones ....................................................................................................... 97

7.3. Ejemplos ............................................................................................................................. 99

8. Documentación .................................................................................................................. 101

8.1. Ejemplos ........................................................................................................................... 103

8.2. Ejercicios de reflexión ................................................................................................... 104

Conclusiones ............................................................................................................................... 107

Glosario......................................................................................................................................... 109

Bibliografía ................................................................................................................................... 111

15

PRÓLOGO

¿Qué es el software libre? ¿Qué es y qué implicaciones tiene la licencia de un

programa libre? ¿Cómo se está desarrollando el software libre? ¿Qué motiva a los

desarrolladores, especialmente a los que son voluntarios, a involucrarse en

proyectos de software libre? ¿Cómo son estos desarrolladores? ¿Cómo se

coordinan en sus proyectos, y cómo es el software que producen?

En resumen, ¿cuál es la panorámica general del software libre? Éste es el tipo

de preguntas que se trata de responder en este curso. Porque, aunque el software

libre está cada vez más en los medios de comunicación, en las conversaciones de

los profesionales de la informática, e incluso empieza a estar en boca de los

ciudadanos en general, aún es un desconocido para muchos.

Además, muchas veces los que lo conocen lo hacen sólo de algunos de sus

aspectos, desconociendo completamente otros. Para empezar, en este capítulo

vamos a presentar los aspectos específicos del software libre, centrándonos

fundamentalmente en explicar sus bases para los que se aproximen al tema por

primera vez, y en motivar su importancia.

Entre estas bases se hace énfasis en la definición del término (para saber de qué

se va a hablar) y en las consecuencias principales del uso (y la mera existencia) del

software libre.

David Albeiro Andrade Yejas

16

17

INTRODUCCIÓN

El conocimiento profundo de un lenguaje de programación parte no sólo del

entendimiento de su léxico, de su sintaxis y de su semántica, sino que además

requiere la comprensión de los objetivos que motivaron su desarrollo. Así pues, en

este texto se busca introducir a los lectores en el mundo de la programación

utilizando herramientas de desarrollo libres.

A fuerza que, en el mundo actual, los nuevos cambios paradigmáticos derivados

de la revolución de la web, internet de las cosas, cloud computing, realidad virtual,

realidad aumentada y otros términos novedosos obligan a programar para nuevos

entornos. Por consiguiente, se debe aprender a distinguir, estudiar, modificar, crear

y redistribuir paquetes informáticos de carácter libre.

En este sentido, se describirá un entorno de desarrollo de software de libre

acceso disponible tanto en plataformas Microsoft como GNU/Linux. Dado que las

primeras requieren de un sistema operativo que no se basa en el software libre, la

explicación se centrará en las segundas.

18

19

Capítulo I

Fun

dam

ento

s d

el s

oft

war

e li

bre

Fundamentos del software libre

Aspectos legales

Sistemas operativos

Fundamentos del software libre

20

21

CAPÍTULO 1: FUNDAMENTOS DEL SOFTWARE

LIBRE

Introducción

En el presente capítulo se abordan los aspectos fundamentales sobre el software

libre. Lo primero que se trae a colación es la historia sobre el software libre y sus

principales características, especialmente lo que tiene que ver con las libertades.

De manera especial, los criterios de la Free Software Foundation (FSF) y se hace

un paralelo con la Open Source Initiative (OSI), promotora del software de código

abierto.

Posteriormente, se hace una explicación sobre los conceptos legales del uso del

software, la propiedad intelectual y los derechos que protege al autor.

Seguidamente, lo concerniente a las licencias, sus características tanto para la FSF

como para la OSI.

Por último, lo relacionado a los sistemas operativos GNU/Linux. Para tal fin, se

enfatiza en la distro Ubuntu; por ser una de las más populares, además de fácil y

termina con una lista de los principales comandos usados en Linux.

22

1. Fundamentos del Software Libre

1.1. Historia del Software Libre

Con respecto a la temática, González, Seoane & Robles (2003) consideran que

“aunque todas las historias relacionadas con la informática son forzosamente

breves, la historia del software libre es una de las más extensas entre ellas. De

hecho, podría decirse que el software nació libre y permaneció así durante su

infancia. Sin embargo, con la llegada de la juventud, la situación cambió

completamente”. Consideran los mismos autores que sólo ahora, al llegar a su

madurez, está en vías de recuperar la libertad.

Lo anterior, no deja de ser curioso, pues para gran parte de los profesionales

informáticos, el software propietario es el software en su estado natural.

Afortunadamente, la situación es más bien la contraria, y las semillas del cambio

que se empieza a dejar ver en los últimos años fueron ya plantadas a principios de

la década de 1980.

Figura 1. Principales hitos del Software Libre Fuente: Autores.

Años 1960

El software era un

accesorio

1970

El software empieza a

venderse por separado

Años 80

Nace el movimiento de software libre

1990

Nace GNU/ Linux

2000

Revolución de la web

23

En primer lugar, se tiene que en los años 1960 el mundo de la informática estaba

bajo el dominio de los grandes ordenadores, instalados principalmente en grandes

en empresas y centros gubernamentales. Para esa época, IBM era el principal

fabricante, a gran distancia de sus inmediatos competidores. En esos tiempos

cuando se adquiría un computador, el software venía como un acompañante. Con

el pago del contrato de mantenimiento, se podía acceder al catálogo del software

que ofrecía el fabricante. Así mismo, no era común que los programas fueran un

producto separado del hardware, desde el punto de vista comercial.

Recogiendo lo más importante, se puede afirmar que durante los primeros años

de la informática el software como tal era libre. A saber, los que tenían acceso a él

podían disponer habitualmente del código fuente, podían usarlo, modificarlo,

compartirlo y compartir sus modificaciones.

Más adelante, en junio de 1969, IBM anunció que para 1970 iba a empezar a

vender su software por separado. Como tal, los clientes ya no podían obtener

incluido en el precio del hardware el software relacionado con los programas. El

software empezó a concebir como algo con valor intrínseco y, en consecuencia, se

hizo cada vez más común restringir el acceso a los programas; y se limitaron en

todo lo posible, tanto en lo legal como en lo técnico las posibilidades de compartir,

modificar o estudiar el software. En pocas palabras, se pasó a lo que hoy se le

conoce como software privativo. Por esta razón, a mediados de la década de los

70´s era común encontrarse en el mundo de la programación con el software

privativo, lo que significó un cambio de paradigma.

Por otra parte, hasta los primeros años de los 80´s cuando la tendencia era

desarrollar software propietario, se presentan iniciativas de producir software libre,

según se define hoy día. Entre ellas, se destacan Spice y TeX, además del caso

complejo de Unix, cuna de los grandes sistemas operativos. Este fue uno de los

primeros sistemas operativos portables, creado originalmente por Thompson y

Ritchie (entre otros) en los Bell Labs de AT&T. Desde su desarrollo hasta hoy, se

encuentran innumerables variantes comercializadas por decenas de empresas.

24

Al mismo tiempo, a comienzos de 1984, nace el movimiento de software libre.

Richard Stallman, para esa época empleado en el AI Lab del MIT, dejó su trabajo

para comenzar el proyecto GNU. Stallman era considerado un hacker que gozaba

compartiendo sus inquietudes tecnológicas y su código. No le agradaba firmar

acuerdos de exclusividad y no compartición, esto lo estaba convirtiendo en un

extraño en su propio mundo, a fuerza que el software propietario lo dejaba impotente

antes situaciones que antes podía resolverse fácilmente.

Así mismo, la idea de Stallman de abandonar el MIT era con la finalidad de

construir un sistema operativo de propósito general, pero totalmente libre. El sistema

se llamó GNU (acrónimo recursivo, GNU's Not Unix). Aunque desde el principio el

proyecto GNU incluyó en su sistema software ya disponible, tales como Tex y el

sistema X Windows. Luego, comenzó por crear un compilador de C (GCC) y un

editor (Emacs), ambos aún en uso y muy populares hoy día. Desde el principio del

proyecto GNU, Stallman se encontraba preocupado por las libertades que tendrían

los usuarios del software. Para ello, escribió la licencia GPL, probablemente la

primera licencia de software diseñada específicamente para garantizar que un

programa fuera libre en este sentido.

Más adelante, al principio de la década de los 1990, el proyecto GNU se

encontraba cerca de tener un sistema completo similar a Unix. Sin embargo, todavía

no habían desarrollado el kernel del sistema. No obstante, el software de GNU era

muy popular entre los usuarios de las distintas variantes de Unix, por aquella época

el sistema operativo más usado en las empresas. Al mismo tiempo el estudiante

finlandés Linus Torvalds liberaba el núcleo de lo que más tarde sería Linux.

De esta manera, a pesar de que "Linux" se denomina en la jerga cotidiana al

sistema operativo, este es en realidad solo el Kernel (núcleo) del sistema. La

verdadera denominación del sistema operativo es "GNU/Linux" debido a que el resto

25

del sistema (la parte fundamental de la interacción entre el hardware y el usuario)

se maneja con las herramientas del proyecto GNU.

Al respecto conviene resaltar que Internet desde su nacimiento, a principios de

la década de 1970, contó con relación al software libre. Por un lado, desde sus

inicios, la comunidad de desarrolladores que la crearon, tenían claros propósitos

que luego se harían clásicos en la comunidad del software libre. Tal es el caso, la

importancia de permitir a los usuarios que ayudaran a depurar los errores, o la

posibilidad de compartir el código de las implementaciones.

Por último, desde el año 1998 con el auge de la web 2.0, se produce una gran

revolución de la cual el software libre ha sido artífice, permitiendo que muchos

usuarios de Internet cuenten con fácil acceso a tecnologías que de otro modo serían

prohibitivas por su precio. En otras palabras, lenguajes o plataformas como java,

javascript, php, mysql o proyectos como Mozilla, Ubuntu, GIMP, LibreOffice, entre

otros, están asociados a esta corriente.

Para finalizar, se tiene el caso de Android un sistema operativo basado en el

núcleo Linux, diseñado principalmente para dispositivos móviles con pantalla táctil,

como teléfonos inteligentes, tablets o tabléfonos; y también para relojes inteligentes,

televisores y automóviles.

1.2. Libertades del Software Libre

En relación con el tema, desde hace más de 40 años la industria del software

acostumbró que quien vende un programa impone las condiciones bajo las que

puedo usarlo. A pesar de ser software, no se puede adaptar a necesidades

particulares, ni siquiera corregir errores, debiendo esperar a que el fabricante corrija

los errores. Esto no tiene por qué ser así, y es ahí, donde precisamente el software

libre concede las libertades que el software propietario niega.

26

Por estas razones, la Free Software Foundation (FSF) considera que un

programa es software libre si los usuarios tienen las cuatro libertades esenciales:

Libertad 0: Ejecutar el programa como se desea, con cualquier propósito.

Libertad 1: Estudiar cómo funciona el programa, y cambiarlo para que haga lo

que el usuario desee. El acceso al código fuente es una condición necesaria

para ello.

Libertad 2: Redistribuir copias para ayudar al prójimo.

Libertad 3: Distribuir copias de sus versiones modificadas a terceros. Esto

permite ofrecer a toda la comunidad la oportunidad de beneficiarse de las

modificaciones. El acceso al código fuente es una condición necesaria para ello.

Vale la pena aclarar, que “Software Libre” no significa que “no es comercial”, aquí

la ambigüedad del término “free” que en inglés significa “libre”, más no gratuito. Por

lo tanto, un programa libre debe estar disponible para el uso comercial, la

programación y la distribución. Puede haber pagado dinero para obtener copias de

software libre, o puede haber obtenido copias sin costo. Pero sin tener en cuenta

cómo obtuvo sus copias, siempre tiene la libertad de copiar y modificar el software,

incluso de vender copias.

Las libertades se pueden garantizar de acuerdo con la legalidad vigente por

medio de una licencia. En ella se estipulan las condiciones que el licenciante impone

al usuario final, como dar crédito a los autores originales si se redistribuye. Incluso

puede obligar a que los programas ajenos mejorados también sean libres,

promoviendo así la creación de más software libre.

Así mismo, existe otra iniciativa como la FSF; se trata de la Open Source Iniciative

(OSI), esta considera como software de código abierto aquel que reúne una serie

de criterios para ser considerado como tal. Dichos requisitos son:

27

Libre redistribución: El software debe poder ser regalado o distribuido

libremente.

Código fuente: El código fuente debe estar incluido u obtenerse libremente.

Trabajos derivados: La redistribución de modificaciones debe estar permitida.

Integridad del código fuente del autor: Las licencias pueden requerir que las

modificaciones sean redistribuidas sólo como parches.

Sin discriminación de personas o grupos.

Distribución de la licencia: Deben aplicarse los mismos derechos a todo el que

reciba el programa.

La licencia no debe ser específica de un producto: El programa no puede

licenciarse sólo como parte de una distribución mayor.

La licencia no debe restringir otro software: La licencia no puede obligar a

que algún otro software que sea distribuido con el software abierto deba también

ser de código abierto.

La licencia debe ser tecnológicamente neutral: No debe requerirse la

aceptación de la licencia por medio de un acceso por clic de ratón o de otra forma

específica del medio de soporte del software.

Tabla 1. Condiciones del software

Software Libre Código Abierto

Libertad de ejecución Libre redistribución

Libertad de estudiar Código libre

Libertad de redistribuir Trabajos derivados

Libertad de modificar Integridad del código

No discriminación

Licencia no especifica

Licencia no restrictiva

Licencia neutral

Fuente: Autores.

De este modo, cada una de las iniciativas defensoras de la libertad del software

exige el cumplimiento de una serie de requisitos; como tal, existe un debate

28

planteado en la comunidad de intelectuales. Sin embargo, las diferencias son de

mayor contenido filosófico que técnico.

Por consiguiente, se puede considerar como equivalente a software libre el

término Open Source Software (programas de fuentes abiertas), este promovido por

Eric Raymond y la Open Source Initiative. Desde el punto de vista filosófico, el

término es muy distinto, ya que este hace énfasis en la disponibilidad de código

fuente, no en la libertad, pero analizando su definición es prácticamente la misma

que la de Debian. Este tiene la ventaja que su nombre es políticamente más

aséptico y resalta un aspecto técnico que puede dar lugar a ventajas, como mejores

modelos de desarrollo y negocio, mayor seguridad, entre otros. Ha encontrado

mucho más eco en la literatura comercial y en las estrategias de las empresas que

de una manera u otra apoyan el modelo.

Por otra parte, existen otra cantidad de términos relacionados con las libertades

al usuario:

Freeware

Shareware

Careware

Dominio Público

Copyleft

Propietario, cerrado

1.3. Software libre o Software de Código abierto

Se presenta el debate sobre el movimiento por el software libre y el movimiento

por el código abierto donde se asemejan a dos frentes políticos entre la comunidad

de software libre. Por un lado, los grupos radicales de los años 60 desarrollaron una

reputación para el faccionalismo: las organizaciones se separaban por los

desacuerdos sobre los detalles de la estrategia, y luego se trataban como enemigas.

O al menos tal es la imagen que se tiene de ellas, sea o no cierta.

29

Sin embargo, la relación entre el movimiento por el software libre y el movimiento

por el código abierto es lo contrario, no se está de acuerdo en los principios básicos,

pero sí em algunas recomendaciones prácticas. Por ende, se puede trabajar juntos

en muchos proyectos específicos. No es considerado el movimiento por el código

abierto un enemigo. El enemigo es el software privativo.

La idea central es que el movimiento de software libre no está en contra del de

código abierto, pero no se quieren mezclar. Se sabe que han contribuido con la

comunidad, pero esa comunidad de desarrolladores ya estaba creada, y eso lo debe

saber la gente. Por otro lado, se quiere que las personas asocien los logros, valores

y la filosofía del software libre, no con la del código abierto. La comunidad de la FSF,

persigue ser escuchados, más no oscurecidos detrás de un grupo con visiones

distintas. Para prevenir que las personas piensen que son parte de ellos, se

esfuerzan en evitar usar la palabra “abierto” para describir al software libre, o su

contrario, “cerrado”, para hablar sobre el software que no es libre.

A diferencia de “código abierto”, el término “software libre” tiene un problema de

ambigüedad, literalmente significa: software que se puede obtener por costo cero;

y por otro lado un significado deseado: software que le da al usuario ciertas

libertades. Para aclarar esto la FSF ha direccionado este problema publicando una

definición más precisa de software libre, pero ésta no es una solución perfecta, no

puede eliminar el problema completamente. Un término correcto que no fuese

ambiguo sería mejor, si no tuviese otros problemas.

Hay que tener en cuenta que, todas las alternativas en inglés para “software libre”

tienen contradicciones en sí mismas. Por tal motivo, se han buscado varias

alternativas que se han sugerido, pero ninguna es lo suficientemente correcta como

para que cambiar resulte una buena idea. Todo reemplazo propuesto para software

libre tiene algún problema de tipo semántico de la misma clase, o peores y esto

incluye software de código abierto.

30

Figura 2. El debate Fuente: Autores.

Por su parte, la definición oficial de “software de código abierto”, tal como fue

publicada por la Open Source Initiative, es muy parecida a la definición de software

libre dada por la FSF. Sin embargo, es considerada un poco más pobre respecto a

algunas cosas, y han aceptado unas pocas licencias que la otra parte considera

como inaceptablemente restrictivas para los usuarios. Sin embargo, el significado

obvio para la expresión “software de código abierto” es “puede observar el código

fuente”. Este es un criterio mucho más débil que el de software libre.

Como se ha dicho, el significado obvio para “código abierto” no es el significado

que sus partidarios pretenden. El problema es el malentendido de la mayoría de las

personas. De manera seguida está cómo lo definió el escritor Neal Stephenson:

Linux es software de “código abierto”, significa simplemente, que cualquiera puede

obtener copias de los archivos de su código fuente, según Free Software Foundation

(2017).

En particular, el estado de Kansas publicó una definición basado en Free

Software Foundation (2017)

Use el software de código abierto (OSS, por sus siglas en inglés). OSS es software

para el cual el código fuente está libre y públicamente disponible, a pesar que los

acuerdos de licencia específicos varían en lo que uno puede hacer con ese código.

31

Recogiendo lo más importante se tiene que para la FSF, la explicación de

software libre es simple, una persona que ha captado la idea de “libre expresión, no

barra libre” no se confundirá otra vez. No existe una forma concisa para explicar el

significado oficial de código abierto; y mostrar claramente por qué la definición

natural es la incorrecta. En síntesis, el debate continuó con más profundidad

filosófica que de carácter técnico o legal.

1.4. Ejemplos

El servidor HTTP Apache es un servidor web HTTP de código abierto, para

plataformas Unix (BSD, GNU/Linux,entre otras), Microsoft Windows, Macintosh y

otras, que implementa el protocolo HTTP/1.12 y la noción de sitio virtual. Cuando

comenzó su desarrollo en 1995 se basó inicialmente en código del popular NCSA

HTTPd 1.3, pero más tarde fue reescrito por completo. Su nombre se debe a que

alguien quería que tuviese la connotación de algo que es firme y enérgico, pero no

agresivo, y la tribu Apache fue la última en rendirse al que pronto se convertiría en

gobierno de EEUU, y en esos momentos la preocupación de su grupo era que

llegasen las empresas y "civilizasen" el paisaje que habían creado los primeros

ingenieros de internet. Además, Apache consistía solamente en un conjunto de

parches a aplicar al servidor de NCSA. En inglés, a patchy server (un servidor

"parcheado") suena igual que Apache Server.

GNU/Linux, es el término empleado para referirse a la combinación del sistema

operativo GNU, desarrollado por la FSF y el núcleo (kernel) Linux, desarrollado por

Linus Torvalds y la Linux Foundation. Su desarrollo es uno de los ejemplos más

prominentes de software libre; todo su código fuente puede ser utilizado, modificado

y redistribuido libremente por cualquiera bajo los términos de la GPL (Licencia

Pública General de GNU) y otra serie de licencias libres.

32

2. Aspectos legales

En este apartado se tratan los aspectos legales sobre el software, especialmente

lo referente a la propiedad intelectual y como a lo largo de las épocas se le ha dado

base legal a través de las licencias. Además, las cláusulas que deben tener las

licencias para que sean consideradas como software libre.

2.1. Aspectos legales y Licencias

Los aspectos legales y las licencias de software libre permiten garantizar la

ejecución de las libertades de ejecutar, usar, estudiar, adaptar, distribuir copiar,

modificar y liberar las modificaciones del software a los usuarios finales. Para

cumplir esto, Richard Stallman crea la Free Software Foundation (FSF), según la

cual no es suficiente con cumplir las 4 libertades básicas, sino que las distribuciones

posteriores del programa continúen con las mismas libertades. Así mismo, esta

fundación determina que el único software realmente libre es aquel que se distribuye

con una licencia GPL (con copyleft).

Lo que realmente diferencia el software libre de la FSF es establecer el término

de copyleft, debido que existe software libre que se distribuye con otras licencias,

denominándolo código abierto (open source). Para la Open Source Initiative, el

denominado código abierto ofrece una panorámica más pragmática sobre el

software libre y está orientado al mundo empresarial. Además, se le dio este nombre

para diferenciarlo del software libre de la FSF que está asociado con el copyleft.

Por lo tanto, este tiene la característica de respetar las cuatro libertades del

software libre, pero no poseer la fuerza restrictiva del copyleft. En conclusión, debe

quedar claro que lo fundamental en estas licencias es la distribución del código

fuente del programa y que a excepción de la condición de copyleft el disentimiento

entre ambas no son legales sino filosóficas.

33

En particular, “copyleft” es una potestad al ejercer el derecho de autor que se

basa en permitir la libre distribución de copias y las versiones modificadas de un

programa u otro tipo de trabajo. No obstante, exigiendo que los mismos derechos

sean preservados en las versiones modificadas. Esta cláusula particular determina

la imposibilidad legal de capturar el software libre, modificarlo y privatizarlo. Es un

término establecido por la Free Software Foundation (FSF).

En lo que respecta al termino “dominio público”, es todo software sin copyright,

es decir, el modo más simple de hacer un programa libre. De esta manera, los

usuarios pueden compartir el programa y sus mejoras, si así lo desean. Además,

permite a los usuarios negados a cooperar, convertir el programa en software

privativo. Esto significa, que pueden realizar cambios y redistribuir como un software

privativo. Vale aclarar, los usuarios que reciban el programa en su forma modificada

no poseen las libertades que el autor original les dio debido a que el intermediario

se la ha quitado.

A continuación, el concepto de “incompatibilidad de licencias”, como su nombre

lo indica se da cuando dos software diferentes poseen requisitos contradictorios,

impidiendo la combinación de partes de los mismos para crear uno nuevo. Tanta

proliferación de licencias algunas veces resulta un problema ya que conlleva a

agravar la incompatibilidad y volver embrollado el proceso de licenciamiento del

Software Libre, así como incrementar el número de textos legales que deberían leer

los desarrolladores y distribuidores de Software Libre.

2.2. Propiedad Intelectual

En relación con el tema, es importante hacer la siguiente pregunta: ¿Qué es

propiedad intelectual? En cierta medida, el lector conoce el significado de este

interrogante. Así pues, se sabe que el inventor de una máquina, autor de una

canción, pintor de un cuadro o el escritor de una novela en cierto modo “posee” su

obra. Esto acarrea consecuencias y probablemente se debe ser consciente que no

34

se puede copiar o comprar un ejemplar de esas obras sin tener en cuenta los

derechos implícitos en ellas. Del mismo modo, los diseños industriales originales de

un mueble, de una tapicería o cualquier otra cosa semejante parecen ser

naturalmente propiedad de alguien o de alguna organización.

No obstante, cada vez que se compran esos bienes protegidos, parte de lo que

pagado retorna al propietario como recompensa por el tiempo, el dinero, el esfuerzo

y las ideas que invirtió en la creación de la obra. Con el transcurrir de los tiempos,

esto ha dado lugar al auge de industrias, como la música, la literatura, y otros más

como el desarrollo de software.

En primer lugar, es importante empezar con una definición formal de la propiedad

intelectual, de manera que se construya una base sólida para las explicaciones

ulteriores de los distintos tipos de propiedad intelectual y luego presentar los

tratados internacionales pertinentes. La mejor manera de empezar es examinando

el significado de la palabra propiedad, de acuerdo como lo señala la organización

Mundial de Propiedad Intelectual OMPI (2017).

En particular, las principales características de la mayoría de los tipos de

propiedad, son que el titular de la propiedad tiene libertad para utilizarla como

desea, siempre que dicho uso no infrinja la ley, y para impedir a terceros que utilicen

así ese objeto de su propiedad. Según la OMPI (2017), la expresión “propiedad

intelectual” se reserva a los tipos de propiedad que son el resultado de creaciones

de la mente humana, del intelecto.

Es interesante observar que en el Convenio que establece la Organización

Mundial de la Propiedad Intelectual o la “OMPI”, la expresión propiedad intelectual

no tiene una definición más formal. Los Estados que elaboraron el Convenio

decidieron establecer una lista de los derechos.

En este caso, los derechos son sobre:

35

Las obras literarias, artísticas y científicas; las interpretaciones de los artistas

intérpretes y las ejecuciones de los artistas ejecutantes, los fonogramas y las

emisiones de radiodifusión; las invenciones en todos los campos de la actividad

humana; los descubrimientos científicos; los dibujos y modelos industriales; las

marcas de fábrica, de comercio y de servicio, así como los nombres y

denominaciones comerciales; la protección contra la competencia desleal; y “todos

los demás derechos relativos a la actividad intelectual en los terrenos industrial,

científico, literario y artístico. (Convenio que establece la Organización Mundial de

la Propiedad Intelectual, firmado en Estocolmo, el 14 de julio de 1967; Artículo 2,

punto viii).

Otro punto corresponde con las expresiones derechos de autor y copyright que

se utilizan frecuentemente como traducciones de un mismo concepto, pero es

necesario tener en cuenta que esta doble denominación responde a dos

concepciones diferentes del derecho que conviven en el mundo actual.

En resumen, se puede decir que el sistema de derechos de autor es más

personalista y protege la creación como extensión de la persona del autor. En

cambio, el sistema de copyright es más colectivista y protege la creación para

estimular a los autores (a crear más), como beneficio de interés general, según Bain,

Gallego, Martinez & Rius (2012).

Actualmente se da una significativa coincidencia de regulación entre ambas

filosofías jurídicas, gracias en buena parte a la internacionalización de la propiedad

intelectual y a la función armonizadora de los tratados internacionales sobre la

materia. No obstante, aún existen diferencias relevantes, como, por ejemplo, los

derechos morales del autor.

Con respecto a los programas de computador, en primera instancia se defendió

que estos debían ser protegidos por las figuras jurídicas de las patentes. Sin

embargo, a finales de los 60 y comienzos de los 70 distintas legislaciones

empezaron a rechazar este tipo de protección. Por otro lado, se planteó la

36

posibilidad de proteger el software mediante la figura de los derechos de autor y

copyright (el programa de ordenador como obra literaria), y ésta fue la opción que

triunfó.

Se llegó a un principio generalmente aceptado según el cual los programas

informáticos estarían protegidos por el derecho de autor, mientras que el hardware

que usa programas informáticos u otros inventos relacionados con estos programas

estarían protegidos por patentes.

2.3. Tipos de Licenciamiento

Tanto para la FSF como la OSI condicionan su filosofía y productos con una

estrategia por medio de un instrumento de trabajo que es de naturaleza legal: la

licencia de software libre, según Bain, Gallego, Martínez & Rius (2012). La FSF, por

la publicación de las licencias GPL y LGPL, y ahora la licencia Affero GPL (AGPL,

específicamente diseñada para software distribuido como servicio –SaaS– o la

prestación de servicios remotos de tipo ASP).

Por su parte la OSI, por la catalogación y la clasificación de las diferentes

licencias libres de mayor o menor uso por parte de la comunidad, publicadas en su

sitio web: www.opensource.org. Dentro de estas, las más populares son Apache

License 2.0, BSD 3-Clause "New" or "Revised" license, BSD 2-Clause "Simplified"

or "FreeBSD" license, GNU General Public License (GPL), GNU Library or "Lesser"

General Public License (LGPL), MIT license, Mozilla Public License 2.0, Common

Development and Distribution License y la Eclipse Public License.

Por lo tanto, surge el interrogante ¿por qué la importancia de la licencia?, esto

porque la licencia es el único elemento que realmente distingue un software libre de

un software propietario o "privativo".

En este aspecto, la legislación sobre los derechos de autor concede en exclusiva

al titular del software el derecho a realizar o autorizar a terceros la reproducción

37

(instalar y ejecutar), la copia, la modificación y distribución del software. Por tanto,

para que un usuario pueda beneficiarse de las libertades del software, necesita el

permiso explícito del titular de estos derechos: de lo contrario, se entendería que

utiliza el software de forma ilegítima.

En resumen, la licencia "de uso" de software es, entonces, el instrumento legal

que autoriza a los usuarios del software a realizar estos actos reservados por ley: el

instrumento que "libera" al usuario de la posición por defecto que es la prohibición

de explotación del software. Por otro lado, la licencia permite al autor reservarse los

derechos que no se ceden e imponer y otorgar al usuario otras obligaciones y

derechos no necesariamente vinculados con el derecho de autor (confidencialidad,

limitaciones de garantías, entre otras).

Referente al tipo de licencias, entre las principales se tienen:

Licencias GPL: Es una de la más utilizadas y se suele denominar como GNU

GPL. Con esta licencia el desarrollador conserva los derechos de autor, pero

permite su libre distribución, modificación y uso siempre y cuando en el caso de

que el software se modifique, el nuevo software que se desarrolle como

resultado quede obligatoriamente con la misma licencia.

Así mismo, si el software con licencia GPL solo fuera una parte de otro programa,

este programa también tendría que mantener la licencia. Está considerada la

primera licencia copyleft y, bajo esta filosofía, cualquier código fuente licenciado

bajo GPL, debe estar disponible y accesible, para copias ilimitadas y a cualquier

persona que lo solicite. De cara al usuario final, el software licenciado bajo GPL

es totalmente gratuito, pudiendo pagar únicamente por gastos de copiado y

distribución.

Licencia AGPL: Se engloba dentro de las licencias destinadas a modificar el

derecho de autor derivadas de GNU. La novedad de AGPL es que, aparte de las

cláusulas propias de una GNU GPL, ésta obliga a que se distribuya el software

38

que se destine a dar servicios a través de una red de ordenadores, es decir, si

se quiere usar como parte del desarrollo de un nuevo software, éste quedaría

obligado a su libre distribución.

Licencia BSD: Es un buen ejemplo de una licencia permisiva que poco impone

condiciones sobre lo que un usuario puede hacer con el software. El software

bajo esta licencia es la menos restrictiva para los desarrolladores, ya que, por

ejemplo, el software puede ser vendido y no hay obligaciones de incluir el código

fuente.

Además, una aplicación licenciada con BSD permite que otras versiones puedan

tener otros tipos de licencias, tanto libres como propietarias; un buen ejemplo de

ello es el conocido sistema operativo Mac OS X, desarrollado bajo esta licencia.

También, BSD permite el cobro por la distribución de objetos binarios.

Licencia Apache: El software bajo este tipo de licencia permite al usuario

distribuirlo, modificarlo, y distribuir versiones modificadas de ese software, pero

debe conservar el copyright y el disclaimer. La licencia Apache no exige que las

obras derivadas se distribuyan usando la misma licencia, ni siquiera que se

tengan que distribuir como software libre, solo exige que se informe a los

receptores que en la distribución se ha usado código con la licencia Apache.

En este sentido, al crear nuevas piezas de software, los desarrolladores deben

incluir dos archivos en el directorio principal de los paquetes de software

redistribuidos: una copia de la licencia y un documento de texto que incluya los

avisos obligatorios del software presente en la distribución.

Además, se tienen las licencias Creative Commons cuya definición se basa en

cuatro condiciones:

‘Atribución’, con la cual se puede distribuir, exhibir, representar, entre otros,

siempre y cuando se reconozca y se cite a su autor.

‘No comercial’, que no permite usar el software con fines comerciales.

39

‘No derivadas’, con la cual no se puede modificar dicha obra.

‘Compartir igual’, que incluye la creación de obras derivadas siempre que

mantengan la licencia original.

Bajo las licencias Creative Commons, existen otros tipos de licencia las cuales

se diferencian entre sí con el “juego” de la combinación de las cuatro condiciones

que se acaban de presentar.

Con estas licencias, el desarrollador tiene la posibilidad de elegir lo que considere

más conveniente para su trabajo. Esta decisión implica la renuncia a algunos

derechos reservados inherentes al derecho de autor, tales como el derecho de

reproducción y el derecho de transformación que, por otra parte, puede contribuir a

la divulgación del trabajo y permitir el derecho de acceso por parte del público a sus

obras.

Los derechos (o "libertades") de los que deben gozar los usuarios de software se

plasman, entonces, en la licencia de distribución del software. La diferencia entre

las licencias de software libre y las de software no libre reside en los derechos y las

obligaciones especificados en dicha licencia. Aquéllos otorgados por las licencias

de software libre ("licencias libres") suelen ser directamente opuestos a los

otorgados y reservados por las licencias de software no-libre (licencia no-libre,

"propietaria" o "privativa""), sobre todo en cuanto al uso, la distribución y la

modificación del software.

2.4. Ejemplos

La mayoría de las licencias usadas en la publicación de software libre permite

que los programas sean modificados y redistribuidos. Estas prácticas están

generalmente prohibidas por la legislación internacional de copyright, que intenta

impedir que alteraciones y copias sean efectuadas sin la autorización del o los

autores. Las licencias que acompañan al software libre hacen uso de la legislación

de copyright para impedir la utilización no autorizada, pero estas licencias definen

40

clara y explícitamente las condiciones bajo las cuales pueden realizarse copias,

modificaciones y redistribuciones con el fin de garantizar las libertades de modificar

y redistribuir el software registrado. A esta versión de copyright, se le da el nombre

de copyleft.

2.5. Ejercicios de reflexión

Basado en la información de la FSF, la GPLv3 con copyleft GNU GENERAL

PUBLIC LICENSE

a. ¿Cuál es la cláusula donde están tipificadas las libertades?

b. ¿Cuál es el tiempo de duración de la licencia?

41

3. Sistemas operativos

El GNU es un sistema operativo de tipo Unix, lo cual significa que se trata de una

colección de muchos programas: aplicaciones, bibliotecas, herramientas de

desarrollo y hasta juegos. El desarrollo de GNU, iniciado en enero de 1984, se

conoce como Proyecto GNU. Muchos de los programas de GNU se publican bajo el

auspicio del Proyecto GNU y los llamamos paquetes de GNU. En ese aspecto con

el núcleo Linux está lo que hoy se conoce como sistema operativo GNU/Linux.

En cuanto al núcleo o kernel es la parte básica de cualquier sistema operativo, y

sobre él descansa el código de los servicios fundamentales para controlar el sistema

completo. Básicamente, su estructura puede separarse en una serie de

componentes, o módulos de gestión orientados a:

• Gestión de procesos: Se relaciona con las tareas se van a ejecutar y en el

orden y la respectiva prioridad. Un aspecto importante es la planificación de

la CPU: ¿cómo se optimiza el tiempo de la CPU para ejecutar las tareas con

el mayor rendimiento o interactividad posible con los usuarios?

• Intercomunicación de procesos y sincronización: Establece la

comunicación de tareas entre sí, con los diferentes mecanismos y con la

sincronización de los grupos de tareas.

• Gestión de entrada/salida (E/S): Permite el control de periféricos y gestión

de recursos asociados.

• Gestión de memoria: Busca optimizar el uso de la memoria, sistema de

paginación y memoria virtual.

• Gestión de ficheros: cómo el sistema controla y organiza los ficheros

presentes en el sistema, y accede a los mismos.

42

Tabla 2. Funciones básicas de un núcleo

Shell, comando, aplicaciones

Servicios básicos del sistema

Gestión de ficheros

Gestión de procesos

Gestión de memoria

Gestión de entrada/salida (E/S)

Utilidades del núcleo

Fuente: Autores.

En los sistemas privativos, el núcleo, o kernel, está perfectamente “oculto” bajo

las capas del software del sistema operativo, y el usuario final no tiene una

perspectiva clara de qué es ese núcleo ni tiene tampoco ninguna posibilidad de

cambiarlo u optimizarlo, si no es por el uso de esotéricos editores de “registros”

internos, o programas especializados de terceros (normalmente de alto costo).

Además, el núcleo suele ser único, es el que proporciona el fabricante, el cual se

reserva el derecho de introducir las modificaciones que quiera y cuando quiera, así

como tratar los errores que aparezcan en plazos no estipulados, mediante

actualizaciones que nos ofrece como “parches” de errores (o grupos de ellos

denominados comúnmente service packs), según Jorbe & Suppi (2012).

Uno de los principales problemas de esta aproximación es precisamente la

disponibilidad de estos parches: disponer de las actualizaciones de los errores a su

debido tiempo y, si se trata de problemas de seguridad, todavía con más razón, ya

que hasta que no estén corregidos no podemos garantizar la seguridad del sistema

para problemas ya conocidos.

43

Muchas organizaciones, grandes empresas, gobiernos, instituciones científicas y

militares no pueden depender de los caprichos de un fabricante para solucionar los

problemas de sus aplicaciones críticas (Jorbe & Suppi, 2012).

En este caso, el núcleo Linux ofrece una solución de código abierto, con los

consecuentes permisos de modificación, corrección, posibilidad de generación de

nuevas versiones y actualizaciones de forma rápida, por parte de cualquiera que

quiera y tenga los conocimientos adecuados para realizarlo.

Esto permite a los usuarios críticos controlar mejor sus aplicaciones y el propio

sistema, y poder montar sistemas con el propio sistema operativo “a la carta”,

personalizado al gusto de cada uno. También permite disponer, a su vez, de un

sistema operativo con código abierto, desarrollado por una comunidad de

programadores coordinados mediante Internet y accesible ya sea para educación,

por disponer del código fuente y abundante documentación, o para la producción

final de los sistemas GNU/Linux adaptados a necesidades individuales o de un

determinado colectivo.

Al disponer del código fuente, se pueden aplicar mejoras y soluciones de forma

inmediata, a diferencia del software privativo, donde debemos esperar a las

actualizaciones del fabricante. Podemos, además, personalizar el núcleo tanto

como necesitemos, requisito esencial, por ejemplo, en aplicaciones de alto

rendimiento, críticas en el tiempo o en soluciones con sistemas empotrados (como

dispositivos móviles).

3.1. Ubuntu

En la red se encuentra amplia de quizá la versión más versátil de Linux, Ubuntu.

Lo siguientes apartados servirán como guía básica de orientación que permitirá a

los lectores conocer conceptos que debe profundizar con el abundante material que

se encuentra disponible en la red de manera libre.

44

¿Por qué no probar Linux? Android está basado en Linux, la enorme mayoría de

los servidores del mundo utilizan Linux, también lo usan en la NASA y en el CERN.

La verdad es muchos usa Linux sin ser explicito (Android) y los expertos prefieren

utilizar Linux en aquellos casos críticos en donde es preciso contar con un sistema

estable, seguro y eficiente.

Figura 3. Escritorio de Ubuntu Fuente: Autores.

El escritorio Unity es una interfaz para Gnome pero requiere aceleración 3D para

su correcto funcionamiento. Y lo hace en máquinas con adaptadores gráficos ATI o

nVidia de menos de seis años. Para los ordenadores que no cuentan con

aceleración 3D, Ubuntu ofrece además una versión en 2D del escritorio Gnome.

Control de configuración del sistema

Está ubicado en la parte superior derecha e incluye los botones para apagar,

suspender, hibernar o reiniciar el sistema, pero también te permite acceder a

algunos dispositivos instalados como la webcam o la impresora. El gestor de

actualizaciones indicará si el sistema está actualizado o no. También se presenta la

configuración de las aplicaciones que se inician con el sistema o a muchas y

45

variadas opciones de configuración como la apariencia, el comportamiento del

ratón, el bluetooth, las opciones de red, el teclado, los monitores, entre otras.

Figura 4. Control de configuración Fuente: Autores.

El Launcher o lanzador de aplicaciones

Es una barra situada a la izquierda del escritorio que incluye accesos a diferentes

lugares o aplicaciones básicas del sistema. Es posible utilizar el menú contextual

del botón derecho del ratón para acceder a algunas opciones personalizadas en

cada lanzador. También se puede modificar su configuración si se ingresa al Dash

de Unity (tecla Windows) y se teclea Apariencia en la caja de texto (también se

puede acudir al botón Configuración del sistema y pulsar sobre el botón Apariencia).

Entre otras opciones es posible configurar el tamaño de los iconos que muestra o si

el Launcher se ocultará o no automáticamente. (ver Figura 3)

Carpeta personal

El lanzador permite acceder a las carpetas y archivos de la carpeta personal

/home. Esta incluye una barra de progreso en el lanzador cuando se están

realizando copias de archivos y también listas dinámicas que permite acceder con

mayor facilidad al diálogo de copiar o cancelar las acciones que se están llevando

a cabo en cada momento o al contenido de los subdirectorios de la carpeta.

46

Figura 5. Carpeta personal Fuente: Autores.

El Dash del escritorio

En la parte superior izquierda de la pantalla se observa el logotipo de Ubuntu.

Este último permite acceder al Dash del escritorio Unity haciendo clic sobre el

mismo. También es posible acceder a esta opción si se pulsa sobre la tecla Super

de Ubuntu (también conocida como tecla Windows o tecla Comando).

En realidad, el Dash es, además de un lanzador de muchos programas, un motor

de búsqueda que encuentra archivos locales, y mucho más. En pantalla se muestra

como ese particular menú de inicio que se superpone al escritorio en sí aplicando

una ligera transparencia y que presenta tanto los lanzadores de aplicaciones como

el acceso rápido a los ficheros. En anteriores ediciones de Unity, las vistas del Dash

se separaban según las distintas "Lenses" pero ahora todas esas "Lenses" se

ofrecen de forma consolidada en la parte inferior de la pantalla.

Figura 6. Dash Fuente: Autores.

47

En relación con los principales comandos de GNU/Linux se presenta las

siguientes tablas.

Tabla 3. Listado de los principales comandos de información del sistema en Ubuntu

Comando Descripción del comando

arch Mostrar la arquitectura de la máquina (1).

uname -m Mostrar la arquitectura de la máquina (2).

uname -r Mostrar la versión del kernel usado.

dmidecode -q Mostrar los componentes (hardware) del sistema.

hdparm -i /dev/hda Mostrar las características de un disco duro.

hdparm -tT /dev/sda Realizar prueba de lectura en un disco duro.

cat /proc/cpuinfo Mostrar información de la CPU.

cat /proc/interrupts Mostrar las interrupciones.

cat /proc/meminfo Verificar el uso de memoria.

cat /proc/swaps Mostrar ficheros swap.

cat /proc/version Mostrar la versión del kernel.

cat /proc/net/dev Mostrar adaptadores de red y estadísticas.

cat /proc/mounts Mostrar el sistema de ficheros montado.

lspci -tv Mostrar los dispositivos PCI.

lsusb -tv Mostrar los dispositivos USB.

date Mostrar la fecha del sistema.

clock -w Guardar los cambios de fecha en la BIOS.

Tabla 4. Listado de los principales comandos para apagar, reiniciar y cerrar sesión en Ubuntu

Comando Descripción del comando

shutdown -h now Apagar el sistema (1).

init 0 Apagar el sistema (2).

telinit 0 Apagar el sistema (3).

halt Apagar el sistema (4).

shutdown -h hours:minutes & Apagado planificado del sistema.

shutdown -c Cancelar un apagado planificado del sistema.

shutdown -r now Reiniciar (1).

reboot Reiniciar (2).

logout Cerrar sesión.

Tabla 5. Listado de los principales comandos para gestión de archivos y directorios en Ubuntu

Comando Descripción del comando

cd /home Entrar en el directorio “home”.

cd .. Retroceder un nivel.

cd ../.. Retroceder 2 niveles.

48

Comando Descripción del comando

cd Ir al directorio raíz.

cd ~user1 Ir al directorio user1.

cd – Ir (regresar) al directorio anterior.

pwd Mostrar el camino del directorio de trabajo.

ls Ver los ficheros de un directorio.

tree Mostrar los ficheros y carpetas en forma de árbol comenzando por la raíz. (1)

lstree Mostrar los ficheros y carpetas en forma de árbol comenzando por la raíz. (2)

mkdir dir1 Crear una carpeta o directorio con nombre ‘dir1’.

mkdir dir1 dir2 Crear dos carpetas o directorios simultáneamente (Crear dos directorios a la vez).

mkdir -p /tmp/dir1/dir2

Crear un árbol de directorios.

rm -f file1 Borrar el fichero llamado ‘file1’.

rmdir dir1 Borrar la carpeta llamada ‘dir1’.

rm -rf dir1 Eliminar una carpeta llamada ‘dir1’ con su contenido de forma recursiva. (Si lo borro recursivo estoy diciendo que es con su contenido).

rm -rf dir1 dir2 Borrar dos carpetas (directorios) con su contenido de forma recursiva.

mv dir1 new_dir Renombrar o mover un fichero o carpeta (directorio).

cp file1 Copiar un fichero.

cp file1 file2 Copiar dos ficheros al unísono.

cp dir /* . Copiar todos los ficheros de un directorio dentro del directorio de trabajo actual.

cp -a /tmp/dir1 . Copiar un directorio dentro del directorio actual de trabajo.

cp -a dir1 Copiar un directorio.

Tabla 6. Listado de los principales comandos para encontrar archivos en Ubuntu

Comando Descripción del comando

find / -name file1 Buscar fichero y directorio a partir de la raíz del sistema. find / -user user1 Buscar ficheros y directorios pertenecientes al usuario ‘user1’. find /home/user1 -name \*.bin

Buscar ficheros con extensión ‘. bin’ dentro del directorio ‘/ home/user1’.

Tabla 7. Listado de los principales comandos para montar un sistema de ficheros en Ubuntu

Comando Descripción del comando

mount /dev/hda2 /mnt/hda2 Montar un disco llamado hda2. Verifique primero la existencia del directorio ‘/ mnt/hda2’; si no está, debe crearlo.

umount /dev/hda2 Desmontar un disco llamado hda2. Salir primero desde el punto ‘/ mnt/hda2.

mount /dev/hdc /mnt/cdrecorder

Montar un cd regrabable o un dvdrom.

49

Tabla 8. Listado de los principales comandos para mostrar opciones de espacio de disco en Ubuntu

Comando Descripción del comando

df -h Mostrar una lista de las particiones montadas. du -sh dir1 Estimar el espacio usado por el directorio ‘dir1’.

Tabla 9. Listado de los principales comandos para mostrar de usuarios y grupos en Ubuntu

Comando Descripción del comando

groupadd nombre_del_grupo Crear un nuevo grupo. groupdel nombre_del_grupo Borrar un grupo. useradd -c “Name Surname ” -g admin -d /home/user1 -s /bin/bash user1

Crear un nuevo usuario perteneciente al grupo “admin”.

useradd user1 Crear un nuevo usuario.

userdel -r user1 Borrar un usuario (‘-r’ elimina el directorio Home).

passwd Cambiar contraseña.

passwd user1 Cambiar la contraseña de un usuario (solamente por root).

Tabla 10. Listado de los principales comandos para la gestión de usuarios y grupos en Ubuntu

Comando Descripción del comando

groupadd nombre_del_grupo Crear un nuevo grupo. groupdel nombre_del_grupo Borrar un grupo. useradd -c “Name Surname ” -g admin -d /home/user1 -s /bin/bash user1

Crear un nuevo usuario perteneciente al grupo “admin”.

useradd user1 Crear un nuevo usuario.

userdel -r user1 Borrar un usuario (‘-r’ elimina el directorio Home).

passwd Cambiar contraseña.

passwd user1 Cambiar la contraseña de un usuario (solamente por root).

Tabla 11. Listado de los principales comandos para la gestión de permisos en ficheros en Ubuntu

Comando Descripción del comando

ls -lh Mostrar permisos.

chmod ugo+rwx directory1 Colocar permisos de lectura ®, escritura (w) y ejecución(x) al propietario (u), al grupo (g) y a otros (o) sobre el directorio ‘directory1’.

chmod go-rwx directory1 Quitar permiso de lectura ®, escritura (w) y (x) ejecución al grupo (g) y otros (o) sobre el directorio ‘directory1’.

chown user1 file1 Cambiar el dueño de un fichero.

chown -R user1 directory1 Cambiar el propietario de un directorio y de todos los ficheros y directorios contenidos dentro.

chgrp group1 file1 Cambiar grupo de ficheros.

Nota: Usar “+” para colocar permisos y “-” para eliminar

50

Tabla 12. Listado de los principales comandos para actualizar paquetes APT en Ubuntu

Comando Descripción del comando

apt-get install package_name Instalar / actualizar un paquete deb. apt-get update Actualizar la lista de paquetes. apt-get upgrade Actualizar todos los paquetes instalados.

apt-get remove package_name

Eliminar un paquete deb del sistema.

apt-get check Verificar la correcta resolución de las dependencias.

apt-get clean Limpiar cache desde los paquetes descargados.

Nota: Útil para Debian, Ubuntu y derivados

Tabla 13. Listado de los principales comandos para formatear un sistema de ficheros en Ubuntu

Comando Descripción del comando

mkfs /dev/hda1 Crear un fichero de sistema tipo Linux en la partición hda1.

mke2fs /dev/hda1 Crear un fichero de sistema tipo Linux ext 2 en hda1.

mke2fs -j /dev/hda1 Crear un fichero de sistema tipo Linux ext3 (periódico) en la partición hda1.

mkfs -t vfat 32 -F /dev/hda1

Crear un fichero de sistema FAT32 en hda1.

fdformat -n /dev/fd0 Formatear un disco flooply.

mkswap /dev/hda3 crear un fichero de sistema swap.

Tabla 14. Listado de los principales comandos para trabajo con la red en Ubuntu

Comando Descripción del comando

ifconfig eth0 Mostrar la configuración de una tarjeta de red Ethernet. ifup eth0 Activar una interface ‘eth0’. ifdown eth0 Deshabilitar una interface ‘eth0’. route -n Mostrar mesa de recorrido. hostname Mostrar el nombre del host del sistema. host www.example.com Buscar el nombre del host para resolver el nombre a una

dirección ip(1). iwlist scan Mostrar las redes inalámbricas. iwconfig eth1 Mostrar la configuración de una tarjeta de red inalámbrica.

Nota: Útil para LAN y WiFi

Finalmente, la siguiente figura presenta algunas capturas de pantalla con la

presentación de algunos ejemplos con el uso de los comandos.

51

Figura 7. Ejemplos de comandos Ubuntu Fuente: Autores.

3.2. Ejemplos

El Proyecto Debian es una asociación de personas que han hecho causa común

para crear un sistema operativo (SO) libre. El sistema operativo creado bajo esta

filosofía se llama Debian.

Un sistema operativo es un conjunto de programas y utilidades básicas que

hacen que una computadora funcione. El centro de un sistema operativo es el

núcleo (N. del T.: kernel). El núcleo es el programa más importante en la

computadora, realiza todo el trabajo básico y permite ejecutar otros programas.

52

Los sistemas Debian actualmente usan el núcleo de Linux o de FreeBSD. Linux

es una pieza de software creada en un principio por Linus Torvalds y desarrollada

por miles de programadores a lo largo del mundo. FreeBSD es un sistema operativo

que incluye un núcleo y otro software.

3.3. Ejercicios de reflexión

Se recomienda al lector revisar video tutoriales y realiza la instalación de la última

distro del sistema operativo Linux Ubuntu.

a. Instalar la última distro de Ubuntu

b. Revisar que versión de núcleo tiene

3.4. Casos de estudio

Los siguientes corresponde a algunos casos de estudios sobre sistemas

operativos, navegadores y software:

RedHat: es el proveedor líder de soluciones de código abierto empresarial que

basa el desarrollo de tecnología de cloud computing, virtualización.

Firefox: es un navegador web libre y de código abierto desarrollado para Linux,

Android, IOS OS X y Microsoft Windows coordinado por la Corporación Mozilla

y la Fundación Mozilla.

Ubuntu: sistema operativo basado en GNU/Linux y que se distribuye como

software libre, el cual incluye su propio entorno de escritorio denominado Unity.

Orfeo: herramienta de gestión documental de software libre amparada bajo la

licencia GNU GPL, altamente escalable, desarrollada bajo PhP que incorpora la

idea de "fractalizar procesos" para facilitar la gestión de los documentos de

cualquier empresa.

GIMP: programa de edición de imágenes digitales en forma de mapa de bits,

tanto dibujos como fotografías. Es un programa libre y gratuito. Forma parte del

proyecto GNU y está disponible bajo la Licencia pública general de GNU y GNU

Lesser General Public License.

53

54

55

Capítulo II

Ap

licac

ion

es e

n s

oft

war

elib

re

Entornos de desarrollo

Desarrollo para móviles

Alternativas al software privativo

Aplicaciones en software libre

56

57

CAPÍTULO 2: APLICACIONES EN SOFTWARE

LIBRE

Introducción

En el presente capítulo se abordan las herramientas con las cuales cuentan los

desarrolladores para el trabajo de desarrollar aplicaciones en software libre;

especialmente se le da relevancia al uso de los entornos de desarrollo,

posteriormente una explicación de los dos más importantes como son Eclipse y otro

el NetBeans.

Posteriormente, se hace una explicación sobre los principales lenguajes usados

actualmente en el mundo de los desarrolladores como son java y el C++. En cada

uno de ellos se habla de las características, funciones, ventajas y algo de historia.

En otro aspecto, se trata de las aplicaciones que el software libre tiene para que

puedas migar desde el software privativo. También se presenta un listado

equivalente entre unas y otras aplicaciones de los diferentes sistemas.

Por último, lo relacionado a los sistemas operativos libre. Para tal fin, se enfatiza

en la distro de GNU/linux; por ser una de las más populares, además los proyectos

Solaris y la familia BSD.

58

4. Entornos de desarrollo

Linux es un sistema operativo basado en un Unix libre, con código fuente libre.

Este, permite que miles de usuarios de computadores de todo el mundo intervengan

en el desarrollo del mismo y puedan realizar las modificaciones que deseen. Su

distribución es libre y puede ser obtenido y utilizado sin restricciones por cualquier

persona, organización o empresa que así lo desee.

Debido a su gran entorno de desarrollo, quienes utilizan Linux pueden disponer

de una gran cantidad de herramientas de desarrollo, todo ellos listos para ser

usados libremente desde la Red.

Con relación a un entorno de desarrollo de software, es considerado como las

herramientas combinadas para automatizar o brindar soporte a gran parte de las

tareas o fases del desarrollo del proyecto; tales como, análisis de requisitos, diseño

de arquitectura, diseño detallado, codificación, pruebas de unidades, pruebas de

integración y validación, gestión de configuración, mantenimiento, entre otras. Estas

herramientas deben estar bien integradas con la finalidad de buscar interoperar

unas con otras.

Dicho de otra manera, estos están formados por un conjunto de instrumentos,

tanto de hardware, como de software, además de procedimientos que facilitan o

automatizan las actividades de desarrollo. En lo que respecta a este texto se ha de

considerar básicamente las herramientas de software.

CASE: Computer-Aided Software Engineering

Con este término genérico se denominan los productos software que dan soporte

informático al desarrollo. Sería deseable automatizar todo el desarrollo, pero

normalmente se automatiza sólo en partes.

59

Los productos CASE son cada uno de los instrumentos o herramientas software

de apoyo al desarrollo. La tecnología CASE da soporte para actividades verticales

donde las actividades verticales son específicas de una fase del ciclo de vida:

análisis de requisitos, diseño de la arquitectura, edición y compilación del código,

entre otras.

Sin embargo, también es necesario dar soporte a las actividades horizontales

relacionadas con actividades generales como la documentación, planificación,

gestión de configuración, entre otras.

En este aspecto, las actividades mejor soportadas por herramientas de desarrollo

son normalmente las centrales, actividades como la codificación y pruebas de

unidades. El grupo de herramientas que apoyan estas actividades constituyen lo

que se llama un entorno de programación. A veces se utilizan las siglas IDE -

Integrated Development Environment para designar estos entornos, aunque no son

un entorno de desarrollo completo, sino sólo una parte de él.

Esto indica que, a niveles funcionales, se constituye en el banco de trabajo del

desarrollador. Además, da soporte a las actividades de la fase de codificación,

preparación del código y prueba de unidades (Dart, Ellinson & Feiler, 1997). Los

mismos productos sirven también para el diseño detallado y para las pruebas de

integración. Se sitúa, por tanto, en la parte central del ciclo de desarrollo.

Funciones del entorno de programación IDE

Como se ha expresado, el objetivo de un Entorno de Programación es dar

soporte a la preparación de programas, es decir, a las actividades de codificación y

pruebas. Las tareas esenciales de la fase de codificación son:

Edición, creación y modificación del código fuente

Proceso - ejecución del programa

Interpretación directa del código fuente

Compilación del código máquina - montaje - ejecución

60

Compilación código intermedio - interpretación

Otras funciones:

Examinar el código fuente

Analizar consistencia, calidad, etc.

Ejecutar en modo depuración

Ejecución automática de pruebas

Control de versiones

Generar documentación, reformar código

No es sencillo establecer una clasificación dentro de la variedad de entornos de

programación existentes. En algún momento se describieron las siguientes clases

de entornos, no excluyentes, usando un criterio esencialmente pragmático:

Entornos centrados en un lenguaje

Entornos orientados a estructura

Entornos colección de herramientas

Se pueden encontrar ejemplos de estos entornos para todo tipo de lenguajes:

Lenguajes funcionales con interpretación directa

(Inter)Lisp, Haskell, etc.

Lenguajes compilados a código de máquina nativo

Delphi, Visual C++, AdaGide/GNAT, GPS, etc.

Lenguaje ejecutado sobre máquina virtual

Java (Visual Age, Eclipse), C# (Visual Studio .NET)

Ejemplos especiales:

Entornos Ada (Stoneman, Cais, Asis)

Entornos Smalltalk

Entornos Oberon, Component Pascal

Eclipse

NetBeans

61

4.1. Eclipse

Eclipse es una plataforma de desarrollo, diseñada para ser extendida de forma

indefinida a través de plug-ins o complementos. Fue concebida desde sus orígenes

para convertirse en una plataforma de integración de herramientas de desarrollo.

No busca el desarrollo de programación con un lenguaje específico, sino que es

un IDE genérico, aunque goza de mucha popularidad entre la comunidad de

desarrolladores del lenguaje Java usando el plug-in JDT que viene incluido en la

distribución estándar del IDE. Proporciona herramientas para la gestión de espacios

de trabajo, escribir, desplegar, ejecutar y depurar aplicaciones.

Figura 8. Pantalla de inicio del IDE Eclipse Juno Fuente: Autores.

Eclipse es una plataforma de desarrollo de código abierto basada en Java. Por si

misma, es simplemente un marco de trabajo y un conjunto de servicios para la

construcción del entorno de desarrollo de los componentes de entrada.

Afortunadamente, Eclipse tiene un conjunto de complementos, incluidas las

Herramientas de Desarrollo de Java (JDT).

Mientras que la mayoría de los usuarios se encuentran satisfechos con el uso de

Eclipse como un IDE de Java, sus ambiciones no se detienen ahí. Eclipse también

incluye el Entorno de Desarrollo de Complementos (PDE), que es de interés

principalmente para los desarrolladores que quieren extender Eclipse, dado que les

62

permite construir herramientas que se integran sin dificultades con el entorno de

Eclipse.

Dado que todo en Eclipse son complementos, los desarrolladores de

herramientas tienen un gran terreno para ofrecer extensiones a Eclipse y para

proporcionar un entorno de desarrollo integrado y unificado para los usuarios.

Esta paridad y consistencia no está limitada a las herramientas de desarrollo de

Java. Aunque Eclipse se escribe en el lenguaje Java, su uso no se limita al lenguaje

Java. Por ejemplo, los complementos se encuentran disponibles o planificados para

incluir soporte para los lenguajes de programación como C/C++ y COBOL. El marco

de trabajo de Eclipse puede también utilizarse como base para otros tipos de

aplicaciones que no se relacionen con el desarrollo del software, como los sistemas

de gestión de contenido, Eclipse (2018).

Configurar Eclipse para java

El IDE Eclipse se coloca encima del JDK como una extracción útil pero todavía

necesita acceder al JDK y sus diversas herramientas. Antes de que pueda usar

Eclipse para escribir el código Java, tiene que indicarle dónde está ubicado el JDK.

Para configurar su entorno de desarrollo Eclipse:

Inicie Eclipse al hacer doble clic en eclipse.exe (o el ejecutable equivalente

para su plataforma).

Aparecerá el Iniciador del espacio de trabajo, que le permitirá seleccionar

una carpeta raíz para sus proyectos Eclipse. Elija una carpeta que

recuerde fácilmente, por ejemplo C:\home\workspace en Windows o

~/workspace en Linux.

Descarte la pantalla de bienvenida a Eclipse.

Haga clic en Window > Preferences > Java > Installed JREs.

Eclipse indicará un JRE instalado. El lector necesita asegurarse en usar el

que descargó con JDK 6. Si Eclipse no detecta automáticamente el JDK

63

que usted instaló, haga clic en Add... y en el siguiente diálogo Standard

VM, luego haga clic en Next.

Especifique el directorio de inicio del JDK (por ejemplo,

C:\home\jdk1.6.0_20 en Windows), luego haga clic en Finish.

Confirme que el JDK que quiere usar esté seleccionado y haga clic en OK.

4.2. NetBeans

El entorno de Desarrollo NetBeans permite que los desarrolladores trabajen las

aplicaciones a partir de un conjunto de componentes de software llamados módulos.

Es decir, un archivo Java que contiene clases de java escritas para interactuar con

las APIs de NetBeans y un archivo especial (manifest file) que lo identifica como

módulo. Las aplicaciones construidas a partir de módulos pueden ser extendidas

agregándole nuevos módulos. Debido a que los módulos pueden ser desarrollados

independientemente, las aplicaciones basadas en la plataforma NetBeans pueden

ser extendidas fácilmente por otros desarrolladores de software. (EcuRED, 2017).

Figura 9. Logo del IDE NetBeans Fuente: EcuRED (2017).

NetBeans es un proyecto de código abierto de gran éxito con una gran base de

usuarios, una comunidad en constante crecimiento, y con cerca de 100 socios en

todo el mundo. Sun MicroSystems fundó el proyecto de código abierto NetBeans en

junio de 2000 y continúa siendo el patrocinador principal de los proyectos.

64

Durante el desarrollo del NetBeans IDE, los desarrolladores comenzaron a

construir aplicaciones usando el NetBeans core runtime con sus propios plug-ins,

de hecho, esto se convirtió en un mercado bastante grande.

La Plataforma NetBeans es una base modular y extensible usada como una

estructura de integración para crear aplicaciones de escritorio grandes. Empresas

independientes asociadas y especializadas en desarrollo de software proporcionan

extensiones adicionales que se integran fácilmente en la plataforma y que pueden

también utilizarse para desarrollar sus propias herramientas y soluciones. (EcuRED,

2018)

La plataforma ofrece servicios comunes a las aplicaciones de escritorio,

permitiéndole al desarrollador enfocarse en la lógica específica de su aplicación.

Entre las características de la plataforma están:

Administración de las interfaces de usuario (por ejemplo, menús y barras

de herramientas).

Administración de las configuraciones del usuario.

Administración del almacenamiento (guardando y cargando cualquier tipo

de dato).

Administración de ventanas.

Framework basado en asistentes (diálogos paso a paso).

En cuanto al IDE Netbeans, esta herramienta para programadores está pensada

para escribir, compilar, depurar y ejecutar programas. Está escrito en Java - pero

puede servir para cualquier otro lenguaje de programación. Existe además un

número importante de módulos para extender el IDE NetBeans. El IDE NetBeans

es un producto libre y gratuito sin restricciones de uso. (EcuRED, 2018)

La siguiente tabla presenta las principales características del IDE NetBeans

65

Tabla 15. Principales características del IDE NetBeans

Característica Descripción de las características

Soporte JavaScript

Sintaxis Resaltada

Completación de Código y Análisis de Tipeo

Soluciones Rápidas (Quick Fixes) y Verificación de Sintaxis

Refactorización

Mejoras en el Desempeño

Inicio hasta 40% más rápido

Promociones más inteligentes, así que la completación de código es más rápida

Menor consumo de memoria

Barra de Progreso

Soporte de Estructuras Spring

Agregado de la librería Spring Framework 2.5

Asistentes para configuración de archivos XML y controladores Spring Web MVC

Completación de Código de nombres bean y clases y propiedades Java

Soporte de entorno Spring Web MVC en proyectos web

Completación de Código Spring,

Nuevo Soporte MySQL en Exploración de Bases de Datos

Registro de servidores MySQL

Ver, crear y borrar bases de datos

Fácil lanzamiento de la herramienta de administración para MySQL

Soporte Java Beans

Modelos Bean en el Navegador

Generador de Propiedades Bean

Editor BeanInfo

Generador JSF CRUD

Generador de aplicaciones JavaServer Faces CRUD a partir de clases de entidades.

Soporta todo tipo de relaciones de entidades (uno-a-uno, uno-a-varios, varios-a-uno y varios-a-varios).

Soporta todo tipo de claves principales (columna simple, compuesta y generada).

Soporte Ruby/JRuby

Mejoras en el editor, incluyendo nuevas sugerencias y soluciones

Soporte de depuración rápida en JRuby

Administrador de Plataforma

Mejoras en la integración de servidores y bases de datos en proyectos Rails

Completación de Código Javadoc

Soporte de etiquetas (tags) estándares: @param, etc.

Completación de Código para parámetros, excepciones, etc.

Soporte para los Web APIs más usados

Fácil creación de aplicaciones remezcladas (mashup)

Operaciones de Arrastrar y soltar dentro del entorno POJO, Servlet, JSP y servicios web RESTful para que NetBeans IDE genere todo el código para acceder a los servicios

Soporte de web APIs tales como Google, Facebook, Yahoo y YouTube

Soporte RESTful Web Service

Compilación de servicios JSR311-compliant RESTful Web utilizando Jersey

Pruebe sus aplicaciones con el nuevo REST Test Client

Use asistentes para crear servicios REST a partir de clases de entidades JPA y para generar aplicaciones de resumen (stubs) clientes JavaScript a partir de WADL

Compartir Proyectos (Librerías Compartidas AKA)

Especificación de dependencias de librerías usando direcciones de librerías relativas (por defecto Java, Web y todos los proyectos tipo Java EE)

Compartir proyectos más fácilmente con otros miembros de su equipo, cuando por ejemplo use un sistema de control de versión

Habilite compilaciones no finalizadas en sus proyectos

Nuevas Extensiones (Plugins)

Control de versión ClearCase

Soporte AXIS

Soporte SOAP UI

66

Característica Descripción de las características

Java Mobility (Aplicaciones para Móviles

Emulador Mpowerplayer MIDP para aplicaciones MIDP en MacOS X (disponible en el centro de extensiones)

Estructurador SVG (SVG Composer) para Componentes SVG de Uso Frecuente (SVG Custom Components)

Documentación y estabilidad mejoradas

Vista Previa de las Características Post-6.1

Soporte de Edición para PHP: Completación de código, sintaxis resaltada, navegación, depuración y mucho más

Depurador JavaScript

Extensión JavaFX

4.3. Lenguajes de Desarrollo

Entre los lenguajes de programación más populares de la actualidad se

encuentran Java, C, C++ y Phyton. Lo anterior, según el Índice TIOBE en su última

actualización de octubre 2018. Así mismo, la explicación porque un lenguaje de

programación es “más popular" (TIOBE, 2017).

El Índice TIOBE es un índice elaborado por una empresa de software holandesa

que se especializa en la evaluación y seguimiento de la calidad de los programas

informáticos. Actualmente, la empresa revisa en tiempo real más de 300 millones

de códigos de diversos programas informáticos, por día.

Cuando se habla de lenguajes de programación y se menciona el desarrollo de

software, para muchos se evocan los más conocidos, principalmente porque la

mayoría de los desarrolladores lo utilizan, además del uso por parte de empresas.

Si el lector domina alguno de estos, seguramente podrá estar listo conseguir una

vacante como programador. Sin embargo, ¿cuáles son los lenguajes más utilizados

actualmente? aquellos lenguajes que es recomendable aprender sí o sí. A

continuación, se presentan dos lenguajes claves e importantes en la programación

actual.

67

4.3.1. Java

En cuanto a Java es un lenguaje de programación de propósito general orientado

a objetos desarrollado por Sun Microsystems. También se puede decir que Java es

una tecnología que no sólo se reduce al lenguaje, sino que además provee de una

máquina virtual Java que permite ejecutar código compilado Java, sea cual sea la

plataforma que exista por debajo; plataforma tanto hardware, como software (el

sistema operativo que soporte ese hardware). El apoyo a esta tecnología viene dado

por la gran cantidad de fabricantes que apoyan esta especificación de máquina

virtual. (Java, 2018)

Figura 10. Logo del Java Fuente: Java (2018)

Aprender el lenguaje de programación Java requiere tiempo y esfuerzo. En este

apartado busca sentar las bases para el conocimiento general del lenguaje. El

lenguaje se inspira en otros lenguajes:

Sentencias comunes de C y C++ (sintaxis parecida a dichos lenguajes).

Concurrencia parecida a la de Mesa (un lenguaje de investigación de

Xerox).

Interrupciones parecidas a las de Modula-3.

Tratamiento de enlace dinámico de código nuevo parecido al de Lisp.

Definiciones de interfaces parecidas a las de Objective C.

Gestión de almacenamiento automático parecida a la de Lisp.

En cuanto a características, Sun Microsystems describe al lenguaje Java de la

siguiente manera:

68

Simple.

Orientado a Objetos.

Tipado estáticamente.

Distribuido.

Interpretado.

Robusto.

Seguro.

de Arquitectura Neutral.

Multihilo.

con Recolector de basura (Garbage Collector).

Portable.

de Alto Rendimiento: sobre todo con la aparición de hardware

especializado y mejor software.

Dinámico.

Java Runtime Environment JRE

Es el entorno mínimo para ejecutar programas Java 2. Incluye la JVM y la API.

Está incluida en el J2SE aunque puede descargarse e instalarse separadamente.

En aquellos sistemas donde se vayan a ejecutar programas Java, pero no

compilarlos, el JRE es suficiente.

El JRE incluye el Java Plug-in, que es el 'añadido' que necesitan lo navegadores

(Explorer o Netscape) para poder ejecutar programas Java 2. Es decir que

instalando el JRE se tiene soporte completo Java 2, tanto para aplicaciones

normales (denominadas 'standalone') como para Applets (programas Java que se

ejecutan en una página Web, cuando esta es accedida desde un navegador).

4.3.2. C++

En relación con C++, es muy popular, especialmente para aquellas aplicaciones

que necesitan una gran velocidad y/o acceso a aspectos de muy bajo nivel. Cuando

69

se habla de niveles bajos o altos se hace referencia a la proximidad a la máquina.

Si es de nivel bajo es algo muy cercano a la máquina, mientras que, si es alto, es

más cercano al usuario o al programador. Se creó en 1979 por Bjarne Stroustup,

como una mejora del lenguaje C.

Además, aunque con C++ puede programarse para entornos gráficos utilizando

ciertas librerías, el propósito es concentrase en los programas basados en texto (del

terminal). Una última nota a tener en cuenta, piensa que C++ es KeySensitive, así

que no es lo mismo unNombre que UnNombre.

Aspectos básicos del lenguaje

Valores y declaraciones: Una declaración es una unidad de código que

ejecuta ciertas acciones. Una expresión es una declaración que tiene un

valor. Por ejemplo, cuando se suman dos números. No todas las

declaraciones son expresiones.

Operadores: Se puede ejercer cálculos aritméticos con operadores. Los

operadores en expresiones forman nuevas expresiones.

Tipos de operadores

Matemáticos, como los de operaciones matemáticas, +, – o *. Algo

que sorprende en los inicios en la programación es el operador %.

Este operador entrega como resultado el módulo de dos números,

así pues, da el residuo de la división de esos dos números, esencial

según qué situaciones.

Lógicos: Son usados para ejercer sentencias “and”, “or” y

operaciones que buscan tomar decisiones de acuerdo a las

operaciones lógicas.

Bitwise: Se usan para manipular la representación binaria de

números.

Tipos de datos: Cada expresión tiene un tipo, una descripción formal de la

clase de valor que tienen unos datos. Por ejemplo, 0, es un entero.

Algunos tipos de datos son los siguientes:

70

char

int

bool

double

Variables: se puede guardar un valor dentro de una estructura de espacio

llamado variable. Estas variables se suelen utilizar cuando un valor puede

cambiar.

4.4. Ejemplos

Este programa Hola Mundo, es usado como introducción al estudio de un

lenguaje de programación, se caracteriza por ser el primer ejercicio típico, y se

considera fundamental, si de la didáctica en programación se habla. Igualmente,

éste es el primer ejercicio que un programador aprende cuando comienza con

cualquier lenguaje de programación o entorno, además significa un punto de partida

para desarrollos futuros donde se mezclarán nuevas acciones, comandos, fórmulas

e interacciones.

Hola mundo en java:

public class Hello { public static void main(String[] args)

{ System.out.println("Hola mundo"); }

}

Ejemplo de Hola Mundo en C++

#include <iostream> using namespace std; int main() { cout << "Hola Mundo" << endl; return 0; }

71

5. Desarrollo para móviles

En base a la experiencia del programa de Apps.co con relación al desarrollo de

aplicaciones para móviles y portales web, cotejando con los aspectos económicos

del proyecto a desarrollar y el poder cumplir con los objetivos propuestos e incluso

ofrecer más de lo planteado, es conveniente la idea de escoger un terreno de

desarrollo donde se pueda realizar una sola programación. Es decir, se programa

para móviles, tabletas, pc en un solo entorno conocido como el HTML dinámico.

Luego se generan las apps para el sistema operativo iOS, ANDROID, Windows a

través de framework Intel XDK o de cualquier otro como PhoneGap.

Backend, frontend, diseño, UX, usabilidad, posicionamiento, estrategia,

arquitectura y muchos otros términos formaron parte del diseño y desarrollo de estas

aplicaciones web modernas. Lejos de aquella época donde un webmaster hacía

todo el trabajo. Ahora es imposible crear un producto completo sin por lo menos un

diseñador, un front y un back.

5.1. HTML Dinámico

El HTML Dinámico o DHTML (del inglés Dynamic HTML) designa el conjunto de

técnicas que permiten crear sitios web interactivos utilizando una combinación de

algún lenguaje de marcado estático (como HTML), un lenguaje interpretado en el

lado del cliente (como JavaScript), el lenguaje de hojas de estilo en cascada (CSS)

y la jerarquía de objetos de un Document Object Model (DOM).

Una página de HTML dinámico es cualquier página web en la que los scripts en

el lado del cliente cambian el HTML del documento, después de que éste haya

cargado completamente, lo cual afecta a la apariencia y las funciones de los objetos

de la página. La característica dinámica del DHTML, por tanto, es la forma en que

la página interactúa con el usuario cuando la está viendo, siendo la página la misma

para todos los usuarios.

72

Backend

La labor de ingeniería de software que compone el acceso a bases de datos y

generación de plantillas del lado del servidor se desarrolla comúnmente con el uso

de PHP, Ruby on Rails, Django, Node.js, .NET, entre otros. A excepción de este

último todas estas herramientas son libres o de código abierto.

Por su parte el Backend se encarga de implementar cosas como MySQL. Luego,

un lenguaje como PHP o JSP, o frameworks como RoR, Django, Node.JS se

conecta a la base de datos. A través de estos lenguajes y frameworks se recibe,

procesa y envía información al navegador del usuario. En código HTML que crea el

Frontend o enviando datos puros en XML, RSS o JSON, para ser procesados por

Javascript.

Por ejemplo, se tiene caso de facebook, donde PHP manda la estructura básica

del sitio web, pero son múltiples programas y servidores hechos en C++ o Erlang

los que procesan la información en tiempo real (chats, comentarios, notificaciones)

y las envían y reciben a través de Javascript en el navegador.

En su gran mayoría, el trabajo en Backend queda dividido en tres partes:

Un servidor.

Una aplicación.

Una base de datos.

El trabajo profesional en Backend se enfocan en diferentes formas de resolver

un problema y que cada solución puede encontrarse con:

Patrones de acceso a información.

Características de velocidad.

Operaciones sintetizadas.

Potencial de automatización.

Diseño de métodos para escalar información más allá de la capacidad del

hardware.

73

Frontend

Es el área Web que trabaja con el diseño, visualización y dinamismo del usuario,

a través del lado del cliente o navegador. Básicamente, todo lo que el usuario puede

ver e interactuar en un sitio o aplicación. El lado del cliente donde se trabaja HTML,

CSS, HTML5, CSS3, JavaScript, jQuery y para satisfacción de los seguidores de la

filosofía del software libre son herramientas libres o de código abierto.

Es posible comunicarse con el Backend y la base de datos sin recargar la página,

usando AJAX o WebSockets, recibir esos datos y cambiar el diseño entero del sitio.

jQuery hace todo esto fácil pero no es el único framework de JavaScript.

Las funciones de Frontend quedan enfocadas en:

HTML, CSS, JavaScript. Maquetar la estructura semántica del contenido,

codificar el diseño en hojas de estilo y agregar la interacción con el usuario.

Crear adaptación y compatibilidad con navegadores y dispositivos.

Accesibilidad.

Optimización y Ejecución.

Diseño Visual.

Comunicación y Construcción de Procesos.

De la combinación de Backend y Frontend con un HTML dinámico se lanza un

producto totalmente responsive caracterizado por:

Layouts fluidos o diseño fluido: Los layouts fluidos es la forma en la

que, sin importar el tamaño del navegador, todos sus bloques, divs,

imágenes, sections, articles, nav, entre otros, se acomodarán conforme al

tamaño del navegador que se esté usando y esteticamente contara con

buena apariencia en todo momento.

Viewport: Este se utiliza para que la web tome el tamaño del navegador

y esto evitará que se pueda hacer zoom en navegadores web móviles con

el fin que el contenido se acomode según la pantalla.

74

Media Query: Es la forma de hacer consultas sobre la resolución de

pantalla en donde se está mostrando la página, así se pueden colocar

propiedades específicas para cada pantalla y acomodar la experiencia de

usuario a tal punto que sea lo más agradable para este.

Responsive Design: Es como se llama el unir las tres herramientas

anteriores para lograr una experiencia agradable en la web sin importar el

dispositivo en la que se visualice.

5.2. Framework

Los frameworks no necesariamente están ligados a un lenguaje concreto, aunque

sea así en muchas ocasiones. En el cada vez más popular Ruby on Rails, ‘Ruby’ el

cual es el lenguaje de programación y ‘Rails’ es el framework; por otro lado,

JavaServer Faces está orientado a desarrollos en Java. Sin embargo, nada impide

definir el mismo framework para lenguajes diferentes. Por ejemplo, existe un

framework llamado Biscuit cuyo objetivo es prácticamente convertirse en un “PHP

on Rails”. Eso sí, cuanto más detallado es el framework, más necesidad tendrá de

ceñirse a un lenguaje concreto.

También es posible que el framework defina una estructura para una aplicación

completa, o bien sólo se centre en un aspecto de ella. Siguiendo con los ejemplos,

Ruby on Rails ofrece un marco para el desarrollo completo de una aplicación web,

mientras que JavaServer Faces está más orientado a la interfaz de usuario.

Entre las principales ventajas de usar un framework se tienen:

El programador no necesita plantearse una estructura global de la

aplicación, sino que el framework le proporciona un esqueleto que hay que

“rellenar”.

Facilita la colaboración. Cualquiera que haya tenido que “pelearse” con el

código fuente de otro programador (o incluso con el propio, pasado algún

tiempo) sabrá lo difícil que es entenderlo y modificarlo; por tanto, todo lo

75

que sea definir y estandarizar va a ahorrar tiempo y trabajo a los

desarrollos colaborativos.

Es más fácil encontrar herramientas (utilidades, librerías) adaptadas al

framework concreto para facilitar el desarrollo.

Figura 11. Desarrollo móvil Fuente: Autores

5.2.1. PhoneGhap

Acerca de PhoneGap, básicamente lo que ofrece es poder desarrollar una

aplicación en HTML5, CSS y Javascript y poder ejecutarla de forma nativa en las

distintas plataformas; ofreciendo un único API Javascript para acceder a los

servicios nativos.

76

Figura 12. PhoneGap Build Fuente: Deideaaapp (2014)

De esta forma, por ejemplo, si la aplicación necesita acceder a la cámara del

dispositivo, solo se tiene que crear una página HTML5 que haciendo una llamada

Javascript permita hacer uso de la cámara de cualquier dispositivo

independientemente de su plataforma. Con lo que se consigue ejecutar la aplicación

en todas las plataformas del mercado teniendo solo conocimientos de HTML5,

CSS3 y Javascript. No tiene que aprender Java, ni Objective-C, ni ningún otro

lenguaje; reduciendo drásticamente el tiempo y por tanto el costo de desarrollo.

Inicialmente PhoneGap fue desarrollado por la empresa Nitobi pero tras la

adquisición de ésta por parte de Adobe todo el proyecto se trasladó a la Apache

Software Foundation con el nombre de Apache Cordova, convirtiéndose PhoneGap

en una distribución de Apache Cordova totalmente libre para su uso comercial.

5.2.1. Intel XDK

Es un kit de desarrollo desarrollado por Intel para crear aplicaciones nativas para

teléfonos celulares y tabletas que utilizan tecnologías de la web como HTML5, CSS

y Javascript. Las aplicaciones están compiladas vía on-line en la plataforma

Cordova para hacer aplicaciones cross-platform. En su pagna web indica que ya no

se desarrolla ni actualiza para los nuevos sistemas operativos o dispositivos. (Intel,

2018).

77

El proceso de desarrollo de la aplicación web y móvil siguiendo los pasos de

generarlas a través de un framework, y para este caso existen muchas alternativas

como Phonegap, Rhodes, Titanium, Intel XDK.

Figura 13. Marca Intel XDK Fuente: Intel (2018)

5.3. Ejemplos

Se descarga en primer lugar la herramienta Intel XDK. Esta herramienta funciona

en Windows, Linux y Mac OS y solicitará crear una cuenta de usuario en la web de

Intel XDK, se procede al registro. Luego se instala el framework.

Posteriormente es necesario crear un proyecto HTML5 estándar: este tipo de

plantilla es para proyectos que utilizarán HTML5, JavaScript, JQuery y además se

puede utilizar HTML W3C estándar, pero no admite el uso de Apache Cordova.

Puede ser desplegado como una aplicación empaquetada híbrida en muchas

plataformas como Android, iOS y Microsoft Windows 10 o como un sitio web en un

servidor de hosting.

Después de asignar el nombre del proyecto y el directorio donde se guardará, es

necesario dar clic en Create y llevará a la pantalla de desarrollo.

Posteriormente se selecciona la pestaña EMULATE y podra emular la aplicación

en diferentes dispositivos, como por ejemplo en Iphone 6 con IOS.

78

Figura 14. Compilando en Intel XDK Fuente: Intel (2018)

79

6. Alternativas al software privativo

Con frecuencia se ha traducido el término free como gratis y propietary como

privativo o de pago, llegándose a establecer que la diferencia entre ambos tipos es

una cuestión de dinero, siendo el software libre siempre gratuito y el software

propietario un producto de pago.

La diferencia entre software libre y software propietario tiene bastante de

componente jurídico y se trata esencialmente de una cuestión de garantía de

libertades. Un software será libre cuando permita a los usuarios, que adquirieron el

producto, poder ejecutarlo, copiarlo y estudiarlo, incluso distribuirlo modificado.

Con respecto a los lectores que sigue pensando que el software libre es algo

reservado a personal de perfil muy técnico, la realidad es muy distinta y el software

libre es algo cada vez más asequible. Hablar de software libre no implica hablar

solamente de Linux, el horizonte es muchísimo más amplio y abarca proyectos

como LibreOffice, WordPress o Firefox; de hecho, son muchas las empresas que

miran al software libre como pilar fundamental de sus planes de ahorro operativo y

también como pieza clave de su independencia tecnológica (Hipertextual, 2018).

Los procesos de migración a software libre son cada vez más habituales en las

empresas; procesos que pueden ser completos, cambiando Windows por Linux,

como graduales (en los que se van sustituyendo aplicaciones privativas por

alternativas en software libre). En estos procesos de “migración suave” se suele

analizar el conjunto de aplicaciones que se usan y requieren licencia para buscar

aplicaciones que las puedan reemplazar y permitan ahorrar los costos de licencias

y, de esta forma, ahorrar dinero.

80

Tabla 16. Alternativas al software privativo

Software Privativo Software Libre Plataforma

Microsoft Windows 2000/XP

Ubuntu No aplica

Fedora No aplica

OpenSuse No aplica

Trisquel No aplica

Microsoft Windows Server

Debian No aplica

CentOS No aplica

Ubuntu No aplica

Microsoft Word

OxygenOffice Writer Windows/Linux

OpenOffice.org Writer Windows/Linux

Kword Linux

Abiword Windows/Linux

Microsoft Excel

OxygenOffice Calc Windows/Linux

OpenOffice.org Calc Windows/Linux

Kspread Linux

Microsoft PowerPoint

OxygenOffice Impress Windows/Linux

OpenOffice.org Impress Windows/Linux

Kpresenter Linux

Microsoft Outlook Evolution Linux

Thunderbird Windows/Linux

Microsoft Access

OxygenOffice Base Windows/Linux

OpenOffice.org Base Windows/Linux

Kexi Linux

Microsoft Visio DIA Windows/Linux

Kivio Linux

Microsoft Project

Planner Windows/Linux

Kplato Linux

dotProject Basado en WEB

Open Project Basado en WEB

Onepoint Project Basado en WEB

Microsoft Internet Explorer Firefox Windows/Linux

Konqueror Linux

Adobe Acrobat OpenOffice.org Windows/Linux

PDFCreator Windows/Linux

Adobe Acrobat Reader

xpdf Windows/Linux

KPDF Linux

evince Linux

Adobe Photoshop Gimp Windows/Linux

OpenOffice.org Dibujos Windows/Linux

Adobe Illustrator Xara Extreme Linux

OpenOffice.org Dibujos Windows/Linux

Adobe InDesign / Microsoft Publisher Scribus Windows/Linux

Adobe Audition Audacity Windows/Linux

Adobe Premiere

Cinelerra Linux

Jahshaka Windows/Linux

Kdenlive Linux

Avidemux Windows/Linux

Adobe Flash KToon Linux

Adobe DreamWeaver

Bluefish Linux

Kompozer Windows/Linux

Screem Linux

eGroupWare Basado en WEB

81

Software Privativo Software Libre Plataforma

Microsoft Exchange / Lotus Notes (Herramienta Colaborativa)

OpenGroupWare Basado en WEB

Zimbra Basado en WEB

Lotus Notes / Microsoft SharePoint (Gestión Documental)

Quipux Basado en WEB

Alfresco Basado en WEB

OTRS Basado en WEB

Microsoft ISA Server

eBox Basado en WEB

ClarkConnect Basado en WEB

IPCop Basado en WEB

Endian Basado en WEB

Microsoft VirtualPC / VMWare VirtualBox Windows/Linux

VMWare ESX XEN No aplica

KVM No aplica

ISIS / WINISIS / Biblio2000 KOA, GreenStone Windows/Linux

Microsoft Media Player / Itunes Amarok Linux

Totem Linux

Microsoft MSN

Pidgin Windows/Linux

Kmess Linux

aMSN Windows/Linux

Epifhany

Microsoft Active Directory Samba Windows/Linux

Fedora Directory Server Windows/Linux

3D Studio MAX Blender Windows/Linux

K-3D Windows/Linux

Nero K3b Linux

Brasero Linux

Toad for Oracle TOra Windows/Linux

Microsoft SQL Server / Oracle / Sybase PostgreSQL Windows/Linux

MySQL Windows/Linux

Autocad Qcad Windows/Linux

ArcGIS / Mapinfo

PostGIS Windows/Linux

GRASS Windows/Linux

KOSMO Windows/Linux

gvSIG Windows/Linux

QuantumGIS Windows/Linux

MapWindow Windows

Oracle BI / Balanced ScoreCard Server Pentaho Windows/Linux

Ultimus / Pegasystems / Lombardi Software Intalio, Bonitasoft, ProcessMaker, COBUS BPM

Windows/Linux

Microsoft IIS / Oracle IAS

Apache Tomcat Windows/Linux

JBOSS Windows/Linux

GlassFish Windows/Linux

VisualStudio / Jdeveloper

Eclipse Windows/Linux

Quanta Windows/Linux

NetBeans Windows/Linux

Microsoft .NET Framework

Mono (.NET) Linux

Spring (JAVA) Windows/Linux

CakePHP (PHP) Windows/Linux

Symfony (PHP) Windows/Linux

Zend Framework (PHP) Windows/Linux

Struts, JSF (JAVA) Windows/Linux

HP OpenView / WhatsUpGold Nagios Basado en WEB

Cacti Basado en WEB

82

Software Privativo Software Libre Plataforma

Munin Basado en WEB

Zenoss Basado en WEB

Tivoli Storage Management / HP StorageWorks

Bacula Windows/Linux

Zmanda Windows/Linux

BackupPC Windows/Linux

Alcatel-Lucent Softswitch

Asterisk Linux

Elastix Basado en WEB

Trixbox Basado en WEB

Fuente: Administración Pública de Educador (s.f)

6.1. Sistemas operativos libres

Por lo general, los usuarios de computadoras escuchan hablar de “Software

Libre” o de “Software de Código Abierto”. Aunque existen diferencias sutiles entre

uno y otro concepto, para la gran mayoría son prácticamente sinónimos. De igual

manera, pocos son los que ignoran el término “Linux”, que se refiere al Kernel

empleado por una familia de Sistemas Operativos de código abierto, casi siempre

utilizado en conjunto con las herramientas y librerías del Proyecto GNU. Sin

embargo, hay otros Sistemas Operativos libres, no tan populares para el público en

general, aunque algunos, incluso, tienen más años de vida que el grupo de S.O.

que hoy se conoce como GNU/Linux. (donweb.new, 2017)

Si además de usar programas libres, también el lector está interesado en utilizar

un sistema operativo libre, es posible usar PC-BSD, FreeBSD, OpenBSD,

GNU/KfreeBSD, GNU/Linux, entre otros. Algunos sistemas y algunas distribuciones

de GNU son:

Ubuntu

Kubuntu

Linux Mint

Debian

Mint Debian

Arch Linux

ArchBang

Elementary OS

83

Fedora

RedHat

FAMILIA BSD

El Sistema Operativo Unix original fue creado por los empleados de AT&T Ken

Thompson y Dennis Ritchie en 1969. A partir de 1977, en la Universidad de

Berkeley, en California, se desarrolló una versión de Unix conocida como BSD

(Berkeley Software Distribution), que partió de la arquitectura y la base de código

de este Unix primigenio. Estas versiones de Unix estaban pensadas para ejecutarse

en grandes equipos multiusuario a los que se conectaban cientos (e, inclusive,

miles) de usuarios simultáneamente.

OPENSOLARIS

En el año 1982, Sun, el coloso del software corporativo, famoso por crear y

mantener el lenguaje Java, lanzó su propia versión de Unix, SunOS, basada en BSD

Unix. Casi diez años después, decidida a producir un reemplazo más moderno para

su SO corporativo, le compró a Novell, dueña del copyright del Unix original

desarrollado por AT&T, los derechos para poder emplear la base de código de Unix

System V Release 4 y partir de allí para alumbrar la nueva generación de SunOS,

que fue bautizada como Solaris. Tanto SunOS como Solaris eran SO propietarios y

costosos, apuntados exclusivamente al mercado empresarial.

6.2. Ejemplos

Ubuntu puede instalarse como cualquier sistema en un equipo compatible. Este

puede ejecutarse como “Live CD” sin necesidad de tocar sistemas existentes para

pruebas o solución de problemas. Además, puede cargarse en una máquina virtual

en equipos con Windows, OS X o Linux o puede actualizarse en máquinas con

Ubuntu utilizando un simple comando en la terminal.

84

Para crear un Live Cd en Windows la forma más recomendada es utilizar un

programa externo, tal como Universal USB Installer. A continuación, se presentan

alguno pasos:

Ejecutar Universal USB Installer, marcando la distribución que se va a

montar.

Seleccionar la ISO descargada y elegir la letra de unidad donde está

conectado el USB, donde se quiera montar Linux Ubuntu.

Opcionalmente se puede reservar espacio para guardar cambios

permanentes (configuraciones, documentos, entre otras opciones).

85

Capítulo III

Imp

lan

taci

ón

de

soft

war

e lib

re

Desarrollo en software libre

Gestion de proyectos en software libre

Documentación

Implantación de software libre

86

87

CAPÍTULO 3: IMPLANTACIÓN DE SOFTWARE

LIBRE

Introducción

En el presente capítulo se abordan los temas referentes a la implantación de

software libre en las organizaciones. Para tal fin, se pretende entrar en la realidad

de diversas instituciones públicas y privadas que han optado por el software libre,

bien sea como base de su negocio, en el caso de empresas privadas, como política

institucional o en el caso de las instituciones públicas.

Por supuesto, estos casos no pretenden dar una visión exhaustiva del panorama

de la implantación del software libre, algo que no sería posible en solamente un

libro. La idea central del capítulo es mostrar la posibilidad de llevar a la práctica el

software libre más allá de los aspectos concretos. Por lo tanto, en este material

cobra especial relevancia todo lo relacionado con la integración de diversos

elementos, desde los tecnológicos y prácticos, pasando por los económicos y de

gestión, hasta los éticos y sociales.

88

6. Desarrollo en software libre

El conocimiento profundo de un lenguaje de programación parte no sólo del

entendimiento de su léxico, de su sintaxis y de su semántica, sino que además

requiere la comprensión de los objetivos que motivaron su desarrollo.

Los programas descritos en un lenguaje de programación como C no pueden ser

ejecutados directamente por ninguna máquina. Por tanto, es necesario disponer de

herramientas (es decir, programas) que permitan obtener otros programas que

estén descritos como una secuencia de órdenes que sí que pueda ejecutar

directamente algún computador.

En este sentido, se describirá un entorno de desarrollo de software de libre

acceso disponible tanto en plataformas Microsoft como GNU/Linux. Dado que las

primeras requieren de un sistema operativo que no se basa en el software libre, la

explicación se centrará en las segundas.

6.1. Entorno de Programación GNU/C

El sistema operativo GNU/Linux ha supuesto una auténtica revolución en el

mundo del software libre. Como consecuencia de su expansión, el desarrollo de

software en entornos GNU se ha multiplicado por diez en los últimos años. Gran

cantidad de compañías que desarrollaban sus productos en entornos propietarios

han migrado a plataformas libres.

En el desarrollo de software de libre acceso es importante emplear herramientas

(programas) que también lo sean, pues uno de los principios de los programas de

libre acceso es que su código pueda ser modificado por los usuarios. (Aycart, Gibert

& Hernández, 2006)

Para el desarrollo de programas libres se empleará, pues, un ordenador con el

sistema operativo Linux y el compilador de C de GNU (gcc). Aunque se puede

89

emplear cualquier editor de textos ASCII, parece lógico emplear Emacs. Un editor

de textos ASCII es aquél que sólo emplea los caracteres definidos en la tabla ASCII

para almacenar los textos. (En el Emacs, la representación de los textos se puede

ajustar para distinguir fácilmente los comentarios del código del programa en C, por

ejemplo).

En los apartados siguientes se presentará cómo emplear el compilador gcc y se

revisará muy sucintamente la organización del código de los programas en C.

Un primer programa en C

Un programa es un texto escrito en un lenguaje simple que permite expresar una

serie de acciones sobre objetos (instrucciones) de forma no ambigua. Para escribir

un programa en C, es suficiente con ejecutar el emacs:

$ emacs hola.c &

Ahora ya podemos escribir el siguiente programa en C:

#include <stdio.h>

main( )

{

printf( "Hola a todos! \n" );

} /* main */

El editor de textos emacs dispone de menús desplegables en la parte superior

para la mayoría de operaciones y, por otra parte, acepta comandos introducidos

mediante el teclado. A tal efecto, es necesario teclear también la tecla de control

(“CTRL” o “C-”) o la de carácter alternativo junto con la del carácter que indica la

orden.

Una vez editado y guardado el programa en C, hay que compilarlo para obtener

un fichero binario (con ceros y unos) que contenga una versión del programa

traducido a lenguaje máquina. Para ello, hay que emplear el compilador gcc:

$ gcc –c hola.c

90

Con ello, se obtendrá un fichero (hola.o), denominado fichero objeto. Este archivo

contiene ya el programa en lenguaje máquina derivado del programa con el código

C, llamado también código fuente. Pero desgraciadamente aún no es posible

ejecutar este programa, ya que requiere de una función (printf) que se encuentra en

la biblioteca de funciones estándar de C.

$ gcc hola.o –o hola

Habitualmente, el proceso de compilación y enlazado se hacen directamente

mediante:

$ gcc hola.c –o hola

En caso cumplir el proceso a cabalidad, se dispondrá de un programa ejecutable

en un fichero llamado hola que saludará vehementemente cada vez que se ejecute:

$ ./hola

Hola a todos!

$

6.2. Construcción de Software en GNU/C

Para empezar a trabajar, es necesario las autotools que son un conjunto de

utilidades para automatizar la compilación de programas en diferentes entornos.

Permiten al desarrollador especificar unas reglas generales para la compilación y

que el resto de la configuración sea detectado en la máquina destino, simplificando

la tarea de portabilidad entre sistemas y en general la creación de ficheros Makefile

de un proyecto.

Este conjunto de herramientas - autoconf, automake y libtool - pretende facilitar

la configuración de software que se distribuye en código fuente, facilitando al usuario

la instalación del mismo. Algunas de las posibilidades que permite un programa que

utilice de manera correcta estas utilidades para detectar el entorno de compilación

son:

91

Detectar y configurar las rutas de librerías y programas que se necesita para

compilar.

Especificar diferentes opciones de configuración del código fuente que se

quiere compilar.

Especificar la ruta a cualquier elemento necesario para la compilación de un

software.

Generar toda una serie de ficheros Makefiles, con una serie de regla

estándar.

Facilitar la compilación cruzada de herramientas.

Un proyecto de software constará de una serie de ficheros con código fuente y

una serie de pasos para convertirlos en programa ejecutable.

Estos pasos, bajo autotools, se dividen en dos partes principales:

1. Por un lado, un fichero Makefile.am a partir del cual se creará el Makefile

final siguiendo el cual será compilado el código fuente.

2. Por otro, un fichero configure.in o configure.ac que servirá de plantilla para

crear un fichero de script de shell con los pasos necesarios para detectar

y establecer la configuración necesaria para que el programa sea

compilado e instalado sin problemas.

También será el encargado de crear los Makefile necesarios siguiendo el

Makefile.am inicial.

Se presenta el funcionamiento con un programa de ejemplo extremadamente

simple:

nul.c

void main() {}

Se crea un Makefile.am sencillo:

Makefile.am

bin_PROGRAMS = nul

92

nul_SOURCES = nul.c

En este ejemplo sólo crearemos un binario nul a partir del fichero de código fuente

nul.c.

Simplemente ejecutando el autoscan se obtiene un fichero configure.ac base:

configure.scan

AC_PREREQ(2.59)

AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)

AC_CONFIG_SRCDIR([nul.c])

AC_CONFIG_HEADER([config.h])

# Checks for programs.

AC_PROG_CC

AC_CONFIG_FILES([Makefile])

AC_OUTPUT

Este fichero es recomendable editarlo para adecuarlo al proyecto que se esta

desarrollando:

configure.ac

AC_INIT(nul, 0.1)

AM_INIT_AUTOMAKE(nul, 0.1)

AC_CONFIG_SRCDIR([nul.c])

# Checks for programs.

AC_PROG_CC

AC_CONFIG_FILES([Makefile])

AC_OUTPUT

Para compilarlo a partir de este punto sólo hacen falta ejecutar

./configure y después make all:

6.3. Comunidades Linux

La comunidad del software libre está formada por usuarios y desarrolladores de

software, así como por los partidarios del movimiento de software libre.

93

Los objetivos de una comunidad de desarrollo de software es aglutinar una serie

de individuos cuya intención es promover el acceso y distribución de una

herramienta software permitiendo la libertad de su uso, estudio, copia, modificación

y redistribución a todo aquel que lo desee. La cooperación entre estas personas en

todos los ámbitos de la producción del software (usuarios, desarrolladores,

documentadores, testers, traductores, entre otros) permite generar las sinergias

necesarias para conseguir una mejora sustancial de la calidad del software, así

como de una mayor difusión y sostenibilidad en el tiempo, y primando el beneficio

de la sociedad sobre cualquier otro.

De forma general, las ventajas que presenta el desarrollo de software Open

Source son:

Uso de tecnologías seguras y actuales, frente al software privativo que

suele sobreexplotar económicamente la tecnología elegida y por tanto, va

sufriendo obsolescencia a un ritmo más elevado.

Proyectos con alto nivel de crecimiento. La aportación de la comunidad

permite ampliaciones constantes del software.

Proporciona al usuario independencia en cuanto a la elección del

proveedor del servicio.

Permite hacer uso del software de forma individual sin la necesidad de

ningún otro intermediario.

Los costes de desarrollo se difuminan entre los voluntarios, por lo que

suponen un reducido (o nulo) TCO para el usuario final, y, por

consiguiente, un retorno de la inversión (ROI) más rápido.

Mayores garantías de continuidad del software. Al disponer una extensa

red de desarrolladores y usuarios done la “supervivencia” del software no

está condicionada a la subsistencia de una única empresa.

Las comunidades de software libre son más sanas y amplias que las del

software propietario, que en ocasiones son incluso inexistentes.

94

Los desarrollos no están condicionados a criterios exclusivamente de

rentabilidad, sino que cumplen una función más amplia y pueden ser

solicitados y realizados por cualquiera.

Abre todas las posibilidades a la customización para el usuario final, frente

a las restricciones del software propietario.

El desarrollo Open Source atrae talentos al proyecto, no siendo tan

sensible como el privativo a la pérdida de recursos humanos clave en el

proyecto.

6.4. Ejemplos

En Colombia, se tiene la comunidad de Ubuntu Colombia, cuya misión es

promover el uso de software, formatos y licencias libres en Colombia,

específicamente por medio de Ubuntu. Y su visión es la posicionar a Ubuntu-co

como uno de los equipos de habla hispana líderes en la comunidad mundial Ubuntu

por medio de su participación en actividades de desarrollo, traducción, eventos,

triaging y demás mecanismos que permitan mejorar la experiencia Ubuntu para el

usuario de habla hispana. En cuanto a los objetivos son:

Aumentar la visibilidad y el uso de Ubuntu Linux en Colombia, por medio

de eventos y comunicaciones.

Reunir al mayor número de usuarios de Ubuntu en una comunidad activa

y amigable.

Liderar proyectos específicos que beneficien a los usuarios colombianos

de Ubuntu en Colombia y en el exterior.

95

7. Gestión de proyectos en software libre

La gestión de proyectos es la disciplina que agrupa y ordena el conjunto de tareas

o actividades destinadas a obtener objetivos establecidos. Esto incluye la

planificación, definición, ordenamiento y gestión de las actividades que formarán el

proyecto software.

En su primera expresión, la buena gestión de un proyecto es la que es capaz de

reducir al mínimo las posibilidades de fallo de éste durante todo el transcurso del

mismo. Pudiendo entenderse como fallo, la no consecución de los requisitos

iniciales del proyecto, la inviabilidad económica del mismo, un resultado que impida

mantenerlo o le impida evolucionar.

Muy comúnmente, la gestión del proyecto se lleva a cabo por el director del

proyecto, normalmente una sola persona que no tiene por qué participar

activamente en las actividades del mismo, pero que sí que se ocupa de monitorizar

su progreso y de la interacción entre los diferentes grupos que intervienen en éste

para minimizar el riesgo de fallo del proyecto.

7.1. Forjas o Repositorios

Las forjas de software son plataformas web que permiten el desarrollo de

software de forma colaborativa por medio de Internet. Estas forjas aglutinan una

serie de aplicaciones con interfaz web que permiten alojar múltiples proyectos o

desarrollos. Los desarrolladores que se dan de alta en estas plataformas como

contribuidores de los proyectos allí alojados pueden utilizar diversas herramientas

desarrollo de software y de gestión de proyectos.

Estas forjas son especialmente conocidas y utilizadas en el desarrollo de

proyectos de software libre (u open source), aunque su uso no se restringe

únicamente a este tipo de proyectos. Son muchas las organizaciones que usan

forjas para mejorar sus procesos de colaboración en el desarrollo de software.

96

Todas estas plataformas proporcionan una serie de herramientas que ayudan a

los desarrolladores de software a trabajar en los proyectos alojados en las forjas de

forma más ágil, coordinada y eficiente.

En este apartado se realizará un recorrido por las principales herramientas y

funcionalidades que ofrecen estas forjas, y como es posible aprovecharlas para

mejorar los procesos de desarrollo colaborativo de software. Así mismo se realizará

un recorrido por las principales alternativas existentes hoy en días, tanto si

deseamos instalarlas internamente en nuestras organizaciones como si deseamos

utilizar repositorios en la nube.

Las tareas colaborativas mediante sistemas abiertos y el desarrollo del concepto

de software público sin duda son muy importantes. Su desarrollo y extensión en

todos los niveles del Estado impulsará nuevos procesos y generará mejores

resultados desde un punto de vista técnico y económico.

No solo en el Estado los sistemas abiertos cumplen un rol importante, sino que

además en ámbitos privados empresas e instituciones se vuelcan a este tipo de

sistemas. Cada vez existen más oferentes que brindan sus soluciones informáticas

en modelos abiertos apoyados en las leyes de propiedad intelectual.

El software libre es totalmente posible y compatible dentro del esquema de la

propiedad intelectual actual, solo hay que utilizar las herramientas disponibles. Los

titulares deciden la extensión y el reconocimiento de los derechos dentro de las

licencias y las mismas serán válidas para los que las usen o modifiquen.

El desarrollo del software libre permite además darle un encuadre filosófico al

asunto quizás más importante que el económico, en el caso que las decisiones se

tomen según los parámetros de los propios interesados permite una libertad

tecnológica que no es posible en los sistemas de software privativo.

97

Entre los proveedores de Software para Repositorios Institucionales se

encuentran diferentes opciones que pueden ser ajustados a las necesidades.

Dentro de las plataformas más conocidas para crear Repositorios Institucionales

se encuentran:

Tabla 17. Plataformas más reconocidas para crear repositorios

Repositorio Descripción del repositorio

Archimede

Software de código abierto para RI. Tiene una perspectiva multilingüe (inglés, francés y español). La interfaz del software es independiente y no está dentro del código. Permite a los usuarios cambiar de un idioma a otro mientras se busca y encuentra contenido.

Bepress El costo incluye el software, la implementación de clientes, infraestructura, prácticas, servidor, la conservación, apoyo a distancia, apoyo técnico y actualizaciones de software.

CDSware Está diseñado para hacer funcionar un servidor de pre-impresión electrónica, catálogo de biblioteca en línea o sistema de documentos en la web.

CONTENT Proporciona herramientas desde la organización y dirección a la publicación y búsqueda de colecciones digitales en internet. También ofrece herramientas para archivar colecciones de cualquier tamaño.

DSpace Está diseñado para capturar, almacenar, ordenar, conservar y redistribuir la producción intelectual y de investigación de una Universidad en formato digital.

EPrints Software gratuito diseñado para RI de edición electrónica.

Fedora Sirve para crear bibliotecas digitales, RI y otros sistemas para que sean interoperables basadas en la web.

Greenstone Es un software para crear y distribuir colecciones de bibliotecas digitales.

Open Repository

Proporciona un servicio de software comercial para crear RI. Basado en el software de DSpace ofrece múltiples ediciones con distintos niveles de apoyo y servicio.

7.2. Control de versiones

Los sistemas de control de versiones funcionan como la columna vertebral

permitiendo a grupos de personas trabajar de forma conjunta en el desarrollo de

proyectos, frecuentemente a través de Internet. Son sistemas que señalan las

diferentes versiones para identificarlas posteriormente, facilitan el trabajo en

paralelo de grupos de usuarios, indican la evolución de los diferentes módulos del

proyecto, y disponen de un control detallado de los cambios que se han realizado;

funciones que son indispensables durante la vida del proyecto.

98

Estos sistemas no sólo tienen aplicación en el desarrollo del software, sino que

además son ampliamente utilizados en la creación de documentación, sitios web y

en general cualquier proyecto colaborativo que requiera trabajar con equipos de

personas de forma concurrente.

En el mundo del software propietario, los sistemas de control de versiones han

sido tradicionalmente usados para gestionar equipos de desarrollo en entornos

corporativos cerrados. Con el auge de Internet y el avance del software libre, se

diseñaron sistemas abiertos que permitieran trabajar simultáneamente a miles de

personas distribuidas en diferentes regiones del mundo en un mismo proyecto a

través de Internet.

CVS (concurrent versions system) es el programa más utilizado en el mundo del

software libre para el control de versiones de software. Basado en el modelo cliente-

servidor, existen versiones del programa para multitud de plataformas. Su solidez y

su probada eficacia, tanto en grupos pequeños de usuarios como en grandes, le

han convertido en la herramienta que utilizan proyectos de software libre de éxito

reconocido como Mozilla, OpenOffice.org, KDE o GNOME, por mencionar sólo

algunos.

Las funciones principales de los sistemas de control de versiones son

proporcionar un histórico de los cambios de los archivos de un proyecto y permitir

recuperar una determinada versión del archivo en cualquier momento. Se invita al

lector a suponer que cuenta con la versión 1.00 de un archivo de instrucciones de

instalación de un programa. (Perez & Ribas, 2012)

Con este archivo de texto se le añade varios párrafos que indican los pasos

detallados que hay que seguir para instalar nuestro programa en versiones de UNIX

BSD y esta nueva versión con instrucciones para BSD se convierte en la versión

99

1.01 del documento. A medida que el proyecto sigue avanzando, este archivo

continúa evolucionando.

Con un sistema de control de versiones, en cualquier momento es posible obtener

la versión 1.00 o 1.01 sin necesidad de mantener copias separadas de los archivos.

Los sistemas de control de versiones se basan en mantener todos los archivos

del proyecto en un lugar centralizado, normalmente un único servidor. Aunque

también hay sistemas distribuidos, donde los desarrolladores se conectan y

descargan una copia en local del proyecto. Con ella, envían periódicamente los

cambios que realizan al servidor y van actualizando su directorio de trabajo que

otros usuarios a su vez han ido modificando.

Los sistemas de control de versiones de código están integrados en el proceso

de desarrollo de software de muchas empresas. Cualquier empresa que tenga más

de un programador trabajando en un mismo proyecto acostumbra a tener un sistema

de este tipo, y a medida que crece el número de personas que se involucran en un

proyecto, más indispensable se hace un sistema de control de versiones.

7.3. Ejemplos

En este aspecto se tiene el caso de Subversion que fue lanzado en el año 2000

bajo una licencia Apache/BSD. Subversión es uno de los sistemas más legendarios,

sin embargo, su uso ha ido decreciendo con el paso de los años. Hay quienes

afirman que está cerca del final de su ciclo de vida, pero todavía miles de empresas

lo usan en el día a día.

Otro software es Git, desarrollado por Linus Torvals, el mismo padre del kernel

Linux, en el año 2005. Git surge como alternativa a BitKeeper, un control de

versiones privativo que usaba en ese entonces para el kernel. Es liberado bajo una

licencia GNU GPLv2. Se ha convertido en uno de los más usados alrededor del

mundo.

100

También se tiene el caso de Mercurial cuyo proyecto nació en 2005 y su

desarrollo comenzó a pocos días despues de Git, por esto y por algunas similitudes

en sus características es que muchos los consideran sistemas hermanos. Mercurial

fue desarrollado por Matt Mackall, y al igual que Linus, Matt buscaba una alternativa

a BitKeeper para el control de las versiones del kernel Linux. También es liberado

bajo una licencia GNU GPL v2.

101

8. Documentación

En este apartado se abarcan los distintos aspectos relacionados con los sistemas

de documentación más aceptados dentro del mundo del software libre y de fuente

abierta. La documentación en el ámbito de software juega un papel importantísimo

como complemento indispensable de los programas informáticos. Se plantean las

diferentes motivaciones que llevan a tener sistemas de documentación libre y se

presentan los distintos tipos de licencias con los que la documentación es

distribuida. También se analizan cada uno de los sistemas de documentación en

forma particular que le permiten crear documentos básicos.

En particular se describe desde la simple documentación de una página de

manual, pasando por documentación de desarrollo, documentación de breves

manuales, hasta la posibilidad de escribir libros completos; todo con carácter

profesional y útil para obtener cooperación, como se espera en el mundo del

software libre.

Un sistema o software pobremente documentado carece de valor, aunque haya

funcionado bien en alguna ocasión. En el caso de programas pequeños y poco

importantes que sólo se utilizan durante un corto periodo de tiempo, unos cuantos

comentarios en el código podrían ser suficientes. No obstante, la mayoría de los

programas cuya única documentación es el código no tienen aceptación y es

imposible mantenerlos. Dedicar un poco de esfuerzo a la documentación, incluso

dentro de los límites de un pequeño proyecto, constituye una muy buena práctica.

Aprender a documentar software es una tarea complicada y exige un criterio de

ingeniería maduro. Documentar escuetamente es un error habitual, pero el otro

extremo puede resultar igual de perjudicial, por cuanto si escribe documentaciones

extensas, éstas atosigarán al lector y constituirán una carga a la hora de

mantenerlas. Es esencial documentar sólo los asuntos correctos. La documentación

102

no sirve de ayuda para nadie si su extensión desanima a la gente a la hora de leerla

(Aycart, Gibert & Hernández, 2006).

Una parte fundamental del software es la documentación que lo acompaña. La

documentación es una pieza tan importante de un programa que en ocasiones éste

será inútil sin ella. La documentación del software está dividida en distintos tipos de

acuerdo a lo que ella documente, y generalmente existe:

Documentación de desarrollo:

Análisis, requisitos, especificaciones

Diagramas

Comentarios en códigos

Documentación de pruebas, entre otras.

Documentación de programa:

Ayuda en línea

Página de manual (man)

Documentación de usuario:

Manual de uso

Libros y tutoriales

Guías de enseñanza o autoaprendizaje

Obviamente, ésta es una lista reducida de las posibilidades de documentación en

torno a un software determinado y la documentación que se utilizará dependerá del

alcance del software en cuestión.

Otra característica de la documentación del software es que la misma debe

acompañar el desarrollo o evolución del software que documenta. Es decir, de la

misma forma que el software avanza y se desarrolla, la documentación debe

avanzar y desarrollarse conjuntamente, de manera que la última versión de la

documentación refleje las características y el estado de la última versión del

software.

103

Todo software, ya sea libre o privativo, está acompañado por un contrato de

licencia. La documentación que acompaña al software resulta, al igual que éste, en

una producción del intelecto humano, por lo cual le son aplicables las leyes de

derechos de autor o de copyright. Por este motivo, para poder copiar, modificar o

distribuir la documentación, es necesario tener el permiso del autor de dicha

documentación o tener un documento que le otorga estos permisos. Este permiso

se corporiza en una licencia para la documentación.

La licencia para la documentación de software libre generalmente es la misma

que la del software al que acompaña, aunque existen algunos documentos

publicados bajo licencias específicas para documentación como la free

documentation licence (FDL) de la Free Software Foundation, aunque últimamente

mucha documentación está siendo entregada con la licencia conocida como

creative commons.

Tan importante como tener las libertades para la documentación, es documentar

en formatos libres, de manera que, una vez que su documento llegue a los lectores,

pueda ser accedido, modificado y vuelto a distribuir con todas las libertades, sin

depender de restricciones impuestas al software de acceso o modificación. Esto se

logra documentando en formatos libres.

Los formatos libres más usados. txt, rtf, html, TeX, XML, etc. Están avalados por

organizaciones que establecen los estándares para cada uno de ellos.

8.1. Ejemplos

La documentación para el usuario constituye en un elemento de consulta para

toda aquella persona que va a usar el programa por primera vez o que trata de saber

si el programa servirá a sus objetivos. Igualmente es útil para usuarios que ya

realizan un manejo básico y quieren profundizar hacia un conocimiento avanzado.

Una documentación completa contendría:

104

Portada con el nombre del programa, versión y autor o autores.

Índice.

Descripción muy breve de las funciones y posibilidades del programa.

Descripción breve del método de cálculo principal.

Explicación breve de cómo debe usarse el programa y de los datos de

entrada, opciones y resultados.

Ejemplos paso a paso de uso del programa en número suficiente para

comprender las posibilidades que se brindan.

Diagrama de flujo del programa de carácter sintético y descriptivo.

Especificación detallada de todas las opciones contenidas en menús.

Especificación detallada de todos los cálculos, principales y secundarios

La extensión de la documentación para el usuario será variable en función de la

complejidad y características del programa. Estas pueden ir desde un párrafo para

programas muy sencillos y de fácil uso hasta centenares de páginas para programas

comerciales complejos. Los puntos contenidos en la documentación también son

variables, siendo los enumerados anteriormente una orientación. Para programas

sencillos puede reducirse a un título, una explicación breve del funcionamiento,

entradas y salidas y un ejemplo de uso.

8.2. Ejercicios de reflexión

TeX es un programa de Donald E. Knuth, que está orientado a la composición e

impresión de textos y fórmulas matemáticas. LaTeX es un paquete de macros que

permite al autor de un texto componer e imprimir un documento con calidad,

empleando patrones definidos. Originalmente, LaTeX fue escrito por Leslie Lamport

y utiliza TeX como su elemento de composición. LaTeX es una potente herramienta

de procesamiento de textos científicos que aún no ha sido sustituida por los

modernos editores de texto en el mundo de las editoriales científicas y académicas.

Hay quienes afirman que LaTeX es, probablemente, el mejor procesador de textos

del mundo, pero tiene el inconveniente de que no se trabaja de forma WYSIWYG

105

(What you see is what you get) lo que dificulta en gran medida su uso por parte de

personas acostumbradas a editores de texto.

Sobre la instalación de LaTeX no se presentarán detalles, ya que

afortunadamente forma parte de los paquetes de las distribuciones de GNU/Linux

más usadas actualmente, por lo que la instalación es completamente automática.

106

107

CONCLUSIONES

• El conocimiento de la historia del software libre permite identificar el concepto

filosófico que este enmarca respecto de la libertad. Así mismo la identificación

de las libertades del software propicia conocer si es software libre o de código

abierto.

• La propiedad intelectual es la génesis de los derechos legales sobre el

software. Además, la licencia son el elemento clave para identificar el carácter

del software, sí es libre, de código abierto o de tipo privativo.

• Los sistemas operativos son la base fundamental de todos los sistemas

informáticos, más aún en esta época cubierta por múltiples dispositivos

conectados a la red. Por esta razón, estas usando S.O. libres y no sabes,

ejemplo Android que deriva de Linux.

• El conocimiento de los entornos de programación con lenguajes libres usando

los framework permite aplicar las herramientas de desarrollo de software libre

en la construcción de aplicaciones.

• En resumen, programar en HTML dinámico, usando diferentes librerías tanto

en el Frontend como para el Backend, para posteriormente compilar en un

framework, permitirá reducir tiempo, costos y obtener aplicaciones móviles

para diferentes plataformas. En síntesis, un solo proyecto, un solo diseño, una

sola programación y app para diferentes sistemas operativos.

• El conocimiento de las aplicaciones que son alternativas a las privativas

permite la apropiación de esas herramientas con las conocidas ventajas de

carácter técnico y económico. Además, el uso de los sistemas operativos libres

conlleva a conocer aspectos como la seguridad y la facilidad de

personalizarlos.

108

• Hay dos motivaciones comunes para desarrollar un programa libre. Una es

que no hay ningún programa que haga esa tarea. Lamentablemente, aceptar

el uso de un programa que no es libre elimina esa motivación. La otra es el

deseo de ser libre, que motiva a la gente a escribir sustitutos libres de

programas privativos. En casos como estos, ese motivo es el único que puede

funcionar. Simplemente usando un sustituto libre nuevo y sin terminar, antes

de que técnicamente sea comparable con el modelo que no es libre, se puede

ayudar a animar a los desarrolladores libres a perseverar hasta que el

reemplazo llegue a ser mejor.

• Desde hace unos años los repositorios digitales se han convertido en un tema

de mucha importancia y el concepto del mismo es muy amplio, se pueden

considerar como un depósito o archivo de un sitio web centralizado donde se

almacena y mantiene información digital, habitualmente bases de datos o

carpetas informáticas. Cualquier contenido digital, una imagen, un documento

Word o Excel, un documento digitalizado, un libro electrónico, una página

HTML, etc. forman parte del “repositorio digital” de una organización. Por otra

parte, el control de versiones pareciera ser un tema simple y sin importancia;

sin embargo, en muchos proyectos puede ser motivo de errores que pudieran

evitarse con un registro en forma de las versiones conforme se van generando.

• La documentación de los programas es un aspecto sumamente importante,

tanto en el desarrollo de la aplicación como en el mantenimiento de la misma.

• La documentación de un programa empieza una vez que la construcción del

mismo y finaliza justo antes de la entrega del programa o aplicación al cliente.

Así mismo, la documentación que se entrega al cliente tendrá que coincidir

con la versión final de los programas que componen la aplicación.

• Una vez concluido el programa, los documentos que se deben entregar son

una guía técnica, una guía de uso y de instalación.

109

GLOSARIO

Control de versiones: Gestión de cambios que se realizan en los proyectos.

Copyleft: Todas las versiones modificadas o extendidas deben seguir siendo

libres.

Forja: repositorio de los proyectos de software libre.

Framework: Marco completo para el desarrollo de una aplicación.

Licencia: Es el documento que entrega el licenciante al usuario con los derechos

extensivos.

Repositorio: Lugar donde son almacenados los proyectos de software.

Software libre: Se refiere a la libertad que tiene el usuario para estudiar, copiar,

modificar y redistribuir los programas.

Software de código abierto: Son los que forman parte de un dominio público.

Software propietario: Programa informático en el que los usuarios tienen

limitadas las posibilidades de modificar.

110

111

BIBLIOGRAFÍA

Administración Pública de Educador (s.f). Alternativas al software privativo.

Recuperado de http://www.administracionpublica.gob.ec/alternativas-de-

software-libre-para-software-privativo

Aycart, D., Gibert, M., & Hernández, M. (2006). Ingeniería de software en entorno

de SL. Barcelona: UOC.

Bain, M., Gallego, M., Martínez, M., & Rius, J. (2012). Introducción a los Aspectos

Legales del Software Libre. Barcelona: UOC.

Bain, M., Gallego, M., Martinez, M., & Rius, J. (2012). Propiedad intelectual;

Derechos de Autor y Copyright. Barcelona: UOC.

Dart, S., Ellinson, P. & Feile, P. (1987) Software Development Environments IEEE.

IEEE Computer Society Press, 20(11), 18 – 28. doi:

10.1109/MC.1987.1663413

Deideaaapp (2014). ¿Sabes qué es Phonegap y Phonegap Build? Recuperado de

https://deideaaapp.org/sabes-que-es-phonegap-y-phonegap-build/

Donweb.news (2018). Sistemas operativos Libres. Recuperado de

http://donweb.news/sistemas-operativos-libres/

Eclipse (2018). Eclipse Project Handbook. Recuperado de

https://www.eclipse.org/projects/handbook/

EcuRED (2018). El IDE NetBeans. Recuperado de

https://www.ecured.cu/NetBeans: https://www.ecured.cu/NetBeans

112

Free Software Foundation. (2017). Por qué el «código abierto» pierde de vista lo

esencial del software libre. Recuperado de

https://www.gnu.org/philosophy/open-source-misses-the-point.es.html

González, J., Seoane, J., & Robles, G. (2003). Introducción al Software Libre.

Barcelona: UOC.

Hipertextual (2018). Alternativas en software libre a aplicaciones que usamos a

diario (V). Recuperado de

https://hipertextual.com/archivo/2013/12/alternativas-software-libre-

aplicaciones-habituales/.

Intel (2018). Intel® XDK Documentation. Recuperado de

https://software.intel.com/es-es/intel-xdk.

Java. (2018). Java y Tu, descargar hoy. Recuperado de https://www.java.com/es.

Jorbe, J. & Suppi, R. (2012). Administración Avanzada de Sistemas GNU/Linux.

Barcelona: UOC.

OMPI (2018). World intelectual property organization. Recuperado de

http://www.wipo.int.

Perez, J., & Ribas, L. (2012). Introducción al Desarrollo de Software Libre.

Barcelona: UOC.

TIOBE (2017). TIOBE Index for October 2018. October Headline: Swift is knocking

at the door of the TIOBE index top 10. Recuperado de

https://www.tiobe.com/tiobe-index/

113

114

978-958-5467-29-3