Software Libre

Charlas en Jornadas Informáticas de ET 36 en 2011

Estas son dos charlas que di el 30 de agosto de 2011 para alumnos del ciclo superior de informática de la escuela  ENET 36, de Capital Federal.

Las charlas fueron sobre aplicaciones educativas de KDE y sobre cómo contribuir a un proyecto global.

Aplicaciones educativas en KDE

Video de Como involucrarse en un proyecto global - Parte 1

Video de Cómo involucrarse en un proyecto global - Parte 2

La filmación de las charlas y la oportunidad de dar la charla, fueron responsabilidad de Z37a.

Gracias!

Tutoriales

Configuración de ambiente de desarrollo JEE 1.5 en Kubuntu 9.04

Paquetes necesarios

  • kdesvn
  • kdiff3
  • eclipse-jdt
  • eclipse-cdt
  • firefox
  • svn
  • sun-java5-jdk
  • maven2
  • yakuake (línea de comandos más poderosa y versátil que la que viene ya instalada)

Para instalar paquetes o aplicaciones, ejecutar:

sudo apt-get install <paquete1> <paquete2> <paqueten>

Verificar que ant y maven hayan sido instalados como parte de la instalación de Eclipse.

Utilizar Java5 de Sun como default

Para listar los runtimes de Java instalados:
sudo update-java-alternatives -l

Para elegir el runtime:

sudo update-java-alternatives -s java-1.5.0-sun

Instalación de Eclipse 3.5

mkdir -p ~/bin/packages
cd ~/bin/packages

Bajar Eclipse JEE desde http://www.eclipse.org/downloads/ y copiar en bin/packages

tar xzvf eclipse-jee-galileo-SR1-linux-gtk.tar.gz
mv eclipse eclipse3.5

Crear un archivo ~/bin/eclipse y ponerle el siguiente contenido:

#/bin/bash
`~/bin/packages/eclipse3.5/eclipse -vmargs -Xms128M -Xmx512M -XX:PermSize=128M -XX:MaxPermSize=512M &> /dev/null` &

Dar permisos de ejecución al archivo:

chmod u+x ~/bin/eclipse

Agregar un acceso al menú para ejecutar este archivo.

Para instalar los plugins de C++, agregar este repositorio a los sitios de Eclipse y bajar los plugins desde ahí: http://download.eclipse.org/tools/cdt/releases/galileo

Verificar que Eclipse apunte al jre de Java 5 de Sun.

Configuración de Shares de red

  • Desde Dolphin, ir a Network, Samba Shares,  dominio, y elegir el servidor correspondiente.
  • Click derecho sobre el share, click en Add to Places.
  • Con esto crea un acceso directo en la barra de navegación izquierda.
  • Si se quiere, hacer click derecho para cambiar las propiedades, incluyendo el nombre del link.

Acceso para ver archivos por ssh

  • Abrir Konqueror
  • En la barra de navegación , poner fish://usuario@servidor:port
  •  

Si el port es 22, no hace falta, ya que es el predeterminado para ssh.
Si se quiere abrir una línea de comando por ssh, reemplazar fish por ssh.

En la ventana que se abre se puede operar casi normalmente como si fuera un explorador de archivos normal.

Squirrel (Navegador de base de datos)

Bajar el jar de instalacion de Squirrel SQL desde http://www.squirrelsql.org/

java -jar <squirrel install jar>

Para utilizarlo con bases Oracle, copiar ojdbc14.jar del cliente de Oracle a la carpeta lib de Squirrel

Programas equivalentes

  • Comparación de archivos -> kdiff3
  • Navegador web -> Firefox o Konqueror
  • Consola o ssh -> Konsole o Yakuake
  • IDE -> Eclipse
  • Virtualización -> Virtualbox
  • Explorador de archivos -> Dolphin
  • Media player -> Amarok
  • PDF Reader -> Okular
  • Docs -> OpenOffice.org Writer
  • Editor de textos y archivos planos -> Kate
  • SVN -> KdeSVN o svn
  • MSN, GTalk, etc -> Kopete

