100 Excelente :-) 1 Tarea Nº1 | IE0117 Programación bajo plataformas abiertas Mario A. Castresana Avendaño (carné A41267) Resumen—La presente tarea, trata aspectos generales de las plataformas libres (o de código abierto) para dar paso a la introducción del curso IE0117 como tal. Se analizan aspectos generales de Linux, como por ejemplo sus comandos, directorios, empresas que lo usan, características y otros. 1. ¿Qué es Linux? Mencione 5 corporaciones o empresas internacionales utilizando Linux. Mencione 3 empresas en el mundo que brinden servicios de mantenimiento instalación y desarrollo sobre software libre. Linux es un sistema operativo basado en UNIX, que es utilizado por millones de usuarios en el mundo hoy día. A diferencia de otros sistemas operativos, Linux posee una característica que lo diferencia de los otros sistemas disponibles en el mercado: es software libre, es decir, es completamente gratuito y se distribuye junto con su código fuente. El sistema lo forman el núcleo del sistema (kernel) más un gran número de programas y bibliotecas que hacen posible su utilización. Cabe mencionar, que Linux es sólo el kernel y a la combinación del kernel con las aplicaciones del proyecto GNU, se le conoce como el sistema operativo GNU/Linux como tal. Una particularidad de Linux es que la cantidad de apliaciones y características que tenga puede variar para dar a lugar a diferentes versiones del sistema, conocidas hoy como distribuciones. Muchos de estos programas y bibliotecas que usa Linux han sido posibles gracias al proyecto GNU, por esto mismo, muchos llaman a Linux, GNU/Linux, para resaltar que el sistema lo forman tanto el núcleo como gran parte del software producido por el proyecto GNU1 . Para entender mejor la filosofía de GNU/Linux, es preciso entender el concepto de software libre. El «Software Libre» es un asunto de libertad, no de precio. Para entender el concepto, debe pensarse en «libre» como en «libertad de expresión», no como en «cerveza gratis»2 . El software libre es una cuestión de libertad de los usuarios para ejecutar, copiar, distribuir, estudiar, cambiar y modificar el software. Más concretamente se refiere a los cuatro tipos de libertades para los usuarios de software: La libertad de usar el programa, con cualquier propósito (libertad 0). La libertad de estudiar el funcionamiento del programa, y adaptarlo a las necesidades (libertad 1). El acceso al código fuente es una condición previa para esto. La libertad de distribuir copias, con lo que puede ayudar a otros (libertad 2). 1 tomado de El Rincón de Linux. 2012. WWW. Sobre Linux. Extraído el jueves 8 de marzo de 2012 desde [http://www.linux-es.org/sobre_linux] 2 tomado de GNU Operating System. 2012. WWW. El sistema operativo GNU, ¿qué es software libre? Extraído el jueves 8 de marzo de 2012 desde [http://www.gnu.org/]. La libertad de mejorar el programa y hacer públicas las mejoras, de modo que toda la comunidad se beneficie (libertad 3). De igual forma que la libertad 1 el acceso al código fuente es un requisito previo. Todas estas características conforman la filosofía detrás de este sistema operativo. El hecho de que Linux sea software libre le ha permitido a muchas empresas surgir más rápido de lo normal y lo bueno de esto es que cada herramienta desarrollada a partir de software es también software libre debido a la licencia de software GPL (GNU General Public License). Actualmente, Linux se distribuye bajo la licencia GPL versión 2. En estos días, múltiples empresas utilizan Linux para trabajar en grandes proyectos y mejorar su productividad, gozando de las ventajas del software libre. Se pueden citar, entre muchas otras, empresas como: 1. Intel 2. Google 3. IBM 4. T-Mobile 5. Texas Instruments Cabe mencionar, que es muy común que las empresas transnacionales se unan para desarrollar software de código abierto. Para citar un ejemplo interesante, se puede mencionar la Open Handset Alliance (OHA), quien fuera responsable de desarrollar el sistema Android para dispositivos móviles, el cual está basado en Linux y fue liberado al mercado bajo la licencia de código abierto Apache. La OHA es liderada por Google y la componen compañías como HTC, Dell, Intel, Motorola, Qualcomm, Texas Instruments, Samsung, LG, T-Mobile, Nvidia, Wind River Systems y otras 66 firmas de tecnología que se dedican a la fabricación de dispositivos móviles, desarrollo de aplicaciones, telecomunicaciones y otras actividades Existen empresas que sólo se dedican a dar servicios de mantenimiento instalación y desarrollo de software libre, tales como: 1. Canonical (desarrolladora principal de Ubuntu) 2. Andriod Inc. (desarrolladora principal de Android bajo la guía de Google y la OHA) 3. Red Hat Enterprises (principal desarrolladora de Linux RedHat y Fedora) 2. ¿Qué es GNU? De acuerdo al sitio oficial, www.gnu.org/, el Proyecto GNU fue creado en 1984 con la intención de crear un sistema nuevo similar a UNIX, pero con la filosofía del software libre. De hecho, el nombre GNU se deriva del acrónimo recursivo GNU is Not Unix. Un sistema tipo UNIX se define mediante el 2 estándar POSIX (IEEE 1003) de la IEEE en el que se establece cómo debe ser un sistema para ser considerado de este tipo; la necesidad del estándar surgió debido a que empezaron a salir muchas versiones nuevas de sistemas que se consideraban a si mismos tipo UNIX y esto se prestaba para confusión en muchos casos, ya que no todos se podían considerar realmente sistemas UNIX. Un sistema tipo UNIX es, en esencia, una colección de software de aplicaciones, bibliotecas y herramientas de desarrollo más un programa que permita asignar recursos y comunicarse con el hardware, llamado kernel o núcleo. Existe un kernel propio de GNU (todavía en desarrollo) llamado The Hurd, pero en la actualidad al sistema GNU se le utiliza con un kernel sumamente estable llamado Linux y es por esto que al sistema Linux se le conoce como GNU/Linux. 3. ¿Qué es una distribución de Linux? Mencione 10 distribuciones de Linux y comente sus principales características, además de las principales diferencias entre ellas. Una distribución de Linux es un conjunto de software acompañado del kernel Linux diseñado para satisfacer necesidades específicas para el hogar, empresas, instituciones educativas o destinado a resolver cualquier necesidad para cualquier grupo de usuarios. Entre las más populares existen: 1. Arch Linux, una distribución basada en el principio KISS, con un sistema de desarrollo continuo entre cada versión (no es necesario volver a instalar todo el sistema para actualizarlo) 2. Debian, una distribución mantenida por una red de desarrolladores voluntarios con un gran compromiso por los principios del software libre. 3. openSUSE, originalmente basada en Slackware es patrocinada actualmente por la compañía Novell. 4. Slackware, una de las primeras distribuciones Linux y la más antigua en funcionamiento. Fue fundada en 1993 y desde entonces ha sido mantenida activamente por Patrick J. Volkerding. 5. Fedora, una distribución lanzada por Red Hat para la comunidad. 6. Red Hat Enterprise Linux, derivada de Fedora, es mantenida y soportada comercialmente por Red Hat. 7. Ubuntu, una popular distribución para escritorio basada en Debian y mantenida por Canonical. 8. Edubuntu, un sistema del proyecto Ubuntu diseñado para entornos educativos. 9. Slax, es un sistema Linux pequeño, moderno, rápido y portable orientado a la modularidad. Está basado en Slackware. 10. Linux Mint, una popular distribución derivada de Ubuntu. 4. ¿Quién es el dueño de Linux? Linux fue creado por el finlandés Linus Torvalds en 1991, inicialmente él distribuyó Linux bajo una licencia que prohibía expresamente el uso del software con fines de lucro, pero rápidamente fue sustituida por la versión 2 de la licencia GPL. Actualmente, el propietario de la marca registrada Linux es el Linux Mark Institute (LMI) quien vela porque no se hagan usos indebidos de la marca Linux que puedan confundir a los usuarios o perjudicarlos de alguna manera. Con el apoyo de la Linux Foundation, el LMI ha creado un programa para otorgar las licencias correspondientes a personas interesadas en usar la marca Linux en sus empresas o productos; esto también incluye a Tux el pingüino. 5. Investigar las siguientes aplicaciones. ¿Cuál es la función de cada uno de ellos? firefox: navegador web creado por la organización sin fines de lucro Mozilla. k3b: es una aplicación desarrollada para el entorno gráfico KDE cuya función es quemar CDs o DVDs. kate: es un editor de documentos bastante completo capaz de editar simultáneamente varios documentos en varios formatos incluyedo lenguajes de programación. gimp: es una poderosa herramienta de edición de imágenes comparable con Photoshop y Corel. xawtv: es una aplicación para ver tv por internet con varias funciones extra relacionadas a reproducción de video. wine: es un tipo de “emulador” de Windows que nos permite correr aplicaciones de Windows directamente en Linux sin necesidad de instalar windows. Es una implementación de del API de Windows (Interfaz de programación de aplicaciones) sobre Unix y el sistema de ventanas X. VirtualBox: es un emulador de hardware x86 en el cual se pueden instalar por a aparte sistemas operativos completos sin necesidad de particionar el disco duro. kino: es un editor de video con múltiples funciones y compatible con una gran variedad de formatos (y está perfectamente integrado con los estándares de captura y reproducción de video IEEE-1394) vlc: reproductor multimedia capaz de reproducir cualquier formato multimedia. También es una plataforma muy útil para convertir formatos y soporta varios protocolos de streaming. kdenlive: editor de video que soporta formatos como DV, HDV y AVCHD. Soporta una gran gama de codificadores y cámaras para edición de video. 6. Investigar los siguientes comandos de consola. Explicar en detalle cada uno de ellos. Mencione y explique un ejemplo de utilización para cada uno de ellos. cd: comando para cambiar de directorio. Incluye operadores como -L y -P para seguir o no enlaces simbólicos respectivamente. Ej: $ cd /usr/local/sybase. ls: comando del shell que da a conocer los contenidos de un directorio junto con la información que se le solicite de forma adicional por medio de operadores. Ej: $ ls -l apt-get: busca e instala paquetes de software. apt-cache: busca dentro de un repositorio el nombre de un paquete. Esto es útil en caso de no conocer el nombre exacto de un paquete en un repositorio. Ej: $ apt-cache search ^apache2$ dpkg-reconfigure: comando para reconfigurar un paquete que haya sido instalado previamente. Usualmente, 3 se utiliza este comando para arreglar un paquete que por alguna razón falló en su configuración durante la instalación o que requiere configurarse después de la instalación. aptitude: misma función que apt-get sólo que este comando pertence a una versión más vieja del gestor de paquetes aptitude. bash: iniciales para la consola nueva de GNU, bourneagain shell. ssh: programa para comunicar dos máquinas de forma remota y ejecutar comandos en una máquina de forma remota, a través de una red que puede ser insegura. La ventaja es que dicha comunicación se hace encriptada, haciendo que el programa en si sea muy seguro y los métodos adecuados. Ej: # ssh -f -w 0:1 192.168.1.15 true scp: comando utilizado para hacer copias de seguridad de archivos entre dos anfitriones en una red. Dichas copias se realizan de forma segura utilizando ssh para transferencia de datos y se pedirán contraseñas si es necesario un proceso de autenticación. Se le debe pasar al comando el nombre del anfitrión y el usuario para saber de dónde se va a copiar el archivo y quién lo recibirá. Ej: # scp /home/simon/file1 kate@ss64.com:/home/kate copia file1 a anfitrión remoto. lsmod: muestra información de todos los módulos cargados en el kernel de Linux. Mediante un pipe | se puede observar un sólo módulo y los módulos que dependan de éste. Ej: # lsmod | grep drm ps: muestra toda la información de los procesos corriendo en memoria. Por ejemplo, para mostrar todos los procesos corriendo con sintaxis estándar use # ps -e grep: busca patrones dentro archivos, se usa la sintaxis grep [opciones] [-e PATRÓN | -f ARCHIVO] [ARCHIVO...]. Ej: $ grep -v [aeiou] wordlist.txt du: reporta la cantidad de espacio utilizada en el disco por los archivos especificados o devuelve el espacio utilizado por el directorio actual si no se le pasan argumentos. 7. Investigar los siguientes archivos de sistema. Explicar en detalle la función de cada uno de ellos. /etc/apt/sources.list, es el fichero donde se enlistan las "fuentes" o "repositorios" disponibles de los paquetes de software candidatos a ser: actualizados, instalados, removidos, buscados, sujetos a comparación de versiones, etc. La herramienta apt administra el acceso a dichos paquetes, utilizando el fichero sources.list, para realizar las acciones previamente mencionadas. /etc/fstab, este archivo configura el acceso a los diferentes sistemas de archivos que hay en nuestro sistema. /boot/grub/menu.lst, en general es un archivo de configuración del GRUB y muestra una lista de todos los sistemas operativos que pueden ser cargados desde GRUB al iniciar. Cuando se tienen instalados varios sistemas operativos, es preciso editar este archivo para poder seleccionar al arranque, qué sistema se desea usar. /etc/passwd, contiene una lista con los usuarios locales del sistema. Cada línea contiene un usuario y está for- mada por columnas, separadas por : (dos puntos), que contienen: el nombre de usuario (máximo 32 caracteres), contraseña, ID de usuario, ID de grupo, directorio principal del usuario, información personal del usuario y shell que usa el usuario. /etc/group, contiene los nombres de los grupos y una lisa de los usuarios que pertenecen a cada grupo. Cada línea representa un grupo y contiene 4 campos: lista de miembros del grupo, número de GID, la contraseña cifrada o bien una x que indica la existencia de un archivo gshadow y el nombre del grupo. /etc/network/interfaces, guarda la configuración por default de cada una de las interfaces de red. /etc/resolv.conf, al igual que el archivo /etc/host.conf, este también juega un papel en la resolución de nombres de ordenadores a través de la librería resolver. En este archivo se indica el dominio al que pertenece el ordenador (palabra clave search) y la dirección del servidor de nombres (palabra clave nameserver) al que se debe dirigir. Se puede introducir más nombres de dominio. Al resolver nombres que no estén totalmente cualificados se intentará generar un nombre válido y cualificado añadiendo entradas únicas en search. Se puede dar a conocer otros servidores de nombres añadiendo más líneas que comiencen con nameserver. Se puede introducir comentarios con #. /var/log/syslog, archivo de registro del sistema normales (Para entornos Red Had y Fedora el archivo es /var/log/messages). Para su visualización generalmente se utiliza: tail -f /var/log/syslog que nos muestra las últimas líneas en tiempo real. /proc/version, muestra la versión del kernel de Linux. /proc/cpuinfo, muestra los datos sobre el procesador del equipo. Bibliografía: 1. El Rincón de Linux. 2012. WWW. Sobre Linux. Extraído el jueves 8 de marzo de 2012 desde [http://www.linux-es.org/sobre_linux] 2. GNU Operating System. 2012. WWW. El sistema operativo GNU, ¿qué es software libre? Extraído el jueves 8 de marzo de 2012 desde [http://www.gnu.org/] 3. El directorio /proc. 2012. WWW. Directorio /proc. Extraído el domingo 11 de marzo de 2012 desde [http://www.linuxtotal.com.mx/index.php?cont=info_admon_016] 4. Directorios importantes de Linux. 2012. WWW. Archivos. Extraído el domingo 11 de marzo de 2012 desde [http://francisconi.org/linux/archivosdirectoriosimportantes?page=5] 5. Guía de Ubuntu. 2012. WWW. Sistema de ficheros. Extraído el domingo 11 de marzo de 2012 desde [http://www.guiaubuntu.org/index.php?title=Sistema_de_ficheros] 6. The Linux Documentation Project. 2012. WWW. Sitio web [http://www.tldp.org/] 7. DebianWiki. 2012. WWW. HowToUse. Extraído el domingo 11 de marzo desde [http://wiki.debian.org/fr/WiFi/HowToUse?highlight= %28interfaces % 4 8. Debian. 2012. WWW. Documentación. Extraído el domingo 11 de marzo de 2012 desde [http://www.debian.org/doc/index.es.html] 9. Documentación escrita desde la consola bash usando el comando man comando.