Software Libre / Código Abierto

Programa de contenidos

Resumen

Se presenta a continuación la organización de un curso de cincuenta horas cuyo fin es dar a conocer la base ideológica que sostiene a los movimientos de Software Libre (Free Software) y Código Abierto (Open Source), así como el Sistema Operativo LINUX, los principales utilitarios, clientes y servidores que conforman un sistema GNU. El curso se orienta a alumnos de los últimos años de la carrera de Ingeniería de Sistemas y a profesionales de la disciplina en general. Se asume que los alumnos poseen conocimientos generales de informática y nociones de los principales aspectos de las ciencias de la computación, así como también experiencia en operación y programación de computadoras. No se asume sin embargo que los alumnos posean conocimientos previos de UNIX.

Objetivos

El curso tiene como objetivo introducir al alumno a los siguientes tópicos:

  • Base ideológica e histórica de los movimientos de Software Libre (Free Software) y Código Abierto (Open Source)
  • Historia, filosofía y funcionamiento de los sistemas operativos de la familia de los UNIX.
  • Sistema operativo Linux: su arquitectura, configuración y puesta a punto para diferentes configuraciones1.
  • Ambiente de trabajo de un sistema GNU: principales componentes.
  • Configuración de redes utilizando el sistema operativo Linux como base.
  • Principales servidores y configuración de los mismos.
  • Mecanismos de conectividad y convivencia en una misma red de máquinas con Linux y máquinas con otros sistemas operativos.
  • Herramientas de base para el desarrollo de Software en sistemas GNU.

Organización

10 clases teóricas de 3 horas reales y 10 clases prácticas de 2 horas reales, haciendo un total de 50 horas con una frecuencia semanal, horarios y fecha de inicio a convenir.

Contenido

Base Ideológica del Software Libre (Free Software) y Código Abierto (Open Source)

Introducción

  • Concepto de idea original, derecho de autor, propiedad intelectual y patente aplicado al Software.
  • Concepto de Acuerdo de Licencia a Usuario Final (EULA)
  • Las licencias comerciales o `propietarias'.
  • Historia del Software libre.
  • La Fundación de Software Libre (FSF).
  • El proyecto GNU. Manifiesto. El Sistema GNU.
  • Concepto de `copyleft'.
  • La Licencia Pública General GNU (GNU GPL) y la GNU GPL relajada.
  • Historia del Código Abierto (Open Source). Diferencias y similitudes con el Software Libre.
  • Iniciativa Código Abierto (OSI).
  • Revista de los tipos comunes de licencias de Software Libre, Código Abierto y Comerciales.

Distribuciones de Sistemas GNU

  • Breve ambientación histórica de los sistemas operativos de la familia UNIX.
  • Definición de términos UNIX -> POSIX -> LINUX, GNU/Linux. Concepto de portabilidad.
  • Concepto de distribución. Descripción de las distribuciones más importantes.

Software de Base de los Sistemas GNU

Linux

  • Características de Linux.
  • Comparación entre Linux y otros sistemas operativos.
  • Kernel de Linux. Drivers.
  • Relación entre el compilador y el kernel. libc y ld-linux. Llamadas al sistema.
  • Programas del sistema (comandos) y shell.

Organización del árbol de directorios de UNIX

  • Sistemas de Archivos.
  • El sistema de archivos virtual. Concepto de árbol único.
  • Montaje y desmontaje de particiones. Montaje remoto. NFS.
  • File Hierarchy Standard (FHS). Descripción de los directorios más importantes.

Instalación y puesta a punto en ix86

  • Proceso de booteo en PC. Basic Input Output System (BIOS).
  • Sectores de arranque en disquetes y discos rígidos (MBR).
  • Particiones reales y lógicas.
  • Concepto de imagen de disco. Creación de un disco a partir de una imagen.

Configuraciones de trabajo

  • Procesos de booteo y shutdown.
  • El proceso init. Niveles de corrida.
  • El archivo inittab. Configuración de los servicios en /etc/rc.d.
  • Concepto de terminal virtual. Manejo de las terminales virtuales.
  • Terminal X. Manejo de las terminales X.
  • Sistemas de ventanas y Ambientes de escritorio. Arquitectura del entorno gráfico. Comparación con otros entornos gráficos.