Configurar disposición de teclado con udev

Con los últimos cambios en configuración de Xorg y udev, las viejas configuraciones de teclado y mouse en /etc/X11/xorg.conf ya no van más y están comentadas.

Hace unos días, me dí cuenta que la configuración de mi teclado en la pantalla de KDM (la pantalla de KDE donde hay que ingresar el usuario y la contraseña) estaba mal, y no hay forma de cambiarla desde ahí.

Existe un nuevo juego de archivos de configuración que actuan en conjunto con udev para configurar los dispositivos, en /etc/X11/xorg.conf.d/

En este caso, editar el archivo /etc/X11/xorg.conf.d/10-evdev.conf

Buscar la sección correspondiente al teclado, en mi caso quedó así para configurar el teclado como latinoamericano.

Section "InputClass"
        Identifier "evdev keyboard catchall"
        MatchIsKeyboard "on"
        MatchDevicePath "/dev/input/event*"
        Driver "evdev"
        Option "XkbLayout" "latam"
EndSection

Grabar el archivo, salir de la sesión y la próxima vez que aparezca KDM ya debería tomar la nueva configuración.

Todo esto lo hice en un Archlinux con todos los paquetes al día.

Instalación de Zenphoto en Archlinux - Actualizado

Estas son las instrucciones para instalar Zenphoto, una galería de fotos web, en un servidor Archlinux con Apache.

Primero, bajar el archivo tar.gz de http://www.zenphoto.org/

Descomprimir el archivo y copiar la carpeta al directorio raiz del servidor Apache y darle los permisos al usuario http sobre los archivos.

$ sudo cp -Rf zenphoto /srv/http/

$ sudo chown -R http:http /srv/http/zenphoto

Luego, agregar la configuración al servicio de Apache

En /etc/httpd/conf/httpd.conf, agregar:

#zenphoto config
Include conf/extra/httpd-zenphoto.conf

En /etc/httpd/conf/extra agregar un archivo httpd-zenphoto.conf con lo siguiente:

<Directory /srv/server/www/zenphoto>
   Options Indexes FollowSymLinks MultiViews
   AllowOverride All
   Order allow,deny
   allow from all
</Directory>

Reiniciar el servicio de http:

$ sudo /etc/rc.d/httpd restart

Crear la base de datos:

sudo mysql -u root -p
mysql> CREATE DATABASE zenphoto DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
mysql> GRANT ALL ON zenphoto.* TO 'zenuser'@'localhost' IDENTIFIED BY 'secretpassword';
mysql> quit

Ahora ingresar al servidor en http://localhost/zenphoto y seguir las instrucciones de configuración.

Es importante notar que para muchas de las funciones es necesario activar plugins, que en su mayoría vienen incluidos en la instalación, pero no están activados al inicio. Por ejemplo, tags, comentarios y hasta la opción de salir del usuario no están activadas en principio. Ir a Opciones > Plugins y revisar la lista para agregar las funciones deseadas.

Para agregar fotos, se pueden subir fotos de a una o muchas en un archivo zip, pero también se pueden copiar por FTP u otro medio directamente al directorio de albumes en /srv/http/zenphoto/albums.

Incluso se puede poner que los albums no se publiquen cuando se detectan. De esta manera, se puede configurar una sincronizacion automatica con una carpeta donde tengamos las fotos, y luego activar aquellos albumes que queremos hacer publicos.

Se puede copiar un script a /etc/cron.daily para que diariamente se sincronicen las fotos. Darle permisos de ejecución con

sudo chmod +x <nombre de archivo>

En mi caso, el script utiliza rsync y tiene lo siguiente:

#!/bin/bash
rsync -rtv --delete /ftp/Fotos/ /srv/http/zenphoto/albums/
chown -R http:http /srv/http/zenphoto/albums/

