Tema I. Código Abierto. 1. Filosofía. Qué hubiera pasado si Bach, Newton, Buda, Cristo, Guttenberg, Van Gogh, Cervantes hubieran decidido dejar su obra para sólo cumplir con las necesidades de un circulo de personas y no hubieran abierto sus ideas al mundo. Pues tendríamos muy poco avance en muchos aspectos, dado que sus conceptos revolucionarios no hubieran alcanzado a muchas personas que supieron adoptar a su vida y a otras cosas relacionadas. Bueno, pues hace tiempo, en el ambiente de cómputo, después de que Turing y Von Neumman dejaron las ideas fundamentales de la cienca de la computación, se desarrollaron proyectos de hardware y software que acababan por ser controlados por empresas que metían mucho dinero y consideraban que sus ideas eran de su propiedad y solo ellos tenían beneficio por ellas. Y el màximo representante de el software con licencia como cadena para su uso, fue Bill Gates, alguien que a la vista de muchos ha transformado el cómputo; para bien o para mal ... En 1984, Richard Stallaman, un investigador del MIT propuso una idea revolucionaria, el proyecto GNU. Su objetivo es liberar el código para evitar que se creen poderes e intereses que afecten el avance del conocimiento en el área de cómputo La filosofía del GNU y Free Software Foundation, es que el código fuente es fundamental al avance de la ciencia de cómputo y la disponibilidad libre es esencial para que la innovación continue. Y ante esta idea se unió mucha gente: Ken Thompson y Dennis Ritchie fundamentaron la idea del modelo de desarrollo con la creación de Unix y Lenguaje C Bill Joy y su grupo, con la integración de TCP/IP al sistema operativo BSD Unix Internet Engineering Task Force, que construyó un conjunto de estándares, documentos y protocolos abiertos para el uso de Internet Linus Torvald, creador del sistema operativo Linux, resultado de extender las ideas de Tannenbaum con su sistema operativo Minix Red Hat, con el esfuerzo de unir Linux con la infraestructura de código abierto y permitió definir una manera de captar dinero bajo esta filosofía Larry Wall con la creación de un lenguaje como Perl, el cual se ha convertido en una comunidad en la cual la filosofía central es en proveer repositorios bien estructurados de software El consorcio de Apache para crear un servidor de WWW y todo lo que se pueda realizar con este. Marc Anderson con la creación del navegador del WWW y la utilización de hipertexto Miguel de Icaza, con la creación de Gnome como una alternativa para uso de ambientes de componentes, diferentes a Microsoft Muchas son las personas influenciadas en esta perspectiva, pero el punto central es que el requisito es ser un hacker. 2. Hackers y su ética El concepto que tiene mucha gente sobre lo que es un hacker es erroneo. Un hacker es una persona que programa de manera entusiasta y cree que el compartir la información es un valor muy apreciado, y que es una obligación ética de los hackers es compartir su experiencia con la escritura de código abierto y facilitar el acceso a dicha información y recursos de cómputo donde sea posible. Entonces, el ser hacker es más cuestión de ética, de cumplir con la necesidad de retornar a la humanidad el conocimiento que se le ha dado. La ética del hacker cubre los siguientes puntos: + Etica del trabajo. Los hackers no organizan su vida por el trabajo, sino extienden este concepto en el cual la creatividad y la pasión por disfrutar la vida guian su ritmo de trabajo. Libres de toda esclavitud, es decir sólo pasión y libertad + Etica del dinero. No desprecian el dinero, es necesario para poder obtener una manera de alcanzar objetivos. El dinero permite que alcancen sus obras de bienestar social y apertura. Es decir, teniendo una estabilidad económica, pueden dedicarse a compartir su conocimiento sin tener que preocuparse por el factor monetario; este es llevado a segundo plano. Y curiosamente, ante esta filosofía de no ambición monetaria, los hackers obtienen dinero, dado que son reconocidos como alguien de valor, el cual vale la pena contratar ya que revoluciona el proyecto en el que se incluya + Etica de la red (Nethic). La actitud que toma los hackers hacia las redes de comunicación es parte de su filosofía. Busca una actividad continua para que las ideas se expresen sin limitantes, cuidando de que la gente tenga derecho a la privacidad, a proteger su estilo de vida y no quiere ser alguien pasivo. Trata de cuidar que se forme una mentalidad sobre la importancia de la red como un elemento para unir a todos en una comunidad donde el conocimiento se comparte, y la tecnología solo es una herramienta para lograr compartir y enlazar, aun a gente que está en los margenes de la sociedad. Quien se diga hacker tiene que vivir en estos niveles, trabajo, dinero y nética. Un hacker debe renunciar a cualquier actitud egoista, tolerante y debe impulsar a otros Asi, que si alguien que está leyendo este texto, quiere convertirse en hacker, debe: +) Saber programar y escribir software abierto +) Ayudar a probar y depurar software abierto +) Publicar información +) Ayudar a la infraestructura a que trabaje +) Servir a la cultura del hacker (checar http://www.tuxedo.org/~esr/faqs/hacker-howto.html) 3. El model de la catedral y el bazar Este modelo impulsado por Eric Steven Raymond, un evangelista de la cultura de código abierto. El considera que el desarrollo actual del software, hecho por empresas como Microsoft, código cerrado, implica que se construya algo muy similar a las sociedades medievales donde sólo unos cuantos aportaban ideas para construir una catedral, quedando plasmada la ideología de los que eran permitidos participar en el proyecto, sin tomar en cuenta a toda la comunidad, Las ideas son aisladas!! En cambio el desarrollo orientado al modelo de un bazar, donde el farfullar de todos los vendedores parece un caos total para al final encuentras lo que buscas y donde aparentemente no existe ninguna coordinación, emerge un patrón. En lugar de adoptar una actitud cerrada, se otorga libertad, se eliminan las reverencias. Asi funciona el software de código abierto, alguien con una muy buena idea, la propone, "la grita" en el medio y alguién escucha y dice, por fin encontre a alguien que quiere atacar el mismo problema que yo y decide unirse a él. El modelo del bazar se basa en principios muy simples: 1. Un buen desarrollo de software comienza con una necesidad (o molestia) personal 2. Los buenos programadores saben que escribir. Los grandes saben cómo rescribir y reusar 3. Planea desechar por lo menos una vez la solución, nadie es perfecto 4. Si tienes una actitud abierta , los problemas interesantes te encontraran 5. Cuando un programa te aburre, puedes buscar un sucesor 6. Integra a tus usuarios como co-desarrolladores para codificar rapidamente y depuración efectiva 7. Libera temprano y continuamente. Y escucha a tus usuarios 8. Si tienes una gran cantidad de gente que pruebe y co-desarrolladores, casi todo problema será atendido rápidamente y llegar un arreglo que es obvio para alguien 9. Estructuras de datos inteligentes y código simple funciona mejor que otras ideas 10. Trata a las personas que evaluan tu software como el recurso mas invaluable, y al final lo serán 11. Lo más cercano a tener una buena idea es reconocer buenas ideas de los usuarios. Algunas veces, lo segundo es lo mejor 12. A veces las soluciones mas desafiante e innovadoras es aceptando que el concepto que tienes del problema estaba mal 13. Perfección en el diseño no es alcanzado cuando no se tenga más que agregar, sino cuando ya no hay mas que eliminar 14. Una buena herramienta siempre ayudará como se espera, pero una verdaderamente grande permitira que se use como nunca se había imaginado 15. La aplicación nunca debe cerrar o ignorar el flujo de información que recibe 16. Tu aplicación debe usar una manera de expresión cercana al modelo computacional 17. Evita dar falsos sentidos de seguridad en tu aplicación 18. Para resolver un problema interesante, empieza por encontar un problema que te es interesante 19. Para realizar la coordinación del proyecto, busca un medio tan bueno como Internet y aprende a guiar sin coerción, de hecho muchas cabezas son mejores que una Alguien que quiera entrar al desarrollo de la comunidad abierta, y por ende empezar sus primeros pasos como hacker, necesita adoptar estos principios como guias. 4. Licencia para el software abierto. Oir la palabra licencia es algo que empieza a dar temor cuando se trata de software de Microsoft, suena a que tenemos que lidar con abogados y documentos muy aburridos y difíciles de leer y cuyo objetivo es limitarnos a desarrollar algo muy interesante con el software Sin embargo, el código abierto tiene una licencia que permite el uso del código abierto y su redistribución sin que se busque una compensación o crédito personal. Y no hay que notificar al creador que se usa el código Leer los términos de GNU General Public License (GNU GPL) en http://www.gnu.org/licenses/gpl.txt Solo compararla con la licencia de uso de software de Microsoft. 5. Hola mundo de código abierto ?? El lenguaje principal del código abierto es C. Pero tambien Perl y Python han encontrado una buena posición en esta filosofía. GNU creo un ejercicio, donde el programa "Hola Mundo", típico en C, se adopta para ser usado bajo el esquema de código abierto Código abierto no implica falta de calidad o cuidado en el desarrollo. Se han adoptado técnicas de la ingeniería de software para tener un código legible, facil de cambiar y configurable El código de hola mundo se puede encontrar en: http://ftp.dmz.algx.net/pub/gnu/hello/hello-2.1.0.tar.gz Bajalo y envialo al sistema UNIX mas cercano (correra con Windows ??). Al desempacar el software se encontrará lo siguiente: ABOUT-NLS config.guess contrib intl mkinstalldirs THANKS aclocal.m4 config.h.in COPYING m4 NEWS TODO AUTHORS config.rpath depcomp Makefile.am po BUGS config.sub doc Makefile.in README ChangeLog configure INSTALL man src ChangeLog.O configure.ac install-sh missing tests Ahora es tiempo de configurar el software!! Cualquier software que sigue los estándares establecidos por GNU, tiene un script (tipicamente hecho en Bourne Shell) ./configure --prefix=ruta_instalacion donde ruta instalacion es donde se piensa instalar el software de dominio publico Al ejecutarse el script, genera un archivo denominado Makefile. Un archivo Makefile es un conjunto de instrucciones para compilar el programa y generar librerias y programas ejecutables. Para compilar, se debe teclear el comando make el cual, si no marca errores, genera la compilación Para instalar el software, se debe dar: make install Tipicamente, GNU propone una estructura de directorios donde se instalan los programas, librerias y archivos auxiliares: bin info man share El programa recien generado, quedo instalado en el directorio bin, es un programa ejecutable que se denomina hello. Unicamente imprime el mensaje tan conocido de "Hello, world!" 6. Lenguajes de programación para código abierto Principalmente, el lenguaje ANSI C es la base para desarrollar aplicaciones de código abierto. El compilador GNU, ofrece una implantación bastante buena del lenguaje. GNU C proporciona la capacidad de compilar lenguaje C++ Otro lenguaje de programación es Perl, que es orientado a scripts, pero muy buena opcion para construir sistemas. Existe una comunidad dedicada a proveer software creado en Perl, se localiza en http://www.cpan.org, Comprehensive Perl Archive Network (CPAN) Otro lenguaje es TCL/TK, que es un lenguaje orientado a scripts. Ver http://www.tcl.tk/ Un ejemplo de TCL es el siguiente: #!/usr/bin/env tcl proc power {base p} { set result 1 while {$p > 0} { set result [expr $result * $base] set p [expr $p - 1] } return $result } power 2 6 power 1.15 5 Python es otro lenguaje bastante utilizado para crear sistemas orientados a objetos. De hecho es un lenguaje bastante dinámico, influenciado por la filosofía de Perl y SmallTalk. El proyecto de Python es llevado por http://www.python.org/ (Python se distingue, al escribir un programa, que los caracteres tabuladores SI tienen importancia) Un ejemplo es el siguiente: #!/usr/bin/env python class MyClass: "A simple example class" i = 12345 def f(self): return 'hello world' x = MyClass() print x.f() Este programa simplemente, define una clase denominada MyClass; y luego con un script se crea la clase y se invoca un metodo de la misma Java es un lenguaje utilizado para crear software orientado a objetos. Aunque Java ha quedado bajo la autoridad de Sun Microsystems, la comunidad de código abierto ha hecho un esfuerzo grande en portarlo a plataformas como Linux y existe software abierto basado en Java. Otro lenguaje, que esta siendo utilizado se llama Ruby, es un lenguaje de scripts orientado a objetos, checar en http://www.ruby-lang.org/en/index.html 7. Librerias de código abierto. Con el fin de proporcionar soporte a otros programas, existen librerias que dan soporte a varias funcionalidades. Por ejemplo, para manipular XML, existe la libreria que se conoce com Expat. http://www.libexpat.org/ Como se instala ?? Basta con bajar la distribucion de Expat y descomprimirla en un sistema Linux. De la misma manera que se configuro el programa HelloWorld, es posible instalar este software. Simple!! Un ejemplo de programas que utilizan esta libreria se localiza en el directorio examples de donde se puede teclear el comando make. Probar los programas elemens u outlines que se generan con el siguiente archivo xml hola mundo XML Para C++ tambien existen librerías que permiten reutilizar codigo. Un ejemplo esta en http://www.gnu.org/directory/libs/cpp/commoncpp.html, que es una biblioteca que permite implantar algunos objetos de C++ para manejo de depuracion, persistencia Por ejemplo, al bajar la version 0.1 (la primera), se puede descomprimir. Esta no tiene un archivo configure, pero si tienen un archivo Makefile. Tecleando make, debe generar librerias en formato ar. 8. Utilerias para desarrollo. Al desarrollar un sistema de software, se necesitan diversas herramientas. Uno de ellos es GNU make, que es la implantación libre del programa make de UNIX, que sirve para construir instrucciones de compilación. Existen herramientas para crear compiladores. En UNIX se implantaron dos programas, lex y yacc (ver el libro del dragón de Aho o el Entorno de programación UNIX de Kernighan). La comunidad de desarrolladores creo dos programas similares, libres de licencias Flex y Bison. Flex es un generador de analizadores lexicos Bison es un generador de parsers, que convierte una gramatica LALR(1) a lenguaje C. http://www.gnu.org/manual/bison/index.html Un ejemplo, es una calculadora de notacion polaca: /* Reverse polish notation calculator. */ %{ #define YYSTYPE double #include %} %token NUM %% /* Grammar rules and actions follow */ input: /* empty */ | input line ; line: '\n' | exp '\n' { printf ("\t%.10g\n", $1); } ; exp: NUM { $$ = $1; } | exp exp '+' { $$ = $1 + $2; } | exp exp '-' { $$ = $1 - $2; } | exp exp '*' { $$ = $1 * $2; } | exp exp '/' { $$ = $1 / $2; } /* Exponentiation */ | exp exp '^' { $$ = pow ($1, $2); } /* Unary minus */ | exp 'n' { $$ = -$1; } ; %% /* Lexical analyzer returns a double floating point number on the stack and the token NUM, or the ASCII character read if not a number. Skips all blanks and tabs, returns 0 for EOF. */ #include int yylex (void) { int c; /* skip white space */ while ((c = getchar ()) == ' ' || c == '\t') ; /* process numbers */ if (c == '.' || isdigit (c)) { ungetc (c, stdin); scanf ("%lf", &yylval); return NUM; } /* return end-of-file */ if (c == EOF) return 0; /* return single chars */ return c; } int main (void) { return yyparse (); } void yyerror (const char *s) /* Called by yyparse on error */ { printf ("%s\n", s); } Guarda este archivo como rpcalc.y Ejecuta el comando bison rpcalc.y y genera un programa denominado rpcalc.tab.c para generar un ejecutable gcc rpcalc.tab.c -lm -o rpcalc y corre rpcalc 3 7 + ^D Quizas te estes preguntando por que no te dieron la materia de compiladores con esta herramienta. Yo tambien me lo pregunto!! 9. Manipulación de imágenes Muchas veces es necesario crear imagenes por medio de un programa, por ejemplo graficas de barras. Existen diversos formatos com GIF, JPEG, BitMaps PNG (Portable Network Graphics) es un nuevo formato para construir gráficos. De hecho se construyo en parte para sustituir el formato GIF. Existen razones muy tecnicas al respecto y que no se expondran. (Checar http://www.libpng.org/pub/png/libpng.html) Se construyó una libreria en lenguaje C que permite la manipulación de dichas imagenes En este sitio existen ejemplos de una manera de manipular imagenes PNG http://www.libpng.org/pub/png/book/sources.html Puede correr en sistemas donde ya este instalada la libreria libpng.a y libz.a En la industria existe un software creado por Acrobat, denominado PhotoShop. La comunidad de codigo abierto, creo algo equivalente, GIMP, localizado en http://www.gimp.org/ Existen librerias para manipular imagenes con la filosofia de GIMP se basa en el ambiente grafico de GTK, disponible en http://www.gtk.org/ 10. Ambientes graficos GTK es un toolkit para crear ambientes graficos. Con este se han creado ambientes como GNOME, Glade (herramienta para generar interfases graficas y genera codigo en C) y GIMP Permite abstraer la manera como se manipulan componentes graficos en ambientes como X Windows o MS Windows 10. Manipulación de Texto Existen multiples herramientas. LaTeX es un ejemplo , sirve para crear textos de una calidad muy buena, por ejemplo, textos cientificos. http://www.latex-project.org/ Por ejemplo, copiar el siguiente texto: \title{Mi Tesis} \author{Gustavo De la Cruz Tovar} \documentstyle[a4]{book} \begin{document} \maketitle \tableofcontents \chapter*{Introduccion} Aqui va el texto de la introduccion Quiero demostrar que TeX es mejor que Word Solo vean las ecuaciones que puedo escribir, y eso que no se nada de LaTex. Arriba Knuth!! Se va a dividir en \begin{itemize} \item Ecuaciones simples \item Ecuaciones de las finanzas \item inventario simple de simbolos LaTex \end{itemize} \chapter*{Capitulo I} \section{Explicacion} Algunas ecuaciones famosas escritas en Latex Me gustaria poner codigo en Java tambien \small \begin{verbatim} public class Ecuaciones { ... } \end{verbatim} \normalsize \section{Ecuaciones} \subsection*{Simples} Potencias \begin{equation} \pi^{2} \end{equation} Subindices \begin{equation} \zeta_{2} \end{equation} fracciones \begin{equation} \frac{2}{3} \end{equation} raiz \begin{equation} \sqrt[3]{x+y} \end{equation} La razon de oro \begin{equation} \frac{\sqrt{5} + 1}{2} \end{equation} \subsection*{Normales} Tipico \begin{equation} E = mc^{2} \end{equation} La derivada \begin{equation} \frac{df(y)}{dx} = lim _{_{h->0}} \frac{f(x+h) - f(x)}{h} \end{equation} La mas estetica \begin{equation} e^{-2 \pi i} = -1 \end{equation} Una serie \begin{equation} \sum^{\infty}_{i=0} x^{2}_{i} -> \frac{1}{2 \pi} \end{equation} Una dificil \begin{equation} f(\zeta) = \frac{1}{2 \pi i} \oint_{C}{ \frac{f(z)}{z - \zeta} dz } f(\zeta) = \sum^{\infty}_{-\infty} \frac{1}{2 \pi i ^{2}} \end{equation} \subsection*{Financieras} Proceso de Ito \begin{equation} dx = a(x,t) dt + b(x,t) dW_{t} \end{equation} Lema de Ito Si F = G(x,t) entonces \begin{equation} dG = ( a(x,t) \frac{\partial F}{\partial x } + \frac{\partial F}{\partial t } + \frac{1}{2} b(x,t)_{2} \frac{{\partial}^{2} F}{\partial x^{2}} ) dt +b(x,t)\frac{\partial F}{\partial x } dW_{t} \end{equation} Black And Scholes \begin{equation} \frac{\partial f}{\partial t } + rS \frac{\partial f} {\partial S} + \frac{1}{2} \sigma^{2} S^{2} \frac{{\partial}^{2} f}{\partial S^{2}} = rf \end{equation} Martingala \begin{equation} E^{*}[ Z^{*}(T) | \Im (t) ] = Z^{*(}t) \end{equation} Valor de un bono \begin{equation} B(0,t) = e^{ [ \int^{t}_{0} r(s) ds ] } \end{equation} \subsection*{Varios} \begin{equation} \angle \hbar \ll \sqsubset \sqsupset \mho \nabla \partial \forall \emptyset \Im \Re \forall \exists \div \sum \prod \otimes \uplus \cap \cup \intop \wp \jmath \vee \dagger \bullet \ointop \ell \succ \prec \approx \leq \Leftarrow \Rightarrow \Box \end{equation} \end{document} guardarlo en un archivo y correr el comando latex pinino.tex este genera un archivo dvi, el cual es un formato grafico portable Dicho formato se puede convertir a postscript Tambien es posible convertir a PDF el texto en LaTeX con el comando pdfelatex dummy.tex Este genera el archivo dummy.pdf Ve en tu computadora el archivo generado 11. Servidores de WWW. Para proveer servicios de WWW, existen diversos programas que interactuan con el protocolo HTTP y dan la gama de funcionalidades para ejecutar aplicaciones CGI (Common Gateway Interface). El servidor de Apache es uno de los mas utilizados por su flexibilidad, gran cantidad de modulos para proveer funcionalidades y la capacidad de ser extendido. El proyecto Apache es llevado por Apache Software Foundation (ver http://www.apache.org) y tiene a su cargo: + Mantenimiento de Apache, que es el servidor de HTTP + Proyecto Jakarta, que es un conjunto de modulos Java, entre ellos para manejo de Servlets y JSP (TomCat) + Integracion de Perl y Apache via el modulo mod_perl, que permite cargar scripts de Perl para aplicar CGI, de una manera optimizada + PHP + Apache XML, que provee un conjunto de manejadores de XML y programas para manejo de Web Services. De hecho, el dominio publico tiene un esfuerzo bastante considerable para lograr que librerias en distintos lenguajes se utilicen. Estan hechas en C++, Perl, Python. (Ver http://www.gnu.org/directory/webauth/) Algunos otros han construido frameworks (marcos de referencia) para construir aplicaciones de WWW. Uno de ellos es Struts, basado completamente en Java. Otro, hecho en Python, denominado Zope (ver http://www.zope.org) Como ejemplo, veremos el crear una pagina sencilla de WWW en Apache y tambien algunos scripts de PHP. Pagina HTML:
operador 1
operador 2

Codigo PHP: (guradrlo como calculadora.php) no!! "); } else { echo($operador1 / $operador2 ); } } ?> Y crear un carpeta en /var/www/html/cib9112002, con el nombre del alumno. Copiar estos archivos. Existen sistemas de comercio electronico de código abierto, por ejemplo un sistema que se llama Interchange (http://interchange.redhat.com) Para una demostracion de una implantacion, checar http://demo.ic.redhat.com/ 12. Bases de Datos. Hoy en dia existen varias bases de datos de codigo abierto. GNU SQL (http://www.ispras.ru/~kml/gss/index.html) MySQL (http://www.mysql.com/) PostgreSQL (http://www.postgresql.org) todas ellas bases de datos relacionales. Tambien existen bases de datos orientadas a objetos o de XML (ver http://xml.apache.org/xindice) Existen herramientas para generar reportes. Una de ellas se denomina GURGLE, para generar reportes. (Ver http://www.dai.ed.ac.uk/homes/timc/gurgle/) Un ejercicio con esta herramienta es el siguiente: Se creo una tabla denominada alumno y amigo con el siguiente esquema Table "alumno" Attribute | Type | Modifier -----------+-------------------+---------- cveulsa | character varying | nombre | character varying | Table "amigo" Attribute | Type | Modifier --------------+-------------------+---------- cveulsa | character varying | cveulsaamigo | character varying | Para generar un reporte de todas las personas que son amigos, introducir el siguiente archivo: %%define PHYSDB cib9112002 %%database "alumno.sql" SELECT al1.nombre AS cuate1, al2.nombre AS cuate2 FROM alumno al1, alumno al2,amigo WHERE al1.cveulsa=amigo.cveulsaamigo AND al2.cveulsa=amigo.cveulsa %%header Los MUY CUATES %%footer Se citaran en el Leon de Oro el viernes 23 de agosto del 2002, para afirmar su amistad y guardarlo como amigo.grg 13. Ambientes distribuidos. El software abierto tiene mucho que ofrecer para este tipo de aplicaciones. Existen aplicaciones para construir clustes de computadoras, basadas en el sistema operativo Linux. Uno de ellos es el sistema Beowful (http://www.beowful.org) Otros para aplicaciones de alta disponibilidad (http://linux-ha.org/) Para mayor detalle, checar en http://lcic.org/ Y software para aplicaciones paralelas como Parallel Virtual Machine (PVM), que es un API para generar algoritmos de procesamiento paralelo distribuido ( http://www.epm.ornl.gov/pvm/) O middleware como CORBA para comunicar aplicaciones en distintos lenguajes. Existe una implantacion de Java 2 Enterprise Edition (J2EE), para manejo de Enterprise Java Beans o Bases de datos, se denomina http://www.jboss.org 14. Otros P2P, Aplicaciones cientificas, herramientas de administracion, manipulacion de graficos, videojuegos, ... 15. Repositorios de codigo abierto Hoy en dia existen muchos repositorios de codigo abierto GNU http://www.gnu.org y SourceForge http://www.sourceforge.net Este ultimo provee una serie de servicios para: + Crear proyectos de dominio publico y dar seguimiento con listas, documentacion + Almacenamiento de codigo fuente + Granjas de compilacion + Servicios de clasificacion + Control de versiones, usando CVS (Concurrent Version System http://www.cvs.org) 16. Temas de Investigacion. Para un tema de investigacion o tesis, pueden surgir los sig. temas: Filosofia y Etica de hackers. Historia de los hackers y estudio de las principales personas que han influido Descripcion del kernel de Linux Implantaciones y extensiones a Linux Experiencias en Escritura de codigo abierto Comparaciones de lenguajes de programacion utilizados por el codigo abierto Aplicacion del software abierto a la industria privada Estudio del modelo de desarrollo del software abierto Implantacion de un caso practico con software abierto Planteamiento de un nuevo modelo para automatizar la distribucion y liberacion de software abierto ....