La línea de comando

Shell

  • Concepto de shell. El shell Bourne.
  • Descripción de los diferentes formatos de comandos, opciones y argumentos. Comandos embebidos.
  • Acceso a los sistemas de documentación: comandos man e info.
  • Comandos básicos y sus opciones más utilizadas.
  • Concepto de enlace duro y simbólico. Comando.
  • Descriptores de archivo heredados.
  • Redireccionamiento de los descriptores.
  • Dispositivos especiales.

Sustituciones

  • Generación de listas de archivos mediante metacaracteres. Expresiones glob.
  • Escapado de metacaracteres.
  • Función de completitud.
  • Sustitución de parámetros y variables de ambiente.
  • Sustitución de comandos.
  • Valor de retorno de un comando.
  • Ejecución secuencial incondicional.
  • Ejecución secuencial condicional.
  • Ejecución paralela.
  • Indicadores de agrupamiento.
  • Ejecución paralela en pipeline.

Scripting

  • Editor vi.
  • Formato de un archivo de script.
  • Declaración del intérprete y comentarios.
  • Sentencias de control.
  • Sustitución y manejo de parámetros y variables automáticas.
  • Sustitución aritmética.
  • Sustituciones de variable.
  • Funciones.

Procesos y tareas

  • Concepto de proceso. Diferencia entre proceso y programa.
  • Árbol de procesos. El proceso init.
  • Revisión de procesos.
  • Niveles de prioridad dinámicos y estáticos del planificador.
  • Señalamiento de procesos.
  • Abstracción de procesos en el shell: tareas. Ejecución en background. Desheredado de procesos.

Interacción de los sistemas GNU

Seguridad a nivel de usuarios

  • Concepto de usuario y grupo.
  • Creación de nuevos usuarios y grupos.
  • Parámetros de las cuentas de usuario.
  • Librería PAM.
  • Dueño y grupo de un archivo o directorio.
  • Permisos de un archivo o grupo. Mascara octal.
  • Permisos especiales.

Redes

  • Repaso de TCP/IP.
  • Configuración de una estación de trabajo.
  • Configuración de un gateway/router./li>
  • Configuración de un firewall a nivel de paquetes.
  • Protocolos de conexión punto a punto./li>
  • Conexiones a redes externas vía modem o DSL.
  • Conectividad con Windows. samba.
  • Servidores: inetd, ssh, telnet, ftp, smtp, pop, imap, ldap.

Herramientas de base para el desarrollo de Software Libre/Codigo Abierto

Compilador de C/C++

  • Descripción de las herramientas binarias (ensamblador, vinculador, etc.) y el compilador.
  • Repaso del concepto de interface (.h) e implementación (.c) en lenguaje C.
  • Construcción de librerías de enlace estático.
  • Construcción de librerías de enlace dinámico.
  • El vinculador dinámico, configuración.

Sistema

  • Propósito del sistema Make.
  • Estructura de un Makefile.
  • Reglas normales.
  • Reglas implíscitas.
  • Reglas patrón (template).
  • Variables automáticas y Sustituciones.
  • Generalización de Makefiles.
  • Llamado recursivo.

Sistema de Versionamiento Concurrente (CVS)

  • Propósito del sistema CVS.
  • Algoritmo de cálculo de diferencias en archivos de texto: diff y diff3.
  • Manejo de archivos binarios.
  • Sistema RCS.
  • Concepto de versión, release, y rama de desarrollo.
  • Operaciones básicas sobre los fuentes: checkout, commit, update, add y remove.
  • Creación de versiones y ramas mediante tags.
  • Manejo de desarrollo concurrente y/o distribuído utilizando CVS.
  • Organización de un repositorio CVS.
  • Acceso anónimo remoto a los repositorios vía pserver.
  • Acceso remoto autentificado y seguro a los repositorios vía ssh.