Con rsync se copian las fotos, manteniendo la fecha original de los archivos, pero no el resto de los atributos, como por ejemplo los permisos de usuario. Con chown nos aseguramos que todos los archivos queden bajo el control del usuario del servicio http.

Pueden ver mi galeria en www.soliverez.com.ar/zenphoto.

Instalación y configuración de Hudson en Ubuntu

Instalación

Agregar el repositorio de APT en /etc/apt/sources.list
#Hudson
deb http://hudson-ci.org/debian binary/

Agregar la key correspondiente

wget -O - http://hudson-ci.org/debian/hudson-ci.org.key | sudo apt-key add -

Actualizar e instalar

sudo apt-get update
sudo apt-get install hudson

Por defecto, se instala como un daemon que inicia automaticamente al arrancar el servidor.
Como otros daemons, se inicia y para con:

/etc/init.d/hudson [start|restart|stop]

Configuración

Para configurar, modificar el archivo /etc/default/hudson
Opciones mas comunes:

JAVA=  <path al ejecutable Java del JDK>

Por ejemplo,
JAVA=/opt/jdk1.5.0_21/bin/java

JAVA_ARGS= <argumentos para la VM de JAVA>

Por ejemplo,
JAVA_ARGS="-Xmx512m"

HUDSON_ARGS= <argumentos para arrancar Hudson>

Por ejemplo,
HUDSON_ARGS="--webroot=/var/run/hudson/war --javahome=/opt/jdk1.5.0._21/ --httpPort=8000"

Verificación

Una vez configurado, reiniciar el daemon y conectarse con un navegador web a http://<server>:<port>

Redireccionamiento de puertos TCP en Ubuntu

El redireccionamiento de puertos permite recibir requests de TCP en un puerto y reenviarlos a otro puerto o incluso a otro equipo. Es algo muy utilizado cuando un equipo se encuentra conectado detrás de un firewall o router y se desea exponer ciertos servicios sin conectar el equipo directo a internet.

Este metodo utiliza iptables. Para instalar el paquete:

sudo apt-get iptables

Luego , en el archivo /etc/rc.local, insertar estas lineas al final

/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
/sbin/iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 8080 -j DNAT --to 192.168.1.100:8080
/sbin/iptables -A FORWARD -p tcp -i eth0 -d 192.168.1.100 --dport 8080 -j ACCEPT

-i son las interfases de las cuales se van a recibir los pedidos
-dport es el port por el que se van a recibir
--to es la IP y puerto al que se va a hacer forward del port
-d y -dport es tambien la IP y port al que se va a hacer forward de los paquetes.

¿Qué es GNU/Linux?

Cuando se habla de Ubuntu generalmente se dice que es una distribución de Linux, pero hay veces que figura como GNU/Linux. Las dos denominaciones son correctas, aunque la última es más abarcativa.

a) Linux: esto es un kernel, el decir, un software escrito que oficia de núcleo del sistema operativo y que interactúa con el hardware (teclado, monitor, mother, disco) de nuestra PC a través de otros componentes de software específicos llamados "drivers" o controladores de periféricos.

Linux se utiliza también en otros muchos dispositivos, desde teléfonos celulares, pasando por los nodos centrales que hacen funcionar Internet, hasta computadoras en la estación espacial internacional. Aunque no lo veamos, está presente en muchos aparatos electrónicos de uso común, y es el sistema operativo que soporta la mayor cantidad de hardware, aunque con ciertas falencias en áreas claves, como se va a explicar más adelante.

b) GNU: simboliza un grupo de aplicaciones libres. Por ejemplo, los comandos de consola, editores de texto, reproductores de música y vídeos.

El kernel por sí solo no tiene utilidad práctica. Es decir, necesito aplicaciones que me permitan usar la PC para algo útil. El grupo de aplicaciones GNU provee la base para estas aplicaciones: compiladores, programas para seguimiento de errores, herramientas de pruebas, de mantenimiento de discos, etc.

