Editorial Universidad Manuela Beltrán · Gerencia de Multimedia. Daniela Suarez Porras Corrección...
Transcript of Editorial Universidad Manuela Beltrán · Gerencia de Multimedia. Daniela Suarez Porras Corrección...
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
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
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
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.
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
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.
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
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.
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
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.
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.
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/