Sobre estos dos componentes se ubican las aplicaciones que utilizamos todos los días: procesadores de texto, reproductores de música, navegadores de Internet, y muchas otras.

El rol principal de las distribuciones de GNU/Linux es adaptar el kernel de Linux al uso que quieran orientarse, y seleccionar el grupo de aplicaciones más orientado al grupo de usuarios que apuntan. Existen múltiples distribuciones con distintas orientaciones. Algunas para empresas, otras para usuarios finales, otras para tareas más específicas como estudios de grabación, o producción de películas o para tareas de misión crítica como medicina o viajes espaciales, o para teléfonos celulares. La flexibilidad de GNU/Linux permite adaptarlo para estas funciones.

En el caso de Ubuntu, por ejemplo, se elige la última versión del kernel de uso genérico, el grupo más común de aplicaciones GNU y aplicaciones como editores de texto, reproductores de música, navegador de internet, correo, calendario, juegos y aplicaciones educativas, entre otras. Si una distribución apunta a una empresa, podría dejar de lado el reproductor de música, buscar una versión de kernel más antigua pero aún más estable, y poner aplicaciones más orientadas al uso empresarial, como de gestión contable, colaboración, sacar los juegos, etc.

El rol de las distribuciones también es el de proveer una capa de abstracción para el usuario final. En general, los usuarios tratan directamente con las distribuciones a la hora de obtener soporte, y si es necesario algún cambio en el kernel o en alguna aplicación, las distribuciones se encargan de esto. Esto le facilita las cosas al usuario, que no tiene que tratar directamente con todos los grupos que componen las aplicaciones que tiene su computadora.

¿Qué es el Software Libre?

La expresión Software Libre es una traducción para Free Software, donde la palabra Free representa libertad y no gratis. Un software se considera libre bajo si el mismo cumple con las siguientes condiciones:

  • Es posible utilizar el programa con cualquier fin
  • Es posible acceder al código fuente del mismo
  • Es posible hacer copias del programa
  • Es posible publicar las mejoras

Algo importante para destacar, es que el software libre se basa en las leyes existentes de propiedad intelectual y brinda mayores libertades, si uno cumple con ciertas condiciones. O sea, permite la modificación y redistribución del software, algo que está generalmente prohibido, mientras uno cumpla con la condición de hacer disponibles esas modificaciones al resto del mundo. Se basa en que si todos compartimos, todos vamos a estar mejor.

Dentro del software libre existen varios tipos de licencias:

  • GPL, una de las licencias más conocidas fue creada por el proyecto GNU.
  • LGPL, similar a la GPL, pero la diferencia se encuentra en el alcance que tiene
  • Creative Commons: es en realidad una denominación que engloba a muchos tipos de licencias que se aplican generalmente a contenidos creativos, como gráficos, textos o música. Algunas de estas licencias se consideran libres.

Existe también el Software Abierto, cuyo principal exponente es la licencia BSD. El software abierto permite la redistribución del código y el software, sin ningún tipo de discriminación, pero no garantiza que siempre se pueda acceder al código fuente del mismo. Esto último es la principal diferencia con el software libre.

¿Qué se considera Software Privativo?

El software privativo se llama así porque al usarlo uno se priva de derechos que uno tendría naturalmente. El software privativo viene acompañado de un acuerdo de licencia de uso final, o EULA por sus siglas en inglés. Esta licencia limita el uso que pueda hacer del software en distintas maneras. La principal de ellas es que generalmente prohíbe la modificación del programa y limita lo que puedo hacer con el programa.

Un ejemplo de esto son los controladores de hardware, cuya licencia sólo permite usarlos con un determinado hardware en particular, y con un sistema operativo específico.

Vemos la típica instalación de un programa privativo. No es este el orden exacto, pero los pasos son más o menos los siguientes:

  • Uno ejecuta el instalador (generalmente haciendo doble clic sobre el archivo .exe)
  • Aparece un mensaje de bienvenida
  • Se le pide que esté de acuerdo con una licencia
  • Se le pide que elija la carpeta en donde lo va a instalar
  • Se le pide que confirme
  • Se instalan los archivos correspondientes
  • Se finaliza la instalación

El punto de diferencia entre el software libre y el software privativo se encuentra en la licencia que uno acepta en el punto c. El contrato de un programa es el que indica si el mismo es un programa libre o privativo. Asimismo, dentro de los programas privativos hay varias categorías:

  • Pagos: software por el cual el usuario debe pagar un monto para adquirirlos y poder utilizarlos de manera legal. En algunos casos, el derecho de uso tiene un tiempo limitado y debe pagarse nuevamente para poder continuar utilizándolo.
  • Demos / Shareware: Ejemplos de este tipo de programas son Winzip o Winrar. En estos programas, su funcionalidad se ve limitada a una cierta cantidad de días.
  • Gratuitos: Éstos se los puede descargar gratuitamente desde internet y se los puede usar sin ninguna limitación, aunque generalmente existe una versión paga del mismo que tiene más características. Un ejemplo de éstos es el Winamp.

Generalmente al Software Privativo también se lo conoce bajo el nombre de Software Cerrado o Software Propietario. Privativo es un nombre más adecuado porque, como vimos, nos priva de derechos.

Principales Ventajas del Software Libre sobre el Privativo

Para ilustrar estas ventajas, pongamos un ejemplo de algo que todos usamos hoy en día, los celulares. Generalmente uno adquiere un celular comprándolo a una empresa que no es la fabricante del celular, si no la proveedora del servicio de telefonía.

La empresa te vende el celular con una “licencia de uso final”, que te pone algunas condiciones como el plazo mínimo que tenés que mantener el servicio de telefonía y las funciones que podés utilizar con ese celular. Está bloqueado para realizar cosas que esa empresa no quiere que vos hagás con tu celular, o para lo que te quiere cobrar un extra.

Incluso, hasta hace poco, cobraban un cargo extra para darte el código que te permitía cambiar de empresa, incluso cuando el plazo mínimo ya había vencido.

O sea, te privan de hacer cosas con TU celular, que el aparato puede realizar, pero la empresa pone restricciones artificiales para cobrártelo como un servicio extra, o venderte un aparato más caro. Y hasta te obligan a cambiar de celular o tirarlo y comprar cuando ya no quieren mantener el servicio para un tipo de celular que las empresas consideran obsoleto, como sucedió con los ladrillos.

Y después tenés las fabricantes del teléfono, que te cobran por el software para conectarte al celular, o por el más mínimo accesorio, como es el caso de un celular muy popular en estos días. Y caduca la garantía apenas le tocás un tornillo, o intenta cobrarte por cambiarle la batería.

Por el otro lado, tenés un celular libre. Los planos del celular mismo son libres, entonces hay gente que puede contribuir para resolver problemas que se den en casos particulares, como utilizar el celular en medio del bosque en la Patagonia, algo a lo que un fabricante normal no prestaría mucha atención ya que no es justamente su nicho de mercado.

Y podés instalarle los programas y juegos que quieras conectándolos a tu computadora con el software que desarrolló alguien para un organizador personal y otra persona modificó para que también ande con este celular. También podés utilizarlo para algo que el fabricante ni la empresa pensó en su momento, como un celular con cámara que mande fotos cada x segundos y te permita mantener una pseudo teleconferencia sobre una red normal, sin pagar un extra por el servicio. O cambiarle todo el software por completo por el mismo que usas en tu computadora y personalizarlo a tu gusto, no con las opciones que te da el portal de tal o cual empresa de telefonía. Y si esa empresa de telefonía no te gusta, cambias cuando quieras de una a otra, e incluso usas varias al mismo tiempo, de acuerdo al tipo de llamada, mensaje o cosa que quieras hacer. O sea, el celular hace lo que vos querés y no al revés.

El software libre intenta devolverte derechos que nunca te deberían haber quitado, y que te acostumbraste a no tener. El software libre cree en que si todos compartimos, todos vamos a estar mejor. Parece una utopía, pero es algo tangible; está sucediendo a tu alrededor sin que te dés cuenta.

Mitos y Verdades del Software Libre contra el Software Cerrado o Privativo

  • El Software Libre esta hecho por aficionados, por lo tanto es de peor calidad que el Software Privativo
    FALSO: como en todos los ámbitos, la calidad varía, pero el software libre permite que mucha gente revise el código y proponga mejoras. Esta clase de escrutinio y revisión, en algunos casos por miles de personas, hace que la calidad del software sea similar o superior a la del software privativo. Inclusive muchas de esas personas trabajan en empresas de software en forma estable.
  • El Software Libre es Gratuito
    FALSO: Software Libre - Free Software en inglés, viene de “Free as in free speech, not as in free beer”, cuya traducción es: “Libre como la libertad de expresión, no gratis como la cerveza.” Sin embargo, la mayor parte del software libre es gratuito. Incluso cuando es pago, una vez comprada la licencia de software, éste puede copiarse libremente, si se cumple con las condiciones de la licencia.
  • En el Software Libre nadie hace plata
    FALSO: De lo contrario, ¿cómo se justificaría la compra de algunas empresas de Software Libre, como la de MySql, por ejemplo, recientemente adquirida por Sun Microsystems? Existen también empresas que crean Software Libre en nuestro país y generan ingresos ya que lo que se comercializa no es el programa en sí mismo, sino los servicios de soporte y desarrollo a medida.

Licencias

Una licencia es un acuerdo a través del cual el autor de un software autoriza a un usuario a ejercer "actos de explotación legales". Entre las licencias libres, las más conocidas son:

  • Licencias GPL
  • Licencias BSD
  • Licencias MPL y derivadas

Con la licencia GPL (Licencia Pública General de GNU) el autor conserva su derecho de propiedad y permite la redistribución y modificación bajo términos diseñados para asegurarse de que todas las versiones modificadas del software permanezcan bajo los términos más restrictivos de la propia GNU GPL. Aproximadamente el 60% del software licenciado como Software Libre emplea una licencia GPL. Una restricción de esta licencia: Las versiones modificadas que sean redistribuidas cuya versión original se encuentre bajo la licencia GPL, también deberán ser licenciadas bajo la GPL. O sea, el código fuente debe preservarse abierto a quien lo quiera leer y/o modificar, no deberá cerrarse. En caso que suceda esto último, se estará incumpliendo la licencia.

La licencia BSD es la licencia de software otorgada principalmente para los sistemas BSD (Berkeley Software Distribution). Pertenece al grupo de licencias de Software Abierto y la principal diferencia con la GPL radica en que tiene menos restricciones. Una característica de la licencia BSD es que permite el uso del código fuente en Software Cerrado, al contrario de la GPL.

La licencia MPL (Licencia Pública de Mozilla en español o Mozilla Public License en inglés) es una licencia de código abierto y Software Libre. Fue desarrollada por Netscape Communications Corporation, para liberar a Netscape Communicator 4.0, que más tarde se convertiría en el ya conocido y popular proyecto Mozilla. La licencia MPL cumple completamente con la definición de software de código abierto y con las cuatro libertades del Software Libre. Sin embargo la MPL deja abierto el camino a una posible reutilización no libre del software sin restringir la reutilización del código ni el relicenciamiento bajo la misma licencia.

Actualmente existe una fundación, la Free Software Fundation (FSF), que es la entidad que indica si una licencia es libre o no. Para ver todas las licencias libres, véase: http://www.fsf.org/licensing/licenses/index_html