Asociación para la Difusión y el Avance del Software Libre de Andalucı́a (ADALA) Grupo de Usuarios de GNU/Linux de Granada (GCUBO) Actas de las III Jornadas Andaluzas de Software Libre Granada, 14 y 15 de noviembre de 2003 Organizadas por: ADALA GCUBO Con la colaboración de: Escuela Técnica Superior de Ingenierı́a Informática de la Universidad de Granada Editores: Alfonso Cepeda Caballos Antonio Arauzo Azofra Antonio Luque Estepa http://jornadas.adala.org Los textos que aparecen en el presente volumen constituyen las contribuciones presentadas en las III Jornadas Andaluzas de Software Libre. Reflejan la opinión de sus autores y se publican tal y como ellos las presentaron. Esta publicación no significa que ADALA, GCUBO, ni los editores, compartan o apoyen las opiniones expresadas en dichos textos. Las contribuciones fueron propuestas por sus autores y pasaron un proceso de selección, durante el cual fueron revisadas por un comité de programa. Por favor, use el siguiente formato para citar material de este libro: Autor(es), “Tı́tulo del artı́culo”, en Actas de las III Jornadas Andaluzas de Software Libre, A. Cepeda, A. Arauzo, A. Luque, Editores, números de página (2003). ISBN: 84-88783-66-3 Publicado por: ADALA, Asociación para la Difusión y el Avance del Software Libre de Andalucı́a http://www.adala.org GCUBO, Grupo de Usuarios de GNU/Linux de Granada http://www.gcubo.org Biblioteca de la Escuela Superior de Ingenieros de Sevilla http://www.esi.us.es/BIB Copyright c 2003, ADALA y GCUBO Copyright c 2003, Los autores de cada contribución Se otorga permiso para copiar y distribuir este documento bajo los términos de la Licencia de Documentación Libre GNU, publicada por la Free Software Foundation, cubriendo las secciones invariantes el documento completo. Impreso en España. Tanto los trabajos individuales como las actas completas se pueden descargar en la página web http://www.adala.org/jasl3/. 2 Índice General Comité de programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Artı́culos presentados El kernel linux 2.6: Presente y futuro Alejandro Sánchez Acosta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Cherokee Web server Álvaro López Ortega . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Reciclaje y Software Libre: Una Solución para la Enseñanza Juan Pablo Sánchez Beltrán . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 Espiral de valores: técnicas avanzadas de programación PHP Diego Arranz y Javier Linares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Legislación europea y el Open Source / Free Software José M. Fidel Santiago Luque . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 La Intranet Educativa Municipal del Ayuntamiento de La Coruña Enrique Ocaña González . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 PROPIEDAD, S.L.: Propiedad y software libre José J. Grimaldos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 Una arquitectura para el desarrollo de sistemas de gestión empresarial. La Arquitectura AF y ASPL Fact. Francis Brosnan Blázquez, David Marı́n Carreño y Marcos Olmos Domı́nguez . . . . . . . . . . . . . . . . . . . . . . . . 64 Gentoo Linux: filosofı́a e introducción José Alberto Suárez López . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 Plone - Taller y experiencia docente Gregorio Robles y Jesús M. González Barahona . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 3 4 Comité de programa Antonio Buiza Calero, Adala Alfonso Cepeda Caballos, Universidad de Sevilla Antonio Luque Estepa, Universidad de Sevilla Rafael Martı́n de Agar Tirado, Emergya, S.L. Juan J. Merelo, Universidad de Granada Daniel Molina, GCubo 5 6 Presentación En el presente volumen se recogen las contribuciones presentadas a las III Jornadas Andaluzas de Software Libre, JASL3, celebradas en Granada durante los dı́as 14 y 15 de noviembre de 2003. El software libre son todos los programas o aplicaciones para ordenadores u otros dispositivos electrónicos que nos permiten hacer uso de las tres famosas libertades: -Libertad de usarlo sin ninguna restricción, ni económica ni de ningún otro tipo de discriminación social. -Libertad para ver como esta hecho, aprender de él y modificarlo. -Libertad de poder distribuirlo, tanto en su versión original como las posibles versiones modificadas. Como todo aquello que permite aumentar la libertad, el software libre es un desarrollo muy interesante para la sociedad. Ası́ parece que esta empezando a percibirse por un número de personas cada vez mayor. El software libre ya no sólo se conoce dentro del ámbito técnico de la informática, al que se encontraba reducido hasta hace pocos años, sino que está empezando a ser usado ampliamente en proyectos educativos, en las administraciones públicas de muchos lugares del mundo y en numerosas empresas. Esta tercera edición de las Jornadas Andaluzas de Software Libre se celebra en un ambiente muy positivo, en el que todos los que nos consideramos pertenecientes a la comunidad del software libre nos alegramos por gran la expansión que el software libre está experimentando. Podemos mencionar especialmente la iniciativa Guadalinex de la Junta de Andalucı́a, que a semejanza con el proyecto de la Junta de Extremadura (Linex), pretende equipar los centros docentes con nuevas tecnologı́as eligiendo al software libre como protagonista. Esta sabia elección, además de conseguir numerosas ventajas en ahorro de costes, igualdad, y libertad en el uso de las nuevas tecnolog?as, puede suponer un apoyo muy fuerte al avance del software libre. Un avance esperamos que se produzca, tanto por el impulso de nuevos proyectos de desarrollo, como por la difusión de las ideas y el propio software masivamente. Todo esto redundará sin duda en ventajas todavı́a mayores para la sociedad, cerrando de esta manera un beneficioso circulo virtuoso. Considerando la idoneidad del software libre para ser aplicado en tareas de educación, y la importancia del desarrollo del proyecto Guadalinex, el tema elegido para las jornadas ha sido “El software libre y la educación”. Entre las comunicaciones presentadas en esta publicación, todas ellas con un alto grado de calidad, encontramos algunas relacionadas directamente con la educación y otras con los últimos desarrollos técnicos y cuestiones sociales relacionadas con el mundo del software libre. Esperamos que las ponencias os resulten interesantes y que todos disfrutemos con los actos organizados en estas Jornadas. Finalmente nos gustarı́a agradecer su apoyo a todas las entidades y personas que han colaborado en el desarrollo de las JASL3, y especialmente a los autores que han enviado sus trabajos. Antonio Arauzo Azofra Lorenzo Gil Sánchez Comité organizador de las III JASL 7 El pasado de 27 de septiembre se cumplieron 20 años desde el anuncio oficial del proyecto GNU. Cuando en 1983 Richard Stallman mandó aquél famoso correo electrónico a los grupos de noticias nadie, seguro que ni siquiera él, imaginaba las repercusiones que tendrı́a. Su original idea trajo al apasionante mundo del desarrollo de software una libertad muy necesaria que, por otro lado, ya existı́a en otras áreas del conocimiento humano y que desgraciadamente se sigue echando en falta en otras. Su proyecto se resume, nada más y nada menos, en crear una nueva implementación del sistema operativo Unix que tenga los siguientes requisitos: (0) libertad de usar un programa con cualquier propósito (1) libertad de estudiar cómo funciona un programa y adaptarlo a tus necesidades (el acceso al código fuente es una condición previa) (2) libertad de distribuir copias y ası́ ayudar a tu vecino (3) libertad de mejorar el programa y hacer públicas las mejoras a los demás, de modo que toda la comunidad se beneficie. En estos 20 años son muchas cosas las que han sucedido, pero quizás haya una que las resume a todas: se ha diseñado una nueva forma de desarrollar programas; ha nacido y madurado el software libre. Puede que no sea el único modelo válido, ni siquiera el mejor, pero es el que nos define, nos divierte y por el que apostamos. Muchas son sus particularidades, y una de las más importantes ha sido la de crear una comunidad dinámica, dispuesta a mejorarse y a mejorar su entorno. Y ese espı́ritu, precisamente ese, fue el que gobernó, gobierna y gobernará las Jornadas Andaluzas de Software Libre que, este año, se han celebrado en Granada prestando especial interés a la ı́ntima relación que creemos existe entre el software libre y la educación. Confiamos, por tanto, que estas ponencias fruto de las mencionadas Jornadas y aquı́ publicadas sean de su interés. Por último, agradecer sinceramente la labor realizada por los numerosos voluntarios de la organización, a los ponentes por participar con sus trabajos y a los organismos públicos y privados por la colaboración prestada. Antonio M. Zugaldı́a Rodrı́qued-Campra Presidente de GCubo 8 Probablemente, 2003 haya marcado un punto de inflexión en la relación de Andalucı́a con el software libre. Tras el Decreto 72/2003, de 18 de marzo, de Medidas de Impulso de la Sociedad del Conocimiento en Andalucı́a, la apuesta de la Junta de Andalucı́a por el uso del software libre en la administración autonómica nos ha situado en el punto de mira de la comunidad. Las medidas promovidas por este decreto ya se han dejado notar, especialmente en el ámbito educativo, donde la incorporación de más de 20.000 PCs equipados con GNU/Linux para los alumnos y profesores de 100 centros de enseñanza ha supuesto el comienzo de la iniciativa Guadalinex, destinada a promocionar el uso de software libre por parte de todos los ciudadanos andaluces. Por ello, las III Jornadas Andaluzas de Software Libre están dedicadas al empleo de software libre en la enseñanza, como vehı́culo para facilitar la incorporación de nuestro sistema educativo al tren de las nuevas tecnologı́as. En esta coyuntura, las Jornadas han despertado un nivel de expectación superior al de ediciones anteriores. Los apoyos institucionales y empresariales, el nivel de los trabajos presentados y las previsiones de asistencia de público hacen suponer el éxito de unas Jornadas llamadas a convertirse en el punto de encuentro de la comunidad del software libre en Andalucı́a, de acuerdo al espı́ritu con el que nacieron y que, este año, se ve reflejado en la impagable colaboración de GCubo en la organización del evento en Granada. Daniel Carrión Reinoso Presidente de ADALA 9 El kernel linux 2.6: Presente y futuro. Alejandro Sánchez Acosta kernelnewbies-es [email protected] 1. Introduccion al kernel 2.5.x. El kernel 2.5.x nos trae numerosas mejoras que harán del kernel 2.6 que los usuarios notemos notables diferencias ya que son muchas las mejoras que nos trae, entre ellas un nuevo planificador de procesos, mejora de escalabilidad, soporte para máquinas NUMA, una completa CryptoAPI, un nuevo sistema de configuración, soporte para hilos, así entre muchas más que iremos viendo a continuación. En este articulo se intentará hacer una visión global de cada una de las nuevas características que nos provee la rama 2.5.x para lo que vendrá a ser el kernel 2.6, planificada su primera versión para finales de Octubre en fechas de Halloween según el propio Linus Torvalds. 2. Nuevo planificador de Ingo Molnar O(1) Así que voy a empezar por el Scheduler de Ingo Molnar (Desarrollador de Redhat): (Basándome en parte en la informacion disponible en Documentation/sched-design.txt y en las fuentes del kernel.) Como todos sabemos cuando el número de procesos es mayor que el número de procesadores, es necesario alternar entre los diferentes procesos, de manera de que a cada proceso le parezca que se esta ejecutando continuamente y al mismo tiempo. El scheduler o planificador del actual 2.4.x tenía problemas, principalmente de escalabilidad. Consta de una lista global de procesos de la que ahí, el scheduler escoge el que cree mas adecuado según los algoritmos que utilicee. EL problema de tener una lista global, es que para accederla hay que usar mecanismos de bloqueo, esto implica que cuando una CPU queda libre y llama al scheduler para buscar una nueva tarea para hacer, no puede hacerlo si hay otra cpu en ese mismo instante haciendolo, tendrá que esperar a que termine antes de empezar ella. Por supuesto, a mayor número de CPUs mayor contención se crea, las CPUs se quedan esperando a que el bloqueo se libere, y mientras tanto no pueden ejecutar ningún proceso. Aparte, el algoritmo que deduce que proceso es el más adecuado para ejecutar, tampoco es escalable con respecto al número de procesos. Para decidir que proceso se ha de ejecutar se tiene que recorrer _toda_ la lista de procesos. Esto está muy bien si sólo hay, pongamos, 10 procesos pero si hay 10000, significa que tiene que recorrer la lista de 10000 procesos y esto consume mucha CPU, más según aumenta el número de procesos por lo que esto es un algoritmo no-óptimo. La solución de Ingo Molnar arregla estos dos problemas: En el scheduler de Ingo Molnar, no hay una lista global de procesos, sino una lista de procesos por cada CPU, esto significa que no hay un bloqueo global y por lo tanto que cada CPU puede terminar un proceso, decidir que proceso será el siguiente a ejecutar, ejecutarle, expedirlo cuando haya pasado su cuanto de tiempo (time slice), individualmente, sin intervernir para nada con el resto de las listas de procesos de las otras CPUs por lo que esto hace que la escalabilidad en SMP sea "perfecta". Esto ISBN 84-88783-66-3 ©2003 10 El kernel linux 2.6: Presente y futuro. podría hacer que en una CPU se terminaran todos los procesos y en otra no, para ello existe un hilo del kernel en cada CPU que periodicamente se encarga de balancear los procesos entre las CPUs que haya en dado sistema. La solución al otro problema es un algoritmo completamente O(1). Ya no se necesita recorrer toda la lista de procesos. Existe una máscara de bits sobre cada array (más detalles en Documentation/sched-design.txt), por lo que encontrar el proceso a ejecutar es cuestión de una simple operación de bits (dos instrucciones de CPU en x86 segun el documento referido anteriormente). Es decir, aunque el numero de procesos sea 100000, cuesta muy poco encontrar el siguiente proceso a ejecutar por lo que nos encontramos con un algoritmo altamente eficiente de una complejidad lineal O(1). Otra cosa que nos trae este scheduler es una nueva política de planificación conocida como "batch scheduling". Cuando una tarea está en "batch scheduling" (SCHED_BATH), significa que esta tarea no se ejecutará hasta que todos los procesos hayan agotado sus "timeslices" (el tiempo durante el cual un proceso tiene oportunidad de ejecutarse). Es decir, en el scheduler hay prioridades (nice), pero siempre hay alguna oportunidad de que un proceso con nice 0 se ejecute aunque haya procesos con nice -12 por ejemplo (si no lo hiciera, ese scheduler no estaría funcionando correctamente). Con el batch scheduling, se asegura de que una tarea no interfiera en absoluto con el resto del sistema. 3. Inversión de prioridades El batch scheduling trae algunos efectos negativos que cabe resaltar, como es la inversion de prioridades, algo que NO esta solucionado en linux (si en otros sistemas operativos, como NT). Haré una descripción corta de lo que hace la inversión de prioridades para ver como esto puede afectar negativamente en algunos casos. Pongamos que tenemos tres procesos: A, B y C. El proceso A es una tarea que se ejecuta con prioridad alta, la B con una normal (nice 0), y la C como SCHED_BATCH (muy baja). Pongamos que esta tarea C adquiere un bloqueo, que necesita ser liberado para que A se ejecute. Ahora pongamos que la tarea B necesita ejecutarse: como la tarea C no se ejecutará hasta que la B termine, el resultado es que la tarea B se ejecuta y la A no; es decir, la tarea B acaba ejecutándose como si tuviera la prioridad de A (de ahi "inversion de prioridades"). La solucion a esto es la "herencia de prioridades": Si quieres que la tarea A se ejecute, lo que necesitas es dar la prioridad de A a C. Si, se invierten las prioridades predefinidas; pero el hecho es que la única manera de que se ejecute A es que C termine lo mas rápido posible y esto que parece tan simple así, no es tan fácil de implementar. Aparte, hay gente a la que esta solucion no le parece la más adecuada. Aparte de todo esto, los algoritmos que se han diseñado de nuevo en muchos casos consiguen asegurar una buena interactividad, que no haya "casos esquina", ,por lo que se consigue una mayor eficiencia en la mayoría de los problemas que venían dándose en kernels 2.4.x consiguiendo una buena planificación de los procesos del sistema. También ha habido muchos, muchos cambios en el soporte threads por Ingo Molnar, estos cambios han venido dados dentro de la libc consiguiendose hilos en espacio de kernel en relación 1:1 al igual que recientemente se ha añadido lo que se conoce como TLS o Thread Local Storage para el uso de segmentos distintos en el uso de threads teniendo secciones dedicadas a cada hilo como .tbss, pero en el tema de hilos se comentará más adelante. 4. Conceptos sobre la antigua planificación. Bien, como principal ventaja se observa que se mejora notablemente la escabilidad debido a que se añaden listas para el manejo de procesos en cada una de las CPU’s. En caso de sistemas uniprocesador lo que se hacía antes era directamente recurrir a la lista de procesos en ejecución run_task_list y a la run_task_queue list, la cual se recorría cada uno de los procesos y se miraba si el proceso era adecuado para pasar a CPU, esto se hacía por un medio de un algoritmo que decía si era optimo por medio de la función goodness() que realizaba el propio planificador en la llamada a shedule(). 11 El kernel linux 2.6: Presente y futuro. Luego para realizar la planificación lo que se hacía era directamente llamar a la rutina shedule() que lo que hacía era realizar la planificación de los procesos y era provocada tanto indirectamente como de una manera provocada (current->need_resched=1) para que se llamase a este. De forma indirecta se hacía cuando se realizaba un ret_from_intr() y se hacía directamente llamando al propio shedule() una vez habiendo puesto current al state TASK_INTERRUMPIBLE o TASK_UNINTERRUMPIBLE. En cuanto al cambio de procesos, el cambio se realiza mediante la rutina __switch_to() que está definida en arch/tipo_arch/process.c. Me imagino que estará dentro de las policies como venía antes dentro de task_struct, yo que recuerde unicamente he visto SHED_RR, SHED_FIFO, SHED_OTHER y SHED_YIELD. Como se ha visto se introduce SHED_BATCH que irá a tratar una planificación con procesos que no necesitan la interaccion del usuario tales como puede ser la compilación de un programa o de un proceso que esté realizando una búsqueda o cualquier cosa similar, en su caso previamente se ha abarcado introduciendo el nuevo planificador. 5. Mejora del algoritmo de asignación de PID’s Abundando un poco sobre el mismo tema de la escalabilidad, pero en este caso recurriendo sólo a mi memoria y no a un enlace donde se sustente lo que digo a continuación, parece que otra de las mejoras ha sido modificar el algoritmo para encontrar el PID para el siguiente proceso que se cree. Según parece la complejidad del algoritmo que daba un PID para asignarlo al siguiente proceso que crear era de complejidad cuadrática O(n^2) y lo que hacía era que cuantos más procesos había en la máquina más costoso en tiempo fuera obtener un PID libre. Evidentemente no es habitual (por ahora) tener en la máquina tantos procesos como para que se note la merma del rendimiento sólo para encontrar el siguiente PID, pero con los recientes avances en el soporte multihebra del núcleo (principalmente la NPTL de la gente de libc e Ingo Molnar) y con sus pruebas de decenas de miles de threads simultáneos (que mapearían a igual número de procesos del núcleo, pues si no recuerdo mal NPTL es un modelo 1:1, el algoritmo mencionado era subóptimo). 6. Preemptividad Mucha gente ya ha probado los parches de preempt para el 2.4 (al igual que los del scheduler). Cuando se habla de preempt, se quiere decir que un proceso pueda interrumpirse y que se pueda pasar a ejecutar otro. Esto ya existía en linux, pero sólo en espacio de usuario: EL kernel puede interrumpir un proceso para atender a un evento externo y dar la ejecucion a otro programa. Sin embargo, en el momento en el que un proceso ejecuta una llamada al sistema y pasa a ejecutar codigo del kernel, hasta que no vuelva al espacio de usuario no se puede interrumpir. Me explico: Si una aplicacion hace un read(), el kernel ejecutara todo la llamada del sistema desde la llamada hasta la peticion a disco; y devolvera el valor a quien lo llamo. En todo ese transito por el kernel, el propio kernel no puede ser interrumpido. Con Preempt, es posible que durante esa llamada, el propio kernel se interrumpa así mismo y pase a ejecutar otra operación totalmente distinta. 7. Parches de preemptividad y baja latencia. Algo de lo que me parece muy interesante son los parches de preemptivo y baja latencia, probándolos ambos se demostraba que el tiempo de latencia se disminuía considerablemente. Por ejemplo, se decía que al aplicar el parche de baja latencia se conseguía una latencia de 1.2 milisegundos, pero si se dejaba durante 24 horas el sistema encencido aumentaba considerablemente a cantidades de cerca de los 250 milisegundos, sin embargo con el uso 12 El kernel linux 2.6: Presente y futuro. del parche preemptivo junto con el de baja latencia se conseguían unas latencias de 1.5 milesegundos después de bastante tiempo, por lo que se adoptó la solución de la unión de ambos para conseguir soluciones con latencias mínimas. En cuanto al tipo de latencia es al que se considera latencia de planificación, el cual se entiende como el tiempo entre que un proceso tarda en despertar. Por ejemplo, cuando tenemos un proceso en un estado TASK_INTERRUMPIBLE se tiene que pasar al estado de listo TASK_RUNNING mediante sleep_on() o rutinas similares que se encargan de cambiar el estado del proceso para que esté listo para ejecutarse por la CPU, pues el tiempo entre el que se le manda una señal para que ese proceso despierte y responda se entiende por latencia de planificación. Que un proceso despierte puede ser causado tanto por una interrupción software como una interrupción hardware, recordad que la unica forma de retomar un proceso en TASK_UNINTERRUMPIBLE es a través de que se produzca una interrupción hardware que lo despierte. Luego entre otros tipos también se encuentra la latencia de interrupciones que es la cantidad de tiempo que pasa entre que se produce una interrupción y se llama a la rutina de atención a interrupción (RAI). Siempre que se produce una interrupción cuando vuelve del manejador de interrupciones lo que se hace es fijar a "1" need_resched por lo que se llama de nuevo al planificador (schedule()). Según Ingo Molnar es que este tiempo de latencia de interrupciones suele ser de 10 microsegundos frente a los pocos que se realizan en la latencia de planificación. En definitiva, lo que se suele decir es que principalmente afecta el tener una gran latencia en que el kernel no responde rapidamente a eventos producidos por E/S, esto se nota considerablemente en cuando estais reproduciendo un video ya que se accede considerablemente a disco. La solución que se adopta es la de hacer uso del planificador más regularmente pero esto se trata de un problema porque se van a necesitar gastar ciclos de reloj de CPU para que periodicamente se llame al planificador de forma más frecuente, así que como solución que se adopta es que el planificador se ejecute cuando se produzca un evento, tal como una interrupción. En sistemas de tiempo real se consigue considerablemente bajar el tiempo de latencia, pero el kernel linux al no ser preemptivo (ahora sí) se tiene que estar pendiente constantemente de los procesos o hilos (kernel_thread) y seguir las políticas de planificación para ello establecidas (SCHED_FIFO, SCHED_RR o SCHED_OTHER), por ello lo que se adopta es un planificador en tiempo real al igual que un parche para que se consiga preemptividad y se puedan expulsar del procesador procesos/hilos en espacio de kernel. Esta solución vino dada por una compañia de sistemas empotrados conocida como Montavista que introdujeron tanto un planificador en tiempo de real como un parche de preemtividad que actualmente están mantenidos por Robert M. Love. En cuanto lo que hacen los parches de preempt lo que hacen es modificar las macros de spinlocks y el retorno de interrupción de forma que sea segura (mediante el uso de exclusión mutua) poder expedir el proceso actual y replanificarlo luego cuando se necesario. Luego hay una API para asegurarnos si el hilo o proceso ha sido expedido o no , esto se sabe mediante funciones como preempt_enable() y preempt_disable() que modifican el valor preempt_count que nos indica si ha sido expedido o no, en caso de ser el valor 0 se llama al planificador mediante preempt_schedule(). Luego para tanto el uso de enable como disable se utilizan spin_lock() y spin_unlock() para la modificación de dicho contador. Con esto lo que se consigue es bajar notablemente la latencia por medio de la expedición de procesos, pero también queda comentar el parche de baja latencia que fue introducido por Ingo Molnar y ahora está mantenido por uno de los antiguos desarrolladores del core de OpenBSD, Andrew Morton. La idea de esto es buscar partes de código donde se produzcan largas iteraciones de tiempo y mientras se pueda hacer una llamada al planificador. Para ello lo que se hace es buscar zonas/bloques de código donde se pueda llamar a schedule(), esto se hace por una herramienta de Andrew Morton llamada rtc-debug que lo que modifica es el rtc timer que busca tiempos en el que las latencias son mayores que un determinado valor generando un syslog o log del sistema. Luego en este fichero se mira entre las rutinas indicadas que mayor latencia tienen e inserta lo que se llama un punto de preemptividad. Un ejemplo está en la parte que se hace de busqueda de una disk caché que se hacen largas iteraciones (función prune_dcache() en la que se pone un contador DEFINE_RESCHED_COUNT que se incrementa en cada bucle sobre el que itera hasta que llega a un determinado valor y se realiza una planificación incondicional: 13 El kernel linux 2.6: Presente y futuro. if (TEST_RESCHED_COUNT(100)) { RESET_RESCHED_COUNT(); if (conditional_schedule_needed()) { spin_unlock(&dcache_lock); unconditional_schedule(); goto redo; } } El redo unicamente salta otra vez al principio donde se estaba iterando para seguir por donde iba después de haberse realizado una planificación incondicional. Y nada esto son los dos parches, luego pruebas que se suelen hacer para probar los parches son como scripts que continuamente compilan el kernel X veces, programas que mandan/reciben constantemente grandes bloques de paquetes por el dispositivo loopback, operaciones con números largos con matrices o escrituras/lecturas con ficheros grandes para ver sus tiempos de latencia. 8. Parches para VM rmap RMAP: Otro delos famosos parches para 2.4, que ha sido llevado al 2.5, este parche conocido como RMAP viene del nombre anglosajón "reverse mapping". El esquema del kernel 2.4.x es el siguiente: Los procesos ven direcciones virtuales de la memoria. Es decir, un programa puede ver la dirección X, y otro ver la misma direccion X y ser en realidad direcciones completamente distintas fisicamente. Los procesos tienen tablas de paginas (PTEs), donde se guarda la correspondencia linear>fisica de cada proceso. Asi, si un proceso quiere acceder a la direccion FOO de memoria, el kernel consulta esa tabla y ve que es la direccion BAR de memoria fisica. Realmente este esquema es algo más complejo de explicar pero con estas nociones se puede llegar a entender basicamente que es lo que se hace, por ejemplo también se hace uso de TLB’s para guardar las traducciones de direcciones lineales a direcciones físicas, recordar unicamente que estamos en un sistema con segmentación paginada y mediante segmentación se hace la traducción a direcciones lineales y por medio de paginación a direcciones físicas mediante la consulta de tablas diferenciandose de si estamos trabajando en modo extendido o no y variando el tamaño de página entre estas, en este caso no habrá que complicarnos porque linux utiliza tamaño de páginas de 4kb’s. Continuando con lo de antes, los procesos pueden compartir memoria. Es decir, la dirección X de un proceso y la Y de otro pueden ser la direccion física Z. El problema viene cuando el kernel necesita liberar memoria física RAM y decide liberar la página Z porque no se usa, tiene que marcar esas direcciones en cada tabla y por medio del bit Present se indica si está en memoria o swap. Posteriormente entonces, se tienen que recorrer _TODAS_ las tablas de paginas de procesos, para encontrar que procesos tienen mapeadas esa memoria Z. Esto esta muy bien si hay 2 procesos, pero imaginemos 1000 procesos compartiendo 1 GB de memoria, la sobrecarga de CPU que esto implica es sencillamente inmensa, produciendo sobrecargas de O(2^n) en algunos casos. Con rmap, lo que se hace es conservar una tabla de paginas fisicas->lineares. Es decir, cuando el kernel quiera liberar la pagina Z; rmap le contestará que los procesos a, b y c lo estan usando, con lo cual la sobrecarga de CPU en esos casos de los que hablabamos se reduce enormemente. Esto tiene sus costes, como todo, y es que las tablas de páginas ocupan un tamaño. Sin embargo, este esquema no sólo permite reducir la carga de CPU en esos raros casos, sino que permite hacer decisiones más avanzadas a la hora de decidir si una página hay que llevarsela a swap o no, si se ha utilizado recientemente, la edad de la página, etcétera. Esta es la parte del parche de rmap que se ha incluido en 2.5.x de Rik van Riel junto con otras optimizaciones que conforme nuevas versiones del 2.5.x van saliendo se van incorporando. 14 El kernel linux 2.6: Presente y futuro. 9. Nuevas implementaciones de hilos en espacio de kernel. Al respecto del soporte de multithreading, aparte de la aparición "nocturna, alevosa y por sorpresa" de NPTL, tenemos NGPT (la implementación de threads M:N de IBM), que en su reciente versión 2.2 parece que recupera el terreno perdido con respecto a NPTL en el campo de la velocidad de ejecución. Ahora mismo en 2.5.x parece haber soporte para dos tipos de hilos. A principios de 2.5.4 se integró una versión "antigua" de NGPT (http://oss.software.ibm.com/developerworks/opensource/pthreads/), de IBM, con modelo M:N. Posteriormente en 2.5.32 se integró una versión preliminar de NPTL, la implementación de threads 1:1 de Ingo Molnar y los desarrolladores de libc. En aquel momento se publicaron tests donde supuestamente NPTL era lo mejor desde el pan en rodajas (sliced-bread que dicen ellos ;-), pero hace pocas semanas IBM publicaba la versión 2.2.0 de NGPT donde afirman que han recuperado la diferencia de rendimiento con respecto a NPTL. Vaya usted a saber qué implementación es mejor o más conveniente, eso lo tendrán que decir los que sepan de eso, pero lo bueno es que la competencia mejora ambos proyectos y para dentro de unos meses Linux tendrá buen soporte de threads, que tantas veces la gente ha echado de menos (ahora las aplicaciones en Java irán como un tiro, salvo que la gente se crea las opiniones de la propia SUN acerca de "qué bueno" es el Java y "cuánto" lo recomiendan). 10. Trabajo en la vm y capa de buffers por Andrew Morton. Andrew Morton (de mano de Digeo, www.digeo.com) ha trabajado mucho esta parte del kernel. Sin duda, va a a tener buena parte de la culpa de que el 2.5 se "sienta" mucho mejor de cara a lo usuarios (junto con preempt). Este hombre ha reescrito gran parte de la capa de buffers, gestión de memoria, y ha dedicado gran parte del tiempo a muchas notables mejoras. El resultado es sencillamente, impresionante. Pegaré aquí el extracto de un post suyo a la lista del kernel como ejemplo: "Most of the VM gains involve situations where there are large amounts of dirty data in the machine. This has always been a big problem for Linux, and I think we’ve largely got it under control now. There are still a few issues in the page reclaim code wrt this, but they’re fairly obscure (I’m the only person who has noticed them ;)) (La mayor parte de las ganancias en la VM son bajo situaciones donde hay muchos datos "sucios" en la maquina. Esto siempre ha sido un gran problema, y creo que lo tenemos bastante bajo control ahora. Hay unos pequeños problemas en el codigo de recuperacion de paginas mientras escribo esto. Son muy oscuras (de hecho soy el unico que las ha notado ;)) There are some things which people simply have not yet noticed. (Hay algunas cosas que la gente simplemente no ha notado) Andrea’s kernel is the fastest which 2.4 has to offer; let’s tickle its weak spots: (El kernel de Andrea (Arcangeli) es lo más rápido que 2.4 tiene para ofrecer, vamos a mirar uno de sus puntos débiles) Run mke2fs against six disks at the same time, mem=1G: (Ejecutar mk2fs contra seis discos a la vez, memoria 1GB) 2.4.20-rc1aa1: 0.04s user 13.16s 0.05s user 31.53s 0.05s user 29.04s 0.05s user 31.07s 0.06s user 29.80s system system system system system 51% 63% 58% 62% 58% cpu cpu cpu cpu cpu 25.782 49.542 49.544 50.017 50.983 total total total total total 15 El kernel linux 2.6: Presente y futuro. 0.06s user 23.30s system 43% cpu 53.214 total 2.5.47-mm2: 0.04s user 2.94s 0.04s user 2.89s 0.05s user 3.00s 0.06s user 4.33s 0.06s user 4.35s 0.04s user 4.32s system system system system system system 48% 39% 37% 43% 42% 32% cpu cpu cpu cpu cpu cpu 6.168 total 7.473 total 8.152 total 9.992 total 10.484 total 13.415 total Write six 4G files to six disks in parallel, mem=1G: (Escribir seis archivos de 4GB a seis discos en paralelo, memoria 1 GB) 2.4.20-rc1aa1: 0.01s user 63.17s 0.05s user 63.43s 0.03s user 65.94s 0.01s user 66.29s 0.08s user 63.79s 0.09s user 65.22s system system system system system system 7% 7% 7% 7% 7% 7% 2.5.47-mm2: 0.03s user 53.95s 0.03s user 58.11s 0.02s user 57.43s 0.03s user 54.73s 0.03s user 54.72s 0.03s user 46.14s system system system system system system 39% 30% 30% 23% 23% 14% cpu cpu cpu cpu cpu cpu 13:53.26 14:07.17 14:36.25 14:38.01 14:45.09 14:46.95 cpu cpu cpu cpu cpu cpu 2:18.27 3:08.23 3:08.47 3:52.43 3:53.22 5:29.71 total total total total total total total total total total total total Compile a kernel while running ‘while true;do;./dbench 32;done’ against the same disk. mem=128m: (Compilar un kernel mientras se ejecuta ‘while true;do;./dbench 32;done’ contra el mismo disco. Memoria=128m) 2.4.20-rc1aa1: Throughput 17.7491 MB/sec (NB=22.1863 MB/sec 177.491 MBit/sec) Throughput 16.6311 MB/sec (NB=20.7888 MB/sec 166.311 MBit/sec) Throughput 17.0409 MB/sec (NB=21.3012 MB/sec 170.409 MBit/sec) Throughput 17.4876 MB/sec (NB=21.8595 MB/sec 174.876 MBit/sec) Throughput 15.3017 MB/sec (NB=19.1271 MB/sec 153.017 MBit/sec) Throughput 18.0726 MB/sec (NB=22.5907 MB/sec 180.726 MBit/sec) Throughput 18.2769 MB/sec (NB=22.8461 MB/sec 182.769 MBit/sec) Throughput 19.152 MB/sec (NB=23.94 MB/sec 191.52 MBit/sec) Throughput 14.2632 MB/sec (NB=17.8291 MB/sec 142.632 MBit/sec) Throughput 20.5007 MB/sec (NB=25.6258 MB/sec 205.007 MBit/sec) Throughput 24.9471 MB/sec (NB=31.1838 MB/sec 249.471 MBit/sec) Throughput 20.36 MB/sec (NB=25.45 MB/sec 203.6 MBit/sec) make -j4 bzImage 412.28s user 36.90s system 15% cpu 47:11.14 total 2.5.46: Throughput 19.3907 MB/sec (NB=24.2383 MB/sec 193.907 MBit/sec) Throughput 16.6765 MB/sec (NB=20.8456 MB/sec 166.765 MBit/sec) make -j4 bzImage 412.16s user 36.92s system 83% cpu 8:55.74 total 16 El kernel linux 2.6: Presente y futuro. 2.5.47-mm2: Throughput 15.0539 MB/sec (NB=18.8174 MB/sec 150.539 MBit/sec) Throughput 21.6388 MB/sec (NB=27.0485 MB/sec 216.388 MBit/sec) make -j4 bzImage 413.88s user 35.90s system 94% cpu 7:56.68 total - fifo_batch strikes again It’s the "doing multiple things at the same time" which gets better; the straightline throughput of "one thing at a time" won’t change much at all. (Es el "Haciendo muchas cosas al mismo tiempo" lo que mejora; la linea de rendimiento de "una cosa a la vez" no cambiara mucho) A pesar de que parezca que para máquinas de escritorio normales los cambios no afectan, no teneis más que probar el 2.5 para comprobar que no es así. No olvidemos que el "hacer muchas cosas a la vez" implica threads; simplemente haced un recuento de procesos en GNOME para ver que ya estamos haciendo muchas cosas al mismo tiempo. El kernel 2.5 se comporta mucho mejor que el 2.4 en todo lo referente a VM/disco; se nota mucho más desahogado, más rápido. Siempre se dijo que la gestión de memoria del sistema GNU/Linux era de un nivel "medio". Mi opinion es que a partir del 2.6 la cosa va a cambiar. Tambien hay que resaltar otro párrafo de Andrew Morton en ese mismo mensaje: For the uniprocessors and small servers, there will be significant gains in some corner cases. And some losses. Quite a lot of work has gone into "fairness" issues: allowing tasks to make equal progress when the machine is under load. Not stalling tasks for unreasonable amounts of time, etc. (Para uniprocesadores y pequeños servidores, habra ganancias significantes en algunos casos esquina. Y algunas pérdidas. Bastante del trabajo ha ido en problemas de "limpieza": Permitir a tareas hacer igual trabajo cuando la maquina esta bajo carga. No "parar" las tareas por espacios de tiempos irrazonables) Y en esto se incluye el scheduler de Ingo Molnar: el 2.5 se asegura de ser más justo con los procesos. En el 2.4, un proceso se le permitiría hacer algo (por ejemplo escribir al disco) más de lo que debería cuando hay otros procesos, etcétera. Siendo así dicho proceso es más rapido, pero más "sucio". Hay que dar iguales oportunidades a todos los procesos, y esto si que beneficia muchas veces. Por ejemplo, dos procesos leyendo simultaneamente, si a uno se le deja leer demasiado, el otro podria quedarse esperando. Mientras que si se les da a ambos mas igualdad, los dos procesos podran hacer trabajo, en vez de estar uno trabajando y otro haciendo nada. Aun asi, la sensacion en cuanto a gestion de memoria/disco en 2.5 es significantemente mejor. Las ventanas no tardan tanto en redibujarse muchas veces; porque se asegura que todos los procesos (incluidos los de las ventanas) se lleven su porción de recursos correctamente. 11. Cambio del sistema de configuración a CML2. Otros de los cambios importantes en el kernel 2.5.x ha sido la reescritura de todo el sistema de configuración conocido de la rama kbuild adaptando lo que previamente era conocido como CML1 a CML2, esta parte ha sido escrita por Eric S. Raymond y Keith Owens y supone de cara al usuario un avance muy importante. Con este cambio el usuario no se va a tener la necesidad de tener que escribir multiples comandos al compilar el kernel, con un make install será suficiente para compilar nuevos kernels debido al nuevo sistema de configuración recientemente añadido. Además otros de los cambios al sistema de configuración ha sido en la interfaz gráfica, ahora en vez de make xconfig y tener una interfaz gráfica en XLib podemos mediante gconfig y kconfig tener una interfaz gráfica más integrada tanto para GNOME con gtk+ como con KDE con las librerias QT. 17 El kernel linux 2.6: Presente y futuro. 12. Soporte Hiperthreading Una de las características que también se han añadido en el kernel 2.5, es el soporte hiperthreading para aquellas máquinas que lo soporten, especificamente en ordenadores personales más de cara al usuario como podría ser el Pentium Xeon. Para entender bien lo que es hiperthreading habría que entender a su antecesor, se tata de superthreading que se basa en lo que es la multitearea o multitasking. Como muchos sabréis un procesador da la impresión de que todo lo analiza secuencialmente, pero en realidad lo que hace el procesador es una replanificación de las instrucciones, es a lo que se llama hacer una ejecución fuera de orden (OOE) que es la que usan la mayoría de las arquitecturas cuando compilamos un programa y lo ejecutamos de forma que se usen al máximo los recursos del procesador. De cara al programador no se sabe como se ejecutarán internamente todas las instrucciones, se suele decir que se trata de una caja negra para tanto el programador como el usuario. Lo mismo ocurre cuando ejecutamos varios programas, sólo uno se puede ejecutar por el procesador, ahí es donde entra en juego lo que se llama la multitarea que nos hace pensar que varios programas se están ejecutando en la CPU, sin embargo como ya sabreis se le asigna un cuanto de tiempo que hace que en determinado momento se expida el proceso de la CPU, en espacio de kernel ahora posible gracias al parche preempt del kernel, con esto sólo aclarar el concepto de multitarea sin entrar en detalles. El cuanto de tiempo es posible llevarlo a cabo por el sistema operativo, pero internamente la CPU tiene un «time slice» definido. 13. CryptoAPI En 2.5.x se ha introducido lo que se conoce como CryptoAPI, este proyecto nació a partir de lo que era el proyecto kerneli que trataba de encriptar sistemas de ficheros mediante el dispositivo loop por medio de AES, el archiconocido algoritmo Rhijndael. Posteriormente a raiz de este proyecto lo que se hizo fue implementar un amplio número de algoritmos criptográficos dentro de espacio de kernel en la que mediante una API sencilla se pudiese cifrar y descifrar por medio de distintos algoritmos como DES, RSA, RC, SHA, MD5 entre otros. Como consecuencia esto facilitará labores como el cifrado de sistemas de ficheros, implementación de tarjetas criptografícas y la propia de implementación de VPN’s por medio de IPsec sin la necesidad de usar freeswan y utilizando directamente lo que es la propia CryptoAPI. 14. Linux Security Modules (LSM) Este proyecto surgió en la Linux Kernel Summit a raiz de que en marzo del 2001 la agencia de seguridad nacional dio una charla dando a conocer lo importante que sería la seguridad dentro del kernel linux, a raiz de esto surgieron varios proyectos que acabaron juntandose y dandose a conocer como LSM, ya que en si formaban un conjunto de módulos que se adaptaban dentro del kernel de la misma forma que lo hacían los LKM’s o modulos del kernel de Linux. Estos módulos de lo que se encargaban era de introducir una serie de ganchos o hooks dentro del kernel para que se realizase de forma totalmente segura determinadas operaciones en el kernel relativas a operaciones con ficheros, inodos, gestión de I/O filtrado de paquetes en netfilter y así un largo etcétera, todo esto llevado por medio de lo que era una syscall llamada security (sys_security()) y lo que eran las operaciones de seguridad conocidas como security_operations. Este proyecto fue liderado por Wirex, incluyendo todos los proyectos previamente ya hechos como eran Inmunix, SELinux, SGI y Janus por medio de desarrolladores como Greg HG (mantenedor de USB) y James Morris (desarrollador de la CryptoAPI) y finalmente en 2.5 Linus los incluyó dentro de la rama oficial del kernel. 18 El kernel linux 2.6: Presente y futuro. Otras de las características importantes es que se ha movido todas las capabilities dentro de LSM, estas son las encargadas de que se realicen de forma segura ciertas operaciones, por ejemplo, para poder cargar un módulo u otra operación relacionada necesitamos que esté activado CAP_SYS_MODULE, al igual que esto hay una gran rama de capabilities dentro de security/capability.c. 15. Soporte Bluetooth La tecnología bluetooth para la interconexión entre dispositivos vino dada por dos proyectos conocidos como Blues y OpenBT, el primero previamente añadido dentro de la rama estable del kernel 2.4.x soportando los tres tipos de pila bluetooth disponibles junto a todos sus servicios. El proyecto OpenBT se está planteando añadir dentro de la rama del kernel, es totalmente portable a numerosas arquitecturas al igual que añade mejoras sobre la pila implementada en 2.4 con el proyecto Blues. Así que en cuanto a comentar de la tecnología Bluetooth es el añadido de nuevos drivers al igual que la escritura de la capa que venía dada en 2.4 por el proyecto Blues consiguiendo un mayor soporte para la interconexión de dispositivos por medio de esta tecnología sin cables conocida como Bluetooth. 16. Otras características del kernel 2.5.x Son muchas las mejoras que nos ofrece el kernel 2.5.x y todas muy extensas de tratar, por lo que aquí comentaré brevemente otras de las funcionalidades que se le han añadido. Así características añadidas son el soporte para dispositivos que usen USB 2.0 que nos permite unas tasas mayores de transferencias gracias a la implementación de esta nueva especificación, el soporte para AGP 3.0, la inclusión de ACPI en sustitución de lo que venía siendo APM, una mejora en el soporte de sonido gracias a ALSA en sustitución de OSS, reescritura de la API de framebuffer, el uso de la Linux Console con soporte para todo tipos de fuentes, fribidi, reescritura de la capa de tty’s . el nuevo planificador de I/O añadido conocido como anticipatory scheduller que mejora la escritura/lectura haciendo que se consigan tiempos de latencia muy pequeños al igual que el deadline scheduller por Andrew Morton. Luego también comentar la inclusión de otros sistemas de ficheros como XFS, ReiserFS, JFS, reescritura de la capa IDE, soporte para arquitecturas de 64 bits como Opteron, Hammer, PPC64, mejora en algunos sistemas de ficheros como smbfs para Samba, hotplugging de CPU, uso de futuxes y soporte para TLS. 17. Conclusiones del kernel 2.5 En definitiva, esta es la primera ronda de novedades que nos trae el 2.5. Supongo (y no me equivoco) que hay gente todavia que no ha probado el 2.5. La mayoria de las veces es miedo a que algo no funcione, a que haya corrupcion o que exista un problema relacionado por pensar que al ser una rama inestable va a ocasionar problemas. Decir lo siguiente: 1. Yo personalmente utilizo 2.5 en esta máquina; y lleva casi 12 horas, y así hace todos los días, no negare que de vez en cuando se me ha colgado, pero lo que hacia colgarlo ultimamente ha desaparecido. Ahora mismo sin ningún tipo de problema tiene un uptime de 15 días con 2.5.64. 2. Un oops no hace daño a nadie, simplemente es un oops. 3. Si encuentras un bug, oops, REPORTALO. Es la mejor manera de que entre todos mejoremos el kernel. 19 El kernel linux 2.6: Presente y futuro. 4. Corrupción de disco: A pesar de los cambios que ha habido en todo este campo, (todo lo relacionado a vm, disco, sistemas de ficheros (recordar el htree orlov allocator y ACLs, nuevos juguetes para el ext3), los desarrolladores han sabido llevarlo maravillosamente bien, y no ha habido grandes bugs que hayan comido disco misteriosamente. A mi personalmente nunca me ha pasado nada, pero también porque he tenido un poco de precaución, cuando sale un nuevo kernel, espero un tiempo prudencial en espera de que aparezcan bugs, Si lo hubiera, me enteraría y no lo pondría, aparte no olvidemos que ahora Linus utiliza bitkeeper y que (a pesar de lo que Stallman y puristas puedan decir al respecto) ahora la gente prueba snapshots del árbol de Linus actualizados cada noche (se encuentran en kernel.org, en el subdirectorio snapshots; por no decir que los de bitkeeper parece ser que planean poner un cvs para que los "puristas" puedan estar al dia con su cvs). Aparte, practicamente todos los parches relacionados con este tema, pasan previamente a traves del patchset de Andrew Morton (el famoso -mm), que mucha gente prueba y donde se detectaría primero cualquier problema. En definitiva que si os sentis animados, echeis un vistazo al 2.5 y a todo lo nuevo que trae. Asi, podreis ayudar si econtrais algun bug. Como requerimientos no tiene anda especial; si recalcar que ahora hay nuevas utilidades de modulos, y que las viejas no funcionaran. Hay para debian sid un paquete; module-init-tools, en http://www.kernel.org/pub/linux/kernel/people/rusty/modules/ hay fuentes y rpms tambien. Un magnifico documento ( y ampliacion de este en muchos aspectos) si sabeis ingles es http://www.codemonkey.org.uk/post-halloween-2.5.txt , una especie de Guia de transicion al 2.5 (que cosas nuevas hay de cara al usuario, etc) de mano de Dave Jons (de suse). Mas documentos sobre el 2.5 estan en www.kernelnewbies.org/status, pagina de un proyecto que deberia estar en todos los bookmarks de aquellos que se manejen con el ingles ;) Entre otras cosas interesantes comentar el deadline io-scheduler, todas las novedades en drivers, apis, la ya no necesidad ide-scsi para grabar cds, UML, sysfs, oprofile y así un largo etcétera. Luego comentar que se ha formado una comunidad de hispanohablantes referente al desarrollo del kernel de linux, podeis visitar la página web en http://es.kernelnewbies.org, apuntaros a la lista de correo o bien visitar el canal #kernelnewbies-es de la red de irc openprojects. 18. Referencias. http://www.kernelnewbies.org: Proyecto kernelnewbies. http://es.kernelnewbies.org: Proyecto kernelnewbies en castellano. http://www.kerneljanitors.org: Proyecto kerneljanitors. http://www.kerneltrap.org. Foro de noticias. http://www.lwn.org. Noticias semanales acerca de GNU Linux. http://www.kernelnewbies.org/status. Estado actual del kernel. http://www.kernelnewbies.org/mailinglists: Listas de correo. http://listas.hispalinux.es: Lista nucleo-desarrollo correspondiente a kernelnewbies-es. 20 Cherokee Web server Alvaro López Ortega Madrid España [email protected] Cherokee es un proyecto que implementa una librería para poder dotar a toda clase de aplicaciones de servicios web de una forma fácil y rápida. En su desarrollo se realiza un esfuezo especial en mantener un core reducido - de forma que se pueda utilizar en sistemas empotrados - e implementar todas las funcionalidades como módulos cargables en tiempo de ejecución. De igual forma, la alta eficiencia y una arquitectura lo suficientemente flexible como para poder escalar a servidores SMP son características de Cherokee que pueden suponer un paso adelante respecto a los servidores web libres existentes. 1. Introducción Desde hace años, la tecnología que rodea la web tiene una importancia grandísima. Alrededor de esta tecnología se han producido grandes batallas; en unos casos por pura y sana competencia con productos que implementan una funcionalidad similar y en otros por el interés de romper los estándares. Sin ninguna duda, el vencedor indiscutible de esta batalla es Apache, un servidor web libre, que a día de hoy utiliza casi el 65% de los servidores en Internet. Cherokee es otro servidor web. Se trata de un proyecto que desarrolla una nueva implementación de este tipo de aplicación, con una serie de características y funcionalidades concretas. El fin último del proyecto no es clonar ni imitar las funcionalidades de Apache, trabajo que sería sumamente complejo e innecesario, sino hacer un servidor con unas características de las que Apache carece debido a su diseño original. Las funcionalidades de Apache son muchas y a estas hay que sumarle las que aportan los módulos y extensiones. El resultado es el que conocemos, Apache es un servidor web que puede hacer casi cualquier cosa con una flexibilidad y velocidad razonables. Ahora bien, todas estas caracteristicas positivas tienen un coste: que en algunos casos se trata de un servidor lento, que no fue diseñado como un servidor para ser empotrado, etc. En el diseño de Cherokee se han tenido en cuenta todos estos puntos en los que creíamos que Apache flaqueaba. Se ha puesto especial interés en los tres puntos siguientes: velocidad, flexibilidad y capacidad de ser empotrado. La velocidad es un punto básico en Cherokee. En el último benchmark realizado hasta el momento (http://www.alobbs.com/news/104), Cherokee fue cinco veces más rápido que Apache. Este es un punto importante a tener en cuenta para la elección del software de un sitio web con mucho tráfico (por ejemplo, un servidor de banners). Posiblemente, gracias al cambio de software, se aplace la necesidad de actualización del hardware del servidor. El segundo de los puntos en los que se ha hecho especial énfasis en el diseño de Cherokee es la flexibilidad. En este respecto Cherokee dispone de un sistema para la carga dinámica de módulos (como el soporte mod_* de Apache) ISBN 84-88783-66-3 ©2003 21 Cherokee Web server tanto para handlers como encoders y sistema de logging. Siempre que se han añadido nuevas funcionalidades, se ha hecho de la forma más modular posible: a día de hoy, prácticamente cualquier nueva característica será implementada como un módulo cargable que Cherokee utilizará o no dependiendo de la configuración de este. La última característica que se cuida con gran interés en el desarrollo de Cherokee es la capacidad para ser empotrado dentro de otras aplicaciones. Todo el código con la lógica del servidor se encuentra en una librería dinámica que puede utilizar cualquier aplicación. El API de esta librería es muy sencillo; básicamente permite crear, configurar y ejecutar de diferentes formas objetos "servidor". Existe una aplicación (http://freshmeat.net/projects/gnome-cheroke) para GNOME2 que implementa un servidor web personal (http://cvs.gnome.org/bonsai/rview.cgi?cvsroot=/cvs/gnome&dir=gnome-network) basándose en la librería de Cherokee. 2. Cherokee para los usuarios A día de hoy, Cherokee tiene tanto ventajas como inconvenientes para los usuarios. Hay que tener en cuenta que se trata de un software que actualmente sigue en desarrollo y que hay funcionalidades no terminadas sobre las que se continua trabajando. Por otro lado, se trata de un proyecto con más de dos años de vida y presenta algunas grandes ventajas sobre otras opciones. El principal inconveniente que tiene Cherokee hoy en día desde el punto de vista de un usuario final es la necesidad de un par de módulos importantes para servir contenidos dinámicos: PHP y Python. Nota: Este artículo está escrito en Septiembre del 2003, en estos momentos ya hay trabajo realizado en la implementación de ambos módulos. Es probable que para la fecha de la celebración del congreso al que va dirigido el paper (III Jornadas Andaluzas de Software Libre) ambos módulos estén terminados, probados y funcionando. Por otro lado, también existen ventajas para los usuarios finales. La velocidad para servir las páginas se plantea como la principal de ellas; crea menos carga en máquinas pequeñas o desde otro punto de vista, admite más peticiones por segundo en máquinas que funcionen al limite. Otra ventaja a tener en cuenta es que al tratarse de un servidor pensado para ser empotrado, es posible desarrollar sencillas interfaces gráficas con las que recubrirlo para que el usuario final trabaje con una herramienta mucho más amigable y no con ficheros de texto con muchas sentencias que es posible que no entienda. GNOME-Network utiliza actualmente libcherokee para implementar su aplicación de servidor web personal. Por último, Cherokee al igual que Apache, pero al contrario que al gran mayoria de servidores web libres, escala a servidor SMP y máquinas con hyperthreading. La implementación del servidor tiene una visión doble: por una parte realiza servicio de peticiones mediante time-slices, pero por la otra es capaz de manejar más de un thread y en cada uno de ellos, de nuevo, volver a procesar conexiones mediante compartición de tiempo. De esta forma Cherokee escala a máquinas con más de un procesador y al mismo tiempo mantiene el rendimiento de los servidores basados en select() o poll(). Respecto a la implementación de time-slice de Cherokee, soporta poll(), epoll() (GNU/Linux 2.6.0 o superior) y emulación de poll() mediante select() para los sistemas en los que no existe función poll() en el sistema (MacOS X, por ejemplo). 22 Cherokee Web server Figura 1. Benchmark, Cherokee 0.4.3 3. Características principales La librería de cherokee, libcherokee, implementa las características básicas de un servidor web, permitiendo cargar desde módulos muchas otras. Esta arquitectura modular ha sido elegida para permitir cargar y ejecutar únicamente las partes y funcionalidades que sean necesarias en cada caso concreto. De esta forma, se ahorran recursos, se aumenta la seguridad (menos código en ejecución implica menos posibilidad de existir un bug en él) y se disminuye ligeramente la carga del servidor web. Hay tres grandes grupos de módulos cargables: handlers, encoders, validators. Los handlers son manejadores de peticiones. Cuando el servidor procesa una petición, decide que clase de manajedor debe de utilizar para responder a dicha petición. Dependiendo de el módulo, la respuesta será una u otra. Cherokee incorpora el concepto de asociación de manejadores a directorios, de forma que el usuario puede definir que manejador desea utilizar en cada uno de los directorios servidos por web. Actualmente, se distribuyen los siguientes manejadores dentro del paquete principal de Cherokee: 1. file: Sirve ficheros al cliente 2. dirlist: Construye una página con lista de los ficheros contenidos en un directorio 3. redir: Redirecciona peticiones 4. nn: Basado en el algoritmo de "Near Neighbors" atiende las peticiones recibidas con una respuesta simple positiva 5. gnomevfs: Utiliza las librería de GNOME-VFS para atender las peticiones, de forma que es posible que sea el servidor web el que exporte ficheros localizados en ubicaciones accesibles bajo otros protocolos: NNTP, 23 Cherokee Web server FTP, HTTP (en este caso trabajaría de proxy), etc. Los encoders por su parte, son módulos que implementan una funcionalidad de conversión de la información que se va a enviar a los clientes. Actualmente, el encoder más útil es el de GZip. Este módulo comprime la información que se sirve antes de enviarla a los clientes, ahorrando ancho de banda y acelerando la transmisión. Los validadores son los módulos que implementan posibles formas de validar a los usuarios. En el momento de escribir este artículo (Septiembre 2003) se encuentran en desarrollo. Cherokee implementa módulos para validar con LDAP, PAM y htpasswd. Todos los módulos son configurables en tiempo de ejecución, normalmente mediante cadenas de texto que procesa libcherokee. 4. Cherokee para el desarrollador Desde el punto de vista de un desarrollador, Cherokee proporciona la librería (libcherokee.so) con la que dotar de las aplicaciones de servicios web. Para que un programa proporcione esta clase de servicios, lo único que tiene que hacer es linkar junto con esta librería y añadir un par de fragmentos de código adicionales. 1. La instanciación de un nuevo objeto servidor y la configuración de este. 2. El manejador (handler) o pasarela para que la aplicación exporte los datos que desee por medio de la interface web. La implementación de un nuevo manejador de peticiones no es una tarea larga; simplemente hay que implementar 5 métodos virtuales (Aunque Cherokee está escrito por completo en C, utilizamos conceptos de programación orientada a objetos ya que existe un grandísimo parecido entre estos conceptos y la implementación en Cherokee): new(), init(), free(), step() y add_headers(). De igual forma, es posible implementar nuevos encoders y validadores implementando otro pequeño número de métodos. Para consultar los nombres y los parámetros de estos métodos, se puede consultar la documentación de libcherokee o directamente los ficheros de cabezeras en el código fuente: handler.h, encoder.h o validator.h. 5. Rodmap Existe un roadmap (http://www.alobbs.com/news/124) publicado con los hitos cercanos en el desarrollo de cherokee. Al margen del desarrollo del core de Cherokee se está realizando la implementación de dos manejadores de especial importancia en el proyecto: 1. PHP4: De forma que todo el software disponible escrito en PHP se pueda utilizar bajo Cherokee. 2. Python: El objetivo de este manejador es en un primer momento, la implementación de server scripting basado en Python, y en un segundo paso la implementación de un conector para WebWare (http://webware.sourceforge.net). 6. Conclusiones Cherokee tiene dos facetas. En primer lugar la de servidor web, en la que se centra en la eficiencia y la flexibilidad; implementa las funcionalidades deseables en un servidor web moderno (http 1.1, gran modularización, compresión gzip, etc). 24 Cherokee Web server En su segundo enfoque proporciona un framework con el que dotar de funcionalidades web a las aplicaciones de una forma rápida y sencilla, de forma que cualquier aplicación pueda incorporar servicios Web. 25 Reciclaje y Software Libre: Una Solución para la Enseñanza Juan Pablo Sánchez Beltrán Presidente de TeSo, Telecomunicaciones Solidarias Las Tecnologías de la Información y de la Comunicación (TIC) proporcionan un conjunto de herramientas básicas para la sociedad actual. Su uso mejora la calidad de vida, la cohesión social, facilita el desarrollo, etc. pero exigen disponer de: • Información: que son y para que sirven. • Formación (reglada y no reglada): conocer cómo funcionan, se usan, se mantienen y se desarrollan. • Medios: hardware, software y enlaces de comunicación. • Contenidos: servicios útiles para el usuario. Para disponer de estos cuatro elementos es necesario realizar unas inversiones iniciales para la adquisición de los medios, etc. que permitan iniciar el uso de las TIC y posteriormente, y de forma periódica, realizar inversiones para mantener actualizados los conocimientos y los medios. 1. La Brecha Digital En España el parque de ordenadores personales en 2003 está alrededor de los 15 millones de unidades y se compran 1,5 millones más anualmente. Entre el 30 y el 50% de las compras se destinan a la sustitución de ordenadores obsoletos, mientras que en Estados Unidos se destinan a este fin el 75% de las nuevas adquisiciones. Por otra parte en España el número de ordenadores personales por cada 100 habitantes es de unos 37, porcentaje que es casi la mitad del existente en Estados Unidos, o visto de otra forma, estamos en los niveles que tenía Estados Unidos en 1995. España desde el año 1995 figura entre los tres países de la Comunidad Europea (CE) con menor uso de las TIC ( Ordenadores Personales, Internet, etc.) junto a Grecia y Portugal 1 Las altas inversiones necesarias para alcanzar los índices de uso de las TIC, de las que disfruta países como los Estados Unidos son prohibitivas para los países menos desarrollados, y un esfuerzo muy grande y prolongado para el resto de los países. Hay que tener en cuenta que si bien las TIC son un elemento importante, no es imprescindible, pues no es un bien de primera necesidad. Este hecho hace que sean precisamente los países ricos los únicos que disponen de recursos para invertir en TIC que a su vez le permitirán una mayor productividad y riqueza. Esta situación de desigualdad creciente en TIC entre países o grupos sociales se conoce como brecha digital. Además el desarrollo de las TIC está en manos de los países más ricos, por lo que además se crea una dependencia creciente de los países menos ricos al depender su desarrollo tecnológico de las importaciones de bienes del exterior. El problema de las pobrezas endémicas ha sido objeto de múltiples estudios y las soluciones propuestas pueden resumirse en: 1. http://europa.eu.int/information_society/eeurope/benchmarking/index_en.htm ISBN 84-88783-66-3 ©2003 26 Reciclaje y Software Libre: Una Solución para la Enseñanza • La implantación de modelos de desarrollos propios. • La financiación de los mismos a bajo coste o coste nulo. • El reaprovechamiento de los bienes y servicios. 2. Soluciones generales Los ordenadores son máquinas de propósito general por lo que un modelo puede servir para muchos fines, por ello la producción de un modelo único supone que los precios bajen a medida que aumenta la producción, siempre que el mercado no tenga imperfecciones. Esto se cumple en la práctica con el hardware, en el que incluso no valorando el efecto de la inflación, los precios disminuyen tanto de forma absoluta como relativa, pero no ocurre así con el software. Podemos encontrar cuatro tipos de soluciones que permiten la informatización: • • Modelo propietario de propósito general: Es el modelo más extendido en la actualidad. Se basa en el uso de una plataforma de propósito general denominada WINTEL compuesta por software basado en el Sistema Operativo Windows de Microsoft y hardware basado en los procesadores x86 de Intel y compatibles. La vida útil de este tipo de solución es de 4 años; con algún mantenimiento es posible alargarla hasta 8. El coste es de unos 600 a 1.800 ¤ para el Hardware (Pentium IV a 2,8 GHz, etc.) y de unos 900 ¤ para el software (Windows XP + Office XP), lo cual nos da un precio total que va de 1.500 a 2.700 ¤ por PC. Modelo propietario de propósito específico: En esta solución se elige un software específico 2 para el uso que se le va a dar al ordenador, por lo que los requisitos del hardware son menores. Con esta solución el recorte en el precio del hardware puede dividirse por 2 y del software por 6. El precio por unidad de este tipo de soluciones está sobre los 720 ¤. • Modelo abierto de propósito general: En este caso se usa software de código abierto y libre como por ejemplo LINUX y Open office. El coste del hardware es similar pero el del software puede dividirse por más de 20. El precio por unidad será menor a 660 ¤. • Modelo abierto de propósito específico: En el caso de hacer uso de una arquitectura adaptada a las necesidades3,el coste del hardware puede dividirse por más de 2 y el software por más de 20. Por lo que cada puesto de trabajo puede tener un coste menor a los 300 ¤. El software de código abierto y libre no requiere menos recursos que el software propietario, lo que si es cierto que únicamente evoluciona por necesidades técnicas y no comerciales, es decir no está presionado de forma artificial, por lo que los sistemas duran más. Duplicar la vida media es reducir a la mitad el coste de nuevas tecnologías. Por otra parte no es necesariamente gratuito pero facilita la creación de un mercado competitivo perfecto, por lo que los precios resultantes tiende a ser el precio del soporte físico, al ser una producción en serie. El uso de modelos abiertos, tanto de propósito general como específico, es una estrategia que están adoptando tanto gobiernos nacionales como regionales. 2. Ensembre Desktop de Breadbox (www.breadbox.com) es un software completo orientado a la educación que tiene un coste de 120 ¤ y usa DRDOS 7.2, un ordenador Audrey (www.audreyupgrade.com) viene a salir por unos 500 ¤. 3. Por ejemplo el ordenador Simputer (www.simputer.org) sale por menos de 300 ¤ la unidad y en un servidor LTSP (www.ltsp.org) puede facilitar puestos de trabajo por unos 60 ¤, etc. 27 Reciclaje y Software Libre: Una Solución para la Enseñanza 3. Soluciones en educación: ordenador reciclado + código abierto Hemos visto que las soluciones basadas en modelos abiertos de propósito específico son las más baratas, además estas soluciones en la enseñanza tienen una serie de valores añadidos que las hacen todavía más interesantes. La soluciones adoptadas hasta la fecha se han basado en modelos propietarios de propósito general, y con ellas los resultados han sido insatisfactorios4. Esto es debido a que con dicho modelo existe un margen muy estrecho para buscar soluciones: conseguir descuentos de los fabricantes, aumentar la inversión, optar por el renting frente a la compra para evitar la inversión inicial, implicar a la iniciativa privada 5, compartir el uso de los medios, etc. Reciclar ordenadores es por una parte alargar la vida del material informático que disponen los centros docentes, por otra resolver problemas medioambientales, pero también es el mejor final para los ordenadores obsoletos procedentes de otras instituciones, empresas y particulares6, dado que en España el mercado de segunda mano es escaso y el reciclaje es una actividad económica poco o nada rentable, por la cantidad mano de obra que necesita, aunque si es social o educativamente rentable. Además el reciclaje de ordenadores despierta un gran interés para los alumnos que disponen de ordenadores en casa y que ven en ello una aplicación inmediata, permite asentar la enseñanza teórica de la física (electricidad, magnetismo, óptica, etc.), es una actividad formativa técnica y una capacitación profesional que va acompañado de valores demás de llevara asociados valores ecológicos, trabajo en grupo, etc. El mejor complemento para un equipo reciclado es sin duda alguna el software libre por su coste prácticamente nulo, por la oferta tan amplia que existe y el gran número de soluciones que proporciona. Así podemos trabajar con LINUX en modo LIVE, compartiendo un equipo con otros sistemas opertivos o no, en modo autónomo o en modo cliente-servidor, en entorno de texto o en entorno gráfico con distintos niveles de requerimientos. Las soluciones basadas en software de código abierto son las más ventajosas económicamente, pero además tienen en la enseñanza valores adicionales como animar a la curiosidad, fomentar las vocaciones, capacitar profesionalmente, mantener los bienes públicos, etc. El software de código abierto/libre dispone de documentación completa que puede adaptarse libremente a las necesidades. Permite además participar en su mantenimiento y creación y conocer su funcionamiento además de llevar asociado valores como la cooperación, el trabajo en equipo, etc. Existen un gran número de asociaciones de usuarios de software libre en las que se pueden integrar alumnos y profesores. 4. Experiencias La UNESCO ha realizado este año un congreso precisamente sobre el uso de ordendores reciclados para la enseñanza7 y mantiene un portal en Internet dedicado al software abierto8. Las experiencias de reciclaje de ordenadores y software libre en educación son escasas en España, y todas ellas de los últimos años, algunas referencias sobre las mismas: • 4. 5. 6. 7. 8. Software abierto: Pequelin es una distribución LINUX LIVE orientada a los la educación de los más pequeños (www.espartakus.org ), Pedro Reina mantiene una WEB con abundante material para la enseñanza de la Informática en Secundaria (pedroreina.org/ ), Plan de la Junta de Extremadura (www.linex.org ), Decreto de la Junta de Andalucia (www.guadalinex.org ). Declaración de intenciones de la Generalitat Valenciana. 7,3 PCs/100 alumnos a tiempo parcial, con solamente el 43% de las conexiones con banda ancha. www.elmundo.es/navegante/2003/09/01/empresas/1063204763.html www.intel.com/education/recycling_computers/recycling.htm portal.unesco.org/es/ev.php@URL_ID=10325&URL_DO=DO_TOPIC&URL_SECTION=201.html www.unesco.org/webworld/portal_freesoft/index.shtml 28 Reciclaje y Software Libre: Una Solución para la Enseñanza • • Software abierto y reciclaje: Hay que destacar los trabajos de Antonio Quesada en la puesta en marcha de aulas LTSP en Canarias y Palencia9. A nivel institucional hay que destacar el proyecto desarrollado por la Universidad de Cadiz10 y el Decreto del Parlamento Andaluz11. Reciclaje: TeSo12 en Valencia (IES de Ondara y IES S. Vicent Ferrer de Algemesí) Sin embargo las experiencias en el extranjero son abundantes, y muchas de ellas se remontan al principio de los 90. 4.1. Software abierto LINUX • www.linuxforkids.org • www.seul.org/edu/ • www.riverdale.k12.or.us/linux/k12ltsp.html • www.bluelinux.org • www.debian.org/devel/debian-jr/ • www.canopener.ca (Canadian Open Source Education & Reseacrh) • www.linuxeduquebec.org 4.2. Escuelas con software libre • garneau.csdm.qc.ca/ • fleclerc.csdm.qc.ca/stagiaires/document.html 4.3. Escuelas con software libre y equipos reciclados • www.agers.cfwb.be (Ministerio de la Comunidad Francófona Belga) • www.hispalinux.net/casos.ntml?id=26 (IES Maria de la Guia-Canarias, Escuela infantil Corazón de MariaPalencia) 4.4. LTSP • www.ltsp.org • www.k12ltsp.org 9. 10. 11. 12. www.gulic.org www.uca.es/grup-invest/cit/ Decreto de Medidas de Impulso de la Sociedad del Conocimiento en Andalucía BOJA no 55 21-3-2003. www.renuevate.com/teso/ 29 Reciclaje y Software Libre: Una Solución para la Enseñanza 4.5. Recursos varios • www.schoolforge.net • www.ofset.org/freeduc/ • www.freshmeat.net/ 4.6. Reciclaje para la educación • www.opeq.qc.ca/ (Canada) • www.besanet.org.uk/ (Reino Unido) • www.crc.org (Computer Recycling Center - Estados Unidos, desde 1991) • www.c4kfoundation.org (Estados Unidos) • www.computers.fed.gov (CFL Computers For learning) • www.computer-aid.org (Reino Unido) • www.computerecycleforeduc.com/ (Estados Unidos) • www.emsc.nysed.gov/workforce/create/home.html (Estados Unidos - Nueva York) • www.microweb.com/pepsite/Recycle/India.html (India) • www.computersforschoolsontario.com (Canada-Ontario) 5. Conclusiones El modelo actual deinformatización WINTEL de los centros de enseñanzas ha mostrado sus limitaciones y carencias debido a los pocos recursos que se asignan en relación a los costes tanto iniciales como recurrentes. El uso del software libre es una opción estratégica básica en la enseñanza. El aprovechamiento de ordenadores reciclados es una opción barata y didáctica que permite disponer de una forma inmediata de sistemas informáticos para la enseñanza. Otra opción más valiente y a medio plazo pasa por la creación de todo el material didáctico en soporte digital y bajo licencia de contenidos abiertos13 y convertir el gasto en texto escolares que se aproxima a unos 200 ¤ anuales por alumno en la adquisición de ordenadores portátiles que quedarán en posesión de los alumnos y de sus familias14. 13. www.opencontent.org 14. www.landesinteractives.net 30 espiral de valores: técnicas avanzadas de programación PHP Diego Arranz Interactors Madrid España [email protected] Javier Linares Interactors Sevilla España [email protected] espiral de valores (http://espiraldevalores.org) es un lugar en Internet donde se debaten de forma organizada y colaborativa posicionamientos ante problemáticas sociales, políticas, medioambientales, etc. Cada uno de estos posicionamientos se denomina “valor”, y consiste en un texto con el planteamiento de un problema concreto y una propuesta de solución. El presente artículo explica las ideas y procesos colaborativos que hay detrás de esta web e introduce las metodologías y los correspondientes paquetes de software libre utilizados en el desarrollo. También se esbozan algunas futuras líneas de desarrollo que ampliarían en gran medida las posibles aplicaciones de la herramienta. 1. Introducción Internet está llena de foros de debate sobre sociedad, política, religión, etc. Millones de lugares virtuales donde tienen lugar trillones de debates y discusiones. Se trata sin duda de una de las mejores aplicaciones a nivel social de Internet. Sin embargo, detrás de la espiral de valores está la convicción de que es necesario dar un paso más allá de este tipo de foros. Al fin y al cabo, un foro virtual no es más que una gran cantidad de datos, argumentos y opiniones en un formato que hace prácticamente imposible la consulta de algo determinado pasado un tiempo. La espiral de valores es un esfuerzo que pretende dar con un modo más productivo de canalizar todas esas energías desparramadas a lo largo de tanto debate y discusión prácticamente estéril. Se trata de un piso más, edificado sobre un foro virtual. Aporta un proceso de debate orientado hacia la consecución de consensos, y una herramienta que permite referenciar, organizar y reutilizar los resultados de los debates, ya sean definitivos o parciales. ISBN 84-88783-66-3 ©2003 31 espiral de valores: técnicas avanzadas de programación PHP 1.1. Un poco de historia espiral (http://lawebespiral.org) nace en mayo de 2001 con el objetivo de introducirse legalmente en entornos políticos, mediáticos y corporativos promocionando posibles futuros más sostenibles y humanos. Se trata de una organización abierta, transparente y descentralizada, que utiliza Internet como herramienta principal de comunicación. espiral de valores surge en abril de 2002 como proyecto de espiral, tomando como inspiración el proyecto Open Directory Project (http://dmoz.org), directorio de páginas de Internet descentralizado, mantenido por voluntarios. La idea inicial era crear un directorio de posicionamientos, a la vez que un espacio participativo de reflexión y diálogo, y así afrontar mejor los debates teóricos sobre un futurible programa electoral del partido espiral, ya reconocido legalmente por aquellas fechas. 1.2. Objetivos Aunque no contemplados desde el principio, con el tiempo se fueron haciendo evidentes una serie de objetivos que podía intentar cumplir el proyecto: 1. Servir de ayuda a los debates y acciones de personas y colectivos dentro y fuera de espiral. 2. Ofrecer una visión condensada y organizada de los muchos esfuerzos que llevan a cabo multitud de personas y organizaciones en pos de un mundo mejor. 3. Proveer de una base teórica al desarrollo de denuncios, es decir, anuncios que no venden nada sino que denuncian un determinado problema. 4. Ofrecer a la comunidad de software libre una herramienta que puede servir como base para proyectos software más ambiciosos en campos como la gestión de contenido o la democracia participativa. 5. Demostrar que el compromiso social o el uso de software libre no son incompatibles con el uso de avanzadas metodologías y herramientas software. 2. Valores y debates Los valores son las unidades de información básicas. Son como los ladrillos que forman un edificio. Cada valor debe contener en su texto el planteamiento de un problema más o menos concreto y una propuesta de solución. Todos los valores son el resultado de un proceso de debate abierto que tiene lugar en un foro virtual enlazado con la web. 2.1. Composición y organización de los valores Formalmente, cada valor se compone de un título, una descripción de uno o dos párrafos y una ampliación más detallada con argumentos a favor, puntos a profundizar, argumentaciones típicas en contra de la propuesta, etc. Es recomendable que incluya también enlaces con información adicional, organizaciones relacionadas con el valor, etc. Lo normal es que todo lo anterior se pueda imprimir en una sóla hoja de papel. A modo de ejemplo, algunos títulos de valores que pueden encontrarse en la web son: “Los ciudadanos tienen derecho a decidir a qué se destinan sus impuestos”, “Vidas sencillas” o “La ciencia y la tecnología están en nuestras manos”. Los valores se organizan por categorías y subcategorías y también según unos niveles de importancia. Cualquier persona puede participar en los debates que conducen a estos valores, así como proponer nuevos debates de 32 espiral de valores: técnicas avanzadas de programación PHP valores. La gestión y actualización del contenido se realiza de forma descentralizada, por medio de una serie de editores que, conectándose a la web mediante una clave, se ocupan de mantener la categoría que libremente han elegido. 2.2. El proceso de debate Aunque cualquiera puede participar en los debates de la forma que desee, hay unas normas en lo que se refiere a la presentación, discusión y aprobación de los valores. Este proceso está inspirado en la motivación principal que guía este proyecto: intentar siempre que sea posible llegar a consensos, no dejar los debates a medias. De forma resumida el proceso es el siguiente: Una vez formulado el valor cualquiera puede criticar, apoyar, corregir o añadir los aspectos que considere oportunos. El valor se debate el tiempo que sea necesario hasta llegar a un consenso. Para que sea oficialmente aprobado, cuatro o más participantes deben dar su apoyo explícito a la redacción del valor. Más adelante, es posible reabrir el debate y modificar el texto si alguien lo cree necesario. Cada editor es el responsable de dinamizar la categoría que eligió, presentando valores a debate, procurando que los propuestos por otras personas lleguen a buen puerto y actualizando la información de la web en consecuencia. 3. Metodología Modelo-Vista-Controlador Las aplicaciones web se programan según algún lenguaje de programación para servidor, por ejemplo PHP, JSP o ASP. Estos lenguajes permiten mezclar en cada fichero código de presentación (normalmente HTML) y código de programación de cualquier tipo (construcciones simples, uso de objetos, comunicación de bases de datos), de forma sencilla y flexible. Sin embargo, cuando las aplicaciones adquieren un tamaño considerable, si no se ha seguido alguna metodología de desarrollo puede resultar una pesadilla revisar el código para solucionar errores o añadir nuevas funcionalidades. Lo que requieren la mayoría de aplicaciones web es una forma correcta de organizar el código en componentes que tengan funciones claras, como alternativa al habitual código “spaghetti” en el que todo está mezclado. La idea en la que se basa la metodología MVC (http://www.ulpgc.es/otros/tutoriales/java/Apendice/arq_mvc.html) es que los aspectos visuales de un sistema deberían estar aislados del funcionamiento interno, que a su vez debería estar separado del mecanismo de coordinación global de la aplicación. A continuación se expone la arquitectura de componentes, con un esquema de esta metodología y una explicación de cada parte, y más adelante se hace un recorrido por el código, siguiendo el flujo del programa. 33 espiral de valores: técnicas avanzadas de programación PHP 3.1. Arquitectura de componentes Figura 1. Esquema metodología MVC 34 espiral de valores: técnicas avanzadas de programación PHP 3.1.1. El modelo Es el código que administra el estado interno del sistema. Se compone de una serie de clases o funciones que gestionan por una parte la lógica de proceso (o reglas de negocio) y por otra el acceso a la base de datos. Es recomendable que ambos aspectos estén en módulos separados. El modelo no contiene ningún componente visual. Funciona como un interfaz de programación (API) que encapsula los detalles internos del sistema. 3.1.2. Las vistas Constituyen la capa de presentación del sistema, la parte visible de cara al usuario. No deben acceder directamente a bases de datos ni contener lógica de proceso (quizá si un poco de lógica para la presentación). Cualquier dato que necesiten mostrar al usuario se recupera mediante llamadas a la API que ofrece el modelo. 3.1.3. El controlador Es el componente que coordina el funcionamiento global de la aplicación. Toda acción realizada por el usuario es gestionada por él. En función de la vista actual, la acción concreta y el estado del modelo: Manipula el modelo invocando la API de éste y selecciona la siguiente vista a mostrar. 3.2. Plantillas El mecanismo de plantillas sirve para separar el código de presentación del resto del código de una aplicación web. Consiste en codificar todo lo que tenga que ver con la presentación en una serie de plantillas de código HTML (u otro lenguaje de presentación), con expresiones sencillas intercaladas para comunicarse con el resto de la aplicación y poder mostrar datos dinámicos. Un motor de plantillas es el que se encarga de hacer la traducción a HTML. Este mecanismo es independiente de la metodología MVC y puede utilizarse sin ella, pero combinando las dos cosas se consigue una estructura de código muy organizada y elegante. De esta forma, las vistas simplemente se ocupan de extraer la información necesaria del modelo y comunicársela a las plantillas, y estas simplemente de dar un formato visual a esa información, añadiendo la información estática pertinente. Aunque así se complica algo la construcción del sistema al introducir un nuevo nivel, en las plantillas el código de presentación queda mucho mejor aislado que en las vistas de una aplicación MVC clásica (sin plantillas), de forma que se facilita la tarea de los diseñadores web. 35 espiral de valores: técnicas avanzadas de programación PHP 3.3. Un recorrido por el código Figura 2. Ejemplo de flujo 36 espiral de valores: técnicas avanzadas de programación PHP A continuación explicamos cómo funciona la arquitectura MVC mediante un recorrido por los distintos componentes que colaboran para resolver una acción concreta del usuario sobre la aplicación, ilustrando el ejemplo con algo de código representativo de cada componente. El número de los pasos se corresponde con los pasos del esquema de flujo. Paso 1: Partimos de la plantilla que muestra un formulario a través del cual se pueden cambiar los datos de un valor. Los datos introducidos se envían al controlador junto con el código propio de esta acción. <form action="{$control}" method="post"> <input type="text" name="titulo" size="50" value="{$titulo}"> <input type="radio" name="nivel" value="2" {if $nivel==2}checked{/if}>Esencial <input type="radio" name="nivel" value="1" {if $nivel==1}checked{/if}>De categoría <input type="radio" name="nivel" value="0" {if $nivel==0}checked{/if}>Normal <input type="hidden" name="action" value="{$accion}"/> </form> Paso 2: Los datos del formulario son validados por un componente específico para tal fin. function validate() { if (!$this->get(’titulo’)) { trigger_error(’Introduzca título’); $isValid = FALSE; } else if (!$this->get(’descripcion’)) { trigger_error(’Introduzca descripción’); $isValid = FALSE; } ... return $isValid; } Pasos 3 y 4: El controlador consulta en la tabla de acciones qué componente debe atender la acción y le delega el control. ’CambiarValor’ => array( _TYPE => ’CambiarValor’, _NAME => ’FormValor’, _INPUT => ’index.php?view=views/cambiovalor.php’, _VALIDATE => 1, _ACTION_FORWARDS => array( ’OK’ => array( _PATH => ’index.php?view=views/valor.php’, _REDIRECT => 0 ), ’Error’ => array( _PATH => ’index.php?view=views/cambiovalor.php’, _REDIRECT => 0 ) ) ), Pasos 5 y 6: La acción realiza las modificaciones oportunas en el modelo invocando las funciones adecuadas de la API del mismo. if (($_SESSION[_ERRORS])) { $actionForward = $actionMapping->get(’Error’); } 37 espiral de valores: técnicas avanzadas de programación PHP else { bd_cambiarValor ($valorid, $titulo, $nivel, $estado, $temaforo, $descripcion, $ampliacion); //fechas bd_guardarFechaAprob($valorid, $diaapr, $mesapr, $anyoapr); bd_guardarFechaInicio($valorid, $diaini, $mesini, $anyoini); ... $actionForward = $actionMapping->get(’OK’); } return $actionForward; Pasos 7 y 8: La acción consulta qué vista se debe mostrar a continuación y le pasa el control (ver mappings.php). Paso 9: La vista obtiene a través del modelo los datos necesarios del valor y se los envía a la plantilla correspondiente. $titulo = bd_extraerTituloValor($valorid); $nivel = bd_extraerNivelValor($valorid); $estado = bd_extraerEstadoValor($valorid); $s->assign(’titulo’, $titulo); $s->assign(’nivel’, $nivel); $s->assign(’estado’, $estado); $s->display(’valor.tpl’); Paso 10: La plantilla es quien finalmente muestra los datos del valor al usuario de la aplicación. <h1>{$titulo} {if $nivel == 2} - Esencial {elseif $nivel == 1} - De categoría {/if} </h1> <p class="dates">{if $estado==1}Aprobado: {$fechaaprob} - {/if}Iniciado: {$fechainicio}</p> <h3>Descripción</h3> <p>{$descripcion}</p> <h3>Ampliación</h3> <p>{$ampliacion}</pC> 3.4. Software Libre El compromiso de la espiral de valores con el software libre es triple: 1. La herramienta está escrita en el lenguaje PHP y utiliza MySQL como servidor de base de datos, ambos libres. Además se utilizan como código base dos paquetes de software libre, Phrame y Smarty. 2. Todo el código de la herramienta se ofrece como software libre a cualquier particular, organización o empresa interesada en realizar de él cualquier uso recogido en la licencia GPL. 3. Aunque no es un requisito general para la herramienta, la instalación realizada en espiraldevalores.org está soportada por el software de servidor Apache, ejecutándose en un sistema GNU/Linux, concretamente la distribución Debian GNU/Linux 3.0. 38 espiral de valores: técnicas avanzadas de programación PHP 3.4.1. Software básico de servidor Los programas que se ejecutan en el servidor, y que en definitiva componen esta aplicación web, están escritos en el lenguaje PHP, desarrollado por una gran comunidad de personas a través de Internet, a lo largo de casi diez años, de forma similar a como se desarrolló Linux, o el sistema operativo Debian. En cuanto a las principales ventajas de PHP frente a otros lenguajes de servidor, son las siguientes: 1. Su rapidez de ejecución. 2. Es un lenguaje específicamente diseñado para realizar aplicaciones web, mientras que otros lenguajes son adaptaciones de lenguajes preexistentes, no pensados para la web. 3. El software necesario para ejecutar aplicaciones es software libre. Los datos con los que trabaja la espiral de valores se almacenan utilizando MySQL, un sistema de gestión de bases de datos relacional licenciado como software libre. Se trata del gestor más usado en el mundo del software libre, debido a su gran rapidez, facilidad de instalación y de uso, y a que existen infinidad de librerías y otras herramientas que permiten utilizarlo desde gran cantidad de lenguajes de programación. Enumeramos brevemente los puntos fuertes de este gestor: 1. La velocidad a la hora de realizar operaciones, manteniendo un bajo consumo de recursos de máquina. 2. La proliferación y facilidad de uso de las utilidades de administración. 3. Gran seguridad, muy poca probabilidad de corromper los datos. 3.4.2. Software para MVC y plantillas Además de PHP y MySQL, se han utilizado los siguientes paquetes de software libre, como base para el desarrollo de la espiral de valores, según las técnicas explicadas: 1. Phrame (http://phrame.sourceforge.net/): Software que proporciona un marco de trabajo para la metodología MVC. Contiene un componente controlador, a completar con el código de las distintas acciones que tengan lugar en la aplicación web. Permite trabajar con múltiples lenguajes de presentación (HTML, XSLT, etc.). Ofrece otras utilidades, como por ejemplo la posibilidad de separar el código de validación de formularios hacia ficheros específicos para ese fin. 2. Smarty (http://smarty.php.net/): Software que proporciona un motor de plantillas. Internamente trabaja con una caché que reduce al mínimo la pérdida de eficiencia que todo mecanismo de traducción introduce. Ofrece un lenguaje para construir expresiones complejas, lógica condicional y de iteración, funciones predefinidas, etc. Por supuesto existen otras herramientas dentro del mundo del PHP que permiten trabajar con las técnicas expuestas. Hay ya un considerable número de motores de plantillas libres. No hay muchos paquetes libres para trabajar con MVC en PHP, quizá porque PHP ha sido considerado como un lenguaje sencillo de desarrollo rápido y no se ha prestado la suficiente atención a una buena organización del código de las aplicaciones. Pero poco a poco aparecen desarrollos en este sentido, como por ejemplo php.MVC (http://phpmvc.net). El lenguaje PHP todavía queda lejos en estas materias de otros lenguajes, como Java, en el que hablar de MVC es hablar de Struts (http://jakarta.apache.org/struts/index.html), prácticamente un “estándar de facto”, un software maduro que sirve como base para desarrollar aplicaciones web según la metodología MVC. Incluso existen herramientas visuales que facilitan dichos desarrollos. A modo de curiosidad, decir que Phrame es prácticamente una copia de Struts para PHP. 39 espiral de valores: técnicas avanzadas de programación PHP 4. Desarrollos futuros La espiral de valores es una herramienta completa y funcional que ha resuelto un problema de una organización, y que con ligeras modificaciones puede servir para otros propósitos similares. Sin embargo existen algunas posibles líneas de desarrollo que podrían llegar a una herramienta verdaderamente potente, útil para gran variedad de fines distintos. Una primera posibilidad es elevar el nivel de abstracción de la herramienta y llegar a obtener una metaherramienta que sirva como base para crear webs de conocimiento organizado, sin necesidad de modificar el código, simplemente especificando las características particulares de la web que queremos construir por medio de un interfaz de usuario. A partir de dicha metaherramienta podríamos obtener fácilmente una espiral de valores, pero también una web de recopilación y debate de obras de cultura, o de textos con procedimientos operativos de una empresa. Con características de participación como comentarios y puntuaciones, y un sistema de edición descentralizado (aspectos éstos ya implementados en la actual web). Otra posibilidad es orientar el desarrollo futuro hacia una herramienta de democracia participativa orientada al consenso, integrando y automatizando todo lo relacionado con las votaciones, plazos, histórico de propuestas, etc., con flexibilidad para adaptar las normas de debate según las peculiaridades y deseos de una organización en cuestión. Dicha herramienta podría resultar muy útil a todo tipo de empresas, organismos públicos y asociaciones con necesidades de organizar distintos debates organizados por temas y de poder elaborar y posteriormente acceder a consensos parciales o definitivos. Es difícil saber a ciencia cierta hacia dónde se dirigirá el desarrollo de la herramienta. Lo único seguro es que el seguimiento de unas técnicas orientadas a conseguir una buena organización del código hará más sencilla cualquier futura evolución que si la aplicación consistiera en una serie de ficheros PHP de tipo “spaghetti”. 5. Conclusión En este trabajo hemos presentado una herramienta de software libre construida para resolver las necesidades de organización y participación de un colectivo concreto. También se ha esbozado cómo elevando el nivel abstraccion o automatizando una serie de cuestiones, la herramienta podría ser útil para muchos más colectivos. Se han introducido las distintas metodologías utilizadas en el desarrollo, que tienen como fin potenciar la organización, la facilidad de ampliación y mantenimiento, una separación clara de papeles en el equipo de trabajo, etc. Quizá la única desventaja a mencionar es la complejidad asociada a un desarrollo tan modular y con tantos niveles, pero esto realmente sólo es una desventaja para aplicaciones sencillas sin requisitos especiales de mantenimiento ni posibles ampliaciones en previsión. En casos así, es posible que no valga la pena complicarse tanto, pero en los demás casos (que son clara mayoría) esta complejidad inicial se rentabiliza con creces según pasa el tiempo de desarrollo y mantenimiento. 40 Legislación europea y el Open Source / Free Software José M. Fidel Santiago Luque Network-sec.com 1. Introducción Quizá la legislación más importante que puede afectar al sofware libre es la que se refiere a la propiedad intelectual y a las patentes. Ambas son formas legales de "protegerlo". Analizaremos las dos en este artículo. Desde el punto de vista de la propiedad intelectual el software se considera un trabajo literario y se le aplica la legislación correspondiente. Las patentes no protegen el software en si mismo sino la idea nueva e innovadora que hay detrás del desarrollo del mismo. La propiedad intelectual se aplica por igual a software propietario y a software OS/FS. Ambos tienen licencias basadas en los derechos de autor y la legislación acorde. La aplicación es totalmente distinta, evidentemente, pero basada en los mismos principios legales. El software propietario hace uso y abuso de la legislación sobre patentes para proteger y ganar dinero con la investigación que se realiza. Sin embargo, el concepto de patente es incompatible con el espíritu del movimiento OS/FS. La idea de compartir el conocimiento es totalmente contraria al concepto de patente. Estas vías legales no son incompatibles, al contrario, son complementarias. Mientras que una de ellas, la propiedad intelectual protege la expresión concreta que representa el software, las patentes protegen y defienden la idea, el diseño último, del que el software es la implementación. El desarrollador de software puede jugar con ambas para conseguir la protección deseada. 2. Propiedad intelectual 2.1. Introducción El mercado de los contenidos es más y más importante cada día. Su importancia va pareja a su íntima relación con la incipiente sociedad de la información. La digitalización de los contenidos permite su reproducción exacta, sin perdida de calidad alguna. Podemos copiar y distribuir los contenidos digitales allá donde queramos. Una consecuencia, ¿no deseada?, de este desarrollo tecnológico ha sido el increíble desarrollo de la piratería de contenidos. La Comisión Europea, consciente de la importancia y la necesidad de un mercado de los contenidos correctamente legislado, ha desarrollado una serie de directivas destinadas a la protección y el desarrollo de este mercado. Gracias a la asimilación que se hace del software a una obra literaria, protegible mediante la propiedad intelectual, toda la legislación europea que se hace sobre propiedad intelectual lo afecta de una forma u otra. ISBN 84-88783-66-3 ©2003 41 Legislación europea y el Open Source / Free Software 2.2. La directiva 2001/29/EC. Sobre la armonización de ciertos aspectos del copyright y derechos relacionados en la sociedad de la información. Esta es la última directiva de la UE sobre propiedad intelectual. Armoniza las diferentes legislaciones, nacionales o europeas, sobre el copyright y la propiedad intelectual. El nacimiento de esta directiva ha sido realmente difícil. El 10 de Diciembre de 1997 la Comisión presentó su propuesta. El 10 de Febrero de 1999, un año y dos meses más tarde, el Parlamento Europeo pidió a la Comisión ciertas modificaciones. La Comisión hizo su trabajo rápidamente y la nueva propuesta estaba lista el 21 de Mayo. El 28 de Septiembre, el Consejo no aceptó todas las enmiendas presentadas por el Parlamento y la directiva tuvo que ser revisada de nuevo. La Comisión se encontraba más cerca del Consejo que del Parlamento. El 14 de Febrero de 2001 el Parlamento, en segunda lectura, aprobó nueve enmiendas a la propuesta. La Comisión, otra vez, tuvo que modificar la propuesta. El 9 de Abril el Consejo le dio el visto bueno a las modificaciones y finalmente, el 22 de Mayo de 2001 la directiva fue finalmente aprobada por el Consejo y el Parlamento. Un claro ejemplo de la agilidad con que se gesta la legislación europea. El software queda específicamente excluido de esta directiva, exactamente en el artículo 1 de la misma. El software se seguirá regulando por la directiva 91/250/CEE. 2.3. Directiva 91/250/CEE. Sobre la protección legal de los programas de ordenador. 2.3.1. Introducción Esta directiva regula los derechos de autor para los programas de ordenador. Asimila un programa de ordenador a una obra literaria acorde a la Convención de Berna. Las patentes se encuentran cubiertas en esta directiva, exactamente, en el artículo 9. Este artículo es totalmente claro: los derechos de autor y las patentes son compatibles. Es una legislación retroactiva, se aplica al software escrito antes de la fecha de adopción con lo cual abarca a todo el software realizado en la UE. La directiva 93/98/ECC modifica esta en cuanto a la fecha de expiración de los derechos de autor. Extiende la duración de cincuenta a setenta años. ¿Habrá algún programa tan longevo? Y, de existir, ¿aún será útil? 2.3.2. Análisis Los programas de ordenador se protegen según los derechos de autor tratando a los mismos como si fueran una obra literaria según se define en la Convención de Berna. Esto incluye la documentación previa a la creación del programa. El programa de ordenador se protege en tanto y cuanto es una creación original en el sentido de que es una creación intelectual de su autor. Nada más. El autor de un programa será la persona natural o grupo de personas naturales que lo han creado, o, cuando los Estados Miembros lo permitan, una persona legal puede tener el derecho de creación. Los derechos derivados de un trabajo serán compartidos por todo los creadores si son personas naturales. Si un empleado crea un programa como parte de su trabajo, el dueño de los derechos económicos, y sólo estos, del programa en cuestión será le empresa a no ser que se decida otra cosa por contrato. El propietario del software tiene el derecho para hacer o autorizar: la reproducción o la modificación del programa y cualquier forma de distribución del mismo. 42 Legislación europea y el Open Source / Free Software No se necesitará la autorización para la reproducción o la modificación del software cuando sea necesaria para el uso del mismo por el comprador legal. Tampoco se podrá prohibir la realización de las copias de seguridad por parte del usuario legal. Este, también podrá estudiar un programa para averiguar las ideas subyacentes al mismo. La decompilación y la modificación del software se permite para conseguir la interoperatibilidad de programas independientes. La información obtenida no se usará para otros fines que el mencionado y no se le dará a otras de no ser necesario para conseguir la deseada interoperatibilidad. Los Estados Miembros proveerán de las herramientas legales necesarias para perseguir a aquellos que infrinjan esta legislación. Especialmente: (a) la puesta en circulación de copias ilegales de un programa, (b) la posesión de copias ilegales con propósito comercial, (c) la puesta en circulación o la posesión por motivos comerciales, de medios para eliminar y obviar la protección de un programa. La protección legal dura toda la vida del autor y cincuenta años después de su muerte o la muerte del último autor superviviente. Si el autor es una persona legal el término de la protección será de cincuenta años desde que el programa se encuentra legalmente disponible al público. Este artículo, el ocho, se actualiza en la directiva 93/98/ECC cambiando la duración de la protección de cincuenta a setenta años. Esta directiva también se aplica a software creado antes de su aplicación. 2.3.3. Comentarios El principal motivo de esta directiva, como de tantas otras, es uniformar la legislación sobre la protección de los programas de ordenador. Legislación que, increíblemente, estaba ausente de algunos países de la UE. Trata de proteger la inversión económica realiza en la investigación de nuevas programas de ordenador. Crea un marco legal para el desarrollo y la explotación de los programas de ordenador en la UE. Pero esta directiva no solo protege los autores, sino que también protege los derechos de los usuarios. Concede a los usuarios varios derechos para poder ejecutar el software de forma segura y asegurar su interoperatibilidad con el resto del sistema. Esta directiva es, esencialmente, compatible con el desarrollo OS/FS. Reconoce la figura de autor y los derechos necesarios para construir una licencia OS/FS. Es gracias a esta legislación que se pueden crear las licencias OS/FS que luego se usan para proteger y "abrir" el código de este software e impedir que se "cierre". 2.4. GPL 2.4.1. Introducción Esta es la licencia más extendida en el mundo OS/FS hoy. Es la más restrictiva, también. Aunque no es la única si que es la más importante y el mejor ejemplo de una licencia OS/FS y perfectamente relacionado con la legislación sobre propiedad intelectual. 2.4.2. Análisis Esta licencia comienza con un preámbulo en el que se explica la filosofía del software OS/FS. Después del preámbulo va la licencia propiamente dicha. Esta licencia se aplica a "programas" y solo implica los derechos de copia, distribución y modificación. Los más importantes, por otra parte. 43 Legislación europea y el Open Source / Free Software Se concede permiso para copiar y distribuir copias exactas del código fuente del programa siempre que cada copia del fuente tiene el copyright apropiado, una declaración de ausencia de garantía y una referencia a la licencia. Claramente permite el cobro por la copia física del código fuente. Se pude modificar el programa siempre que: (a) el programa lleve un mensaje anunciando que esta es una versión modificada, (b) la modificación también debe llevar esta licencia, y (c) el programa debe informar sobre la licencia. Se puede integrar software GPL dentro de un sistema propietario siempre que la separación entre ambos sea suficiente para identificar cada uno y poder cumplir esta licencia por completo. Así, podríamos usar una base de datos GPL junto con un ERP propietario sin violar la GPL. Se puede distribuir un programa en forma binaria, o ejecutable. Aparte de cumplir las condiciones aplicadas al código fuente hay que acompañar el ejecutable con el código fuente. La infracción de la licencia finaliza los derechos del propietario del software bajo esta licencia. Otros que hubieran obtenido el software del infractor conservan sus derechos aunque este los haya perdido. Los creadores de esta licencia, conscientes del problema de las patentes, las tratan de forma clara: si hay patentes que entran en conflicto con esta licencia esta licencia no deja de aplicarse. Si la distribución bajo esta licencia y la patente en cuestión es imposible entonces es la distribución la que se acaba, no dejan de tener efecto ni la licencia, ni las patentes. El uso de partes de software GPL dentro de otros programas licenciados libres pero no GPL se permite siempre que se escriba al autor para pedir permiso. El mensaje de no garantía aparece al final de la licencia. No es diferente de otros mensajes iguales en el software propietario. El software no tiene ninguna garantía y el autor no es responsable por ningún daño que el mismo pueda causar. 2.5. Conclusiones La legislación europea sobre propiedad intelectual es estándar y común a las legislaciones nacionales preexistentes y a la que se puede tener en otros países fuera del espacio UE. Su acomodo a las licencias OS/FS existentes es total puesto que estas ya se hicieron basándose en legislaciones equivalentes. No solo no representa un freno al desarrollo del movimiento OS/FS sino que constituye la base jurídica sobre la que poder apoyar las licencias del mismo y sobre la que defender los derechos de los autores de software OS/FS sobre sus programas. 3. Patentes Las patentes son la segunda forma de protección de los programas de ordenador. Junto con la propiedad intelectual completan los mecanismos legales para controlar y proteger el desarrollo y la distribución de software. Una patente es el derecho exclusivo sobre una invención. Una invención es el producto o proceso que ofrece una nueva forma de hacer algo o una nueva solución técnica a un problema. Una patente protege la invención por un periodo de tiempo limitado, veinte años es lo normal. Así, una invención no puede ser fabricada, usada, distribuida o vendida sin el consentimiento del titular de la patente. Estos derechos puede ser vendidos a un nuevo titular. 3.1. Patentes en Europa La patentes en la UE están basados en dos sistemas: la patente nacional y la europea. Ninguna de las dos tiene una legislación comunitaria detrás. 44 Legislación europea y el Open Source / Free Software Las patentes nacionales fueron las primeras que aparecieron. Estas patentes han sido armonizadas "de facto" en todos los países de la unión: todos los miembros de la UE han firmado la Convención de París para la protección de la propiedad industrial (20 de Marzo de 1883) y el acuerdo TRIPS (Trade-Related aspects of Intellectual Property rightS) (aspectos comerciales de los derechos de propiedad industrial) el 15 de Abril de 1994. La patente europea se basa en la Convención sobre Patente Europea, "La Convención de Munich" de 1977. La CPE concede derechos en tantos países como lo desee el solicitante. Esto dota de una gran flexibilidad. La CPE no proporciona un tribunal a nivel europea sino que los tribunales nacionales son los que han de resolver los problemas que surjan. Nada impide a diferentes tribunales dirimir las solicitudes que se les hagan de diferente forma. La CPE estableció la Oficina Europea de Patentes (OEP) para gestionar las patentes europeas. El 24 de Julio de 1997 la Comisión presentó un Libro Verde sobre la patente comunitaria y el sistema de patentes en Europa (COM(97) 314 final). Como resultado del debate iniciado por este papel la comisión desarrolló una comunicación (COM(99) 42 final) para el Consejo, el Parlamento y el Comité Económico y Social sobre este Libro Verde. En esta comunicación la Comisión propuso diferentes iniciativas y legislación sobre la patente comunitaria. El 5 de Julio de 2000 la Comisión presentó una propuesta para una regulación del consejo sobre la patente comunitaria (COM(2000) 412 final). El Consejo desea que esta propuesta se apruebe lo antes posible pero no parece fácil. 3.1.1. La patente comunitaria El sistema de patente comunitaria propuesta por la Comisión debe convivir con los sistemas en uso (los sistemas nacionales y el CPE). La coherencia entre estos sistemas se consigue gracias a la adhesión de la UE a la Convención de Munich. La OEP será la organización que se encargue de examinar las patentes y conceder la patente comunitaria. La OEP seguiría haciendo el mismo trabajo de siempre. Las principales características de la patente comunitaria son: unidad y autonomía. Solo se pueden conceder, trasmitir, revocar o expirar para toda la comunidad y solo puede ser sujetas a la legislación propuesta y al derecho general de la UE. CPE regulará el sistema de patentes de esta patente comunitaria. Esta patente es, en definitiva, una patente europea en el sentido del Convenio de Munich en la que el área de aplicación es la comunidad al completo. A día de hoy, el coste medio de una patente europea (para ocho países) es, aproximadamente, EUR 30.000. El coste de las traducción se lleva sobre el 39% del total. La propuesta de la comisión trata de reducir el coste de la patente reduciendo el coste de la traducción y del procedimiento. Para reducir el coste de la traducción la propuesta requiere la traducción de toda la petición de patente a una sola lengua de las de trabajo del OEP y dos traducciones adicionales de las reivindicaciones a las otras dos. Así, traducir una patente completo a todos los idiomas comunitarios costaría unos EUR 17.000, a las tres lenguas de la OEP, EUR 5.100, y, según la propuesta de la comisión, EUR 2.200. Está claro que es mucho más barato. Otra propuesta de la comisión es igualar el coste de los procedimientos con los de los principales socios comerciales. La patente europea es tres veces más cara que la japonesa y casi cinco veces más cara que la americana. Como es la OEP quien examina las patentes y sus tarifas vienen fijadas por el Convenio de Munich la Comisión no puede cambiarlas. Pero si que puede modificar los costes de renovación y lo hace acercando la patente europea a la japonesa y la americana. Para resolver los problemas legales que surjan alrededor de las patentes la Comisión propone la creación de un Tribunal Comunitario sobre Propiedad Intelectual. De esta forma se conseguiría la uniformidad en la legislación y la jurisprudencia. El nacimiento de la patente comunitaria está siendo muy difícil. Un asunto tan importante como es la propiedad industrial no es fácilmente dejado de lado por los estados miembros. Aunque la Comisión está trabajando duro para conseguir la aprobación de la propuesta, aún no se ha conseguido. 45 Legislación europea y el Open Source / Free Software 3.2. Patentes y programas de ordenador 3.2.1. Introducción Las patentes son importantes en este trabajo a causa de la nueva propuesta de la Comisión sobre las patentes para los programas de ordenador. Este no es un punto fácil y hay dos opiniones enfrentadas acerca de él: las patentes ayudarán a desarrollar la industria europea del software y las patentes impedirán su desarrollo. La tercera opción: mejor dejamos las cosas como están, también está siendo defendida por algunas empresas del sector como IBM. De un lado la Comisión, la BSA e importante empresas del software (europeas y, mayormente, no europeas). Del otro lado la comunidad OS/FS representada, fundamentalmente por Eurolinux y las principales PYMES europeas del mundo de la informática. No es una legislación trivial. Las patentes pueden cambiar totalmente las reglas del juego para el desarrollo del software y, especialmente, el desarrollo del software OS/FS. Si Europa, y la Comisión, van a apostar por el software OS/FS tiene que pensar detenidamente la legislación sobre patentes. 3.2.2. Legislación Los principios legales básicos sobre la patentabilidad de los programas de ordenador son dos: Los programas de ordenadores "como tales" no son patentables siguiendo el artículo 52 de la CPE. Las leyes nacionales reproducen de una forma u otra este artículo. Las patentes se conceden a invenciones que son nuevas, proporcionan un avance tecnológico y tienen una aplicación industrial. Basados en estos principios, diferentes tribunales europeos han resuelto que una invención técnica que usa un programa de ordenador es patentable. El primero y más importante de estos ejemplos viene de dos decisiones del Comité Técnico de Apelación, ambas involucrando a IBM. El Comité llegó a la siguiente importante conclusión: "Según este Comité, un programa de ordenador "como tal" no es excluido de patentabilidad si el programa, cuando es ejecutado o cargado en un ordenador, produce, o es capaz de producir, un efecto técnico que va más allá de las interacciones físicas normales entre el programa y el ordenador en que el que se ejecuta." A día de hoy, en Europa, hay alrededor de 15.000 patentes para programas de ordenador y aproximadamente el 75% de ellas corresponden a grandes empresas de software no europeas. 3.2.3. Revisión de la situación La Comisión y el Parlamento Europea están de acuerdo en la patentabilidad de los programas de ordenador si el producto es "nuevo" y es la aplicación industrial de una innovación técnica. La Comisión ha propuesta dos acciones: una directiva para armonizar las legislaciones nacionales sobre la patentabilidad de los programas de ordenador y la modificación del Artículo 52(.2.c) del CPE para eliminar los programas de ordenador de la lista de exclusión de patentes. El 20 de Febrero de 2002, la Comisión presentó una propuesta de directiva (COM(2002) 92 final). El 19 de Octubre de 2000 la Comisión comenzó una consulta oficial acerca del impacto social y económico de la patentabilidad de los programas de ordenador. Como resultado de esta consulta se creó el estudio "The economic impact of patentability of computer programs". 3.2.4. Propuesta de directiva de la Comisión El objetivo de esta propuesta es armonizar las legislaciones nacionales sobre las patentes de programas de ordenador y clarificar las condiciones de patentabilidad. 46 Legislación europea y el Open Source / Free Software En el artículo 1 se concreta el alcance: la patentabilidad de las invenciones implementadas en ordenador. El artículo 2 engloba las definiciones: "Invención implementada en un ordenador": cualquier invención que conlleva el uso de un ordenador y que tiene una o más características novedosas las cuales se llevan a cabo gracias al uso del ordenador. "Contribución técnica": una contribución al "estado del arte" de un campo técnico que no es obvia para alguien competente en semejante campo. El artículo 3 especifica que cualquier invención que involucra un ordenador pertenece a un campo técnico. El artículo 4 define las condiciones para la patentabilidad: 1. La invención tiene que tener una aplicación industrial, ser nueva, y conllevar un salvo inventivo. 2. La invención debe hacer una contribución técnica. 3. El total de la invención debe ser evaluado para determinar la contribución técnica al "estado del arte" Artículo 5: una invención implementada en ordenador puede ser implementada a través de un ordenador a o de cualquier apartado programable con el programa dentro. El artículo 6 es muy importante. Relaciona la propiedad intelectual con esta directiva. Ambas son de aplicación. El artículo 7 comprenda la obligación de la Comisión de monitorizar el impacto de esta directiva. El artículo 8 está relacionado con el anterior. Después de la monitorización, la Comisión tiene que informar: sobre el impacto de esta directiva, si aún es valida, y, si han surgido patentes "erróneas", de que manera resolver esto. Los artículo 9, 10, 11 son artículos administrativos sobre la aplicación de la directiva, su entrada en efecto, etc. 3.3. Conclusiones En mi opinión el actual estado de las patentes de programas de ordenador ha de ser revisado. Si los programas de ordenador no pueden ser patentados es increíble que se hayan concedido más de 15.000 patentes sobre los mismos. Está claro que hace falta una legislación a nivel europeo que unifique los criterios necesarios para poder patentar un programa de ordenador. Me inclino por la propuesta de EuroLinux más que por la de la Comisión Europea. En la propuesta de EuroLinux se hace hincapié en el uso de los programas de ordenador a nivel industrial y siempre conducentes a "la modificación de la materia" como objetivo del mismo. De este modo las patentes de ordenador estarían más cercanas al espíritu inicial de las patentes que es la defensa de la innovación "industrial". 4. Conclusiones La UE dispone a día de hoy de una legislación, la de propiedad intelectual, y una propuesta de legislación, sobre la patentabilidad de los programas de ordenador, que afectan al desarrollo del software OS/FS. La legislación sobre propiedad intelectual, más que beneficiosa, es el marco legal sobre el que basar la propiedad del software OS/FS, algo reconocido por la comunidad, y el que provee de los derechos necesarios para poder "abrir" el software e impedir un uso fraudulento del mismo. La propuesta de la Comisión sobre las patentes de software puede perjudicar el desarrollo del software OS/FS. Como ya plantean diversos documentos, las patentes no sólo pueden representar un freno al desarrollo de la tecnología de las telecomunicaciones y la informática en general, afectan de forma especial al software OS/FS debido a sus especiales características. Confiemos en que entre el Parlamento Europeo y el Consejo consigan rehacer la propuesta de la comisión y conseguir un sistema de patentes comunitario que apoye y desarrolle el movimiento OS/FS. 47 Legislación europea y el Open Source / Free Software Bibliografía Comisión Europea , COM(1994) 347 final, Europa en marcha hacia la sociedad de la información . Comisión Europea , COM(1995) 382 final, Derechos de autor y derechos afines de la sociedad de la información . Comisión Europea , COM(1996) 568 final, Seguimiento del Libro Verde sobre derechos de autor y derechos afines de la sociedad de la información . Comisión Europea , Directiva 2001/29/CE, Relativa a la armonización de derechos de autor y derechos afines en la sociedad de la información . Comisión Europea , Directiva 91/250/CEE, sobre la protección jurídica de programas de ordenador . Comisión Europea , Directiva 93/98/CEE, relativa a la armonización del plazo de protección del derecho de autor y de determinados derechos afines . Convenio de Munich sobre la Patente Europea (CPE) , 1973 . Convenio de Luxemburgo sobre la patente comunitaria (CPC) , 1975 . Acuerdo en materia de patentes comunitarias (APIC) , 1989 . Comisión Europea , COM(97) 314 final, Libro Verde sobre la patente comunitaria y el sistema europeo de patentes . Comisión Europea , COM(99) 42 final, Comunicación al Consejo, al Parlamento Europeo y al Consejo Económico y Social sobre el seguimiento que debe darse al Libro Verde sobre la patente comunitaria y el sistema europeo de patentes . Comisión Europea , COM(2000) 412 final, propuesta de Reglamento del Consejo sobre la patente comunitaria . Comisión Europea , COM(2002) 92 final, propuesta de Directiva del Parlamento Europeo y del Consejo sobre la patentabilidad de las invenciones implementadas en ordenador. . Gretel (COIT) , Gretel 2002, Nuevo diseño europeo de las Telecomunicaciones, el Audiovisual e Internet . Free Software Foundation , GNU GPL (www.gnu.org) . Robert Hart y John Reid , The Economic Impact of Patentability of Computer Programs . IBM , Role of national patent offices, the European Patent Office, as well as the Japanese and US patent offices in promoting the patent system Final report to the European Commission Almere , 2003 . PbT Consultants , The results of the European commission consultation exercise on the patentability of computer implemented inventions . IBM , Europe Response to the Services of the Directorate General for the Internal Market The Patentability of Computer-Implemented Inventions Consultation Paper of 19.10.2000 . James Bessen y Eric Maskin , Sequential innovation, patents and imitation . Jesús González-Barahona , EU Consultation on Software Patents Contribution , December 2000 . EuroLinux Alliance , DGIM Consultation on Software Patents , 2000 . 48 Legislación europea y el Open Source / Free Software BSA , Comments to the European Commission Consultation Paper on the Patentability of Computer-Implemented Inventions . 49 La Intranet Educativa Municipal del Ayuntamiento de La Coruña Enrique Ocaña González Igalia, S.L. Departamento de Servicios A Coruña España [email protected] En este artículo se presentan brevemente los orígenes, presente y futuro de la intranet educativa municipal que el Ayuntamiento de La Coruña ha implantado en los centros educativos de la ciudad. Se comentarán las principales dificultades para mantener el nivel de funcionalidad de la red a lo largo del tiempo y cómo el software libre permite alargar la vida útil de los equipos. Por último se establecerán una serie de conclusiones acerca del uso de la informática y el software libre en la educación. 1. Los comienzos de la intranet educativa La intranet educativa del Ayuntamiento de La Coruña nació en el año 1999 como un proyecto pionero para poner las tecnologías de la información y las comunicaciones a disposición de más de 60 centros educativos no universitarios de la ciudad. Inicialmente el ayuntamiento contó con la colaboración del departamento de computación de la universidad de La Coruña, que llevó a cabo un estudio preliminar de la tecnología (véase WePrj). Aunque se barajaron otras alternativas, se tomó la decisión de emplear IBM NetworkStation 1000 contra un servidor central Windows NT con Citrix Metaframe en cada aula. Los NS1000 están basados en NCOS, variante de NetBSD, sobre arquitectura PowerPC. No llevan disco, ya que acceden a los datos mediante NFS a través de la red. Incorporan Netscape 4.7 como navegador local, así como un cliente ICA para conectarse al servidor Metaframe. El sistema operativo de estos clientes ligeros es propietario y cerrado, y no incorpora un compilador C ni ficheros de cabeceras para permitir nuevos desarrollos. Los motivos para emplear clientes ligeros fueron los siguientes: • Bajo coste de mantenimiento software: Al carecer de disco y obtener el sistema operativo de un servidor central de aula, simplemente hay que mantener 60 servidores en lugar de 60 x 15 equipos. • Baja probabilidad de fallo: Al no tener disco duro ni ventilador, la probabilidad de fallo se reduce drásticamente. • Baja obsolescencia: Los clientes ligeros están pensados como clientes para sesiones remotas, no para proceso local. De este modo quien se queda obsoleto es el servidor, no el terminal. ISBN 84-88783-66-3 ©2003 50 La Intranet Educativa Municipal del Ayuntamiento de La Coruña Finalmente se implantó la infraestructura de red que se muestra en Figura 1 con diversos servicios que se explicarán a continuación. Figura 1. Esquema de la intranet educativa municipal SERVICIOS CENTRALES Internet Intranet CENTRO EDUCATIVO nc1 ... nc15 Servidor de aula 1.1. Aula educativa (una por centro) En el aula, como se ha dicho, un servidor con Metaframe con escáner e impresora y entre 13 y 15 terminales NetworkStation 1000. Existe un sistema de cuentas de usuario públicas (cualquiera puede utilizarlas) y privadas (de uso personal para alumnos y profesores). Por supuesto, aplicaciones educativas y un proxy local en el servidor para acelerar la navegación por internet. Todas las aulas están conectadas a la red central del ayuntamiento por medio de una red privada contratada con un proveedor de cable regional. 1.2. Servicios centrales Se establecen también una serie de servicios centrales ofrecidos desde el ayuntamiento: • Web educativa municipal (véase Webedu) • FTP • Correo electrónico • Listas de correo • News • IRC • LDAP • Proxy central + filtro La web educativa municipal era inicialmente muy simple, pero fue evolucionando hasta incorporar un sistema de gestión centralizada de usuarios, noticias educativas, buscador, correo web, aula virtual, pensar en educación, enrédate y webs de centros escolares. El "aula virtual" es una zona donde los profesores que lo deseen pueden publicar los contenidos web que ellos mismos desarrollan. 51 La Intranet Educativa Municipal del Ayuntamiento de La Coruña En la sección "pensar en educación" tienen cabida materias transversales, como educación para la paz, igualdad interracial, derechos de la mujer... La sección "enrédate" es una recopilación de enlaces y recursos educativos interesantes en internet. El servicio de FTP (file transfer protocol, protocolo de transferencia de archivos) permite publicar contenidos a los profesores y centros que lo deseen. El correo electrónico, las listas de correo y las news constituyen el medio de comunicación de los usuarios de la intranet con el exterior. Cada cuenta privada dispone de una dirección de correo asociada automáticamente de la forma [email protected]. Un servidor LDAP (lightweight directory access protocol, protocolo ligero de acceso a directorio) mantiene de forma centralizada una base de datos de los usuarios de la red, con sus respectivas contraseñas y direcciones de email asociadas. Hay que aclarar que la red central del ayuntamiento está aislada de internet. Es necesario un proxy central para proveer de acceso web al resto de los proxys de aula de la intranet, actuando de filtro web al mismo tiempo. El filtro web es necesario para evitar que los menores accedan a contenidos inadecuados en la red. 1.3. Equipo de gestión y mantenimiento hardware y software Velan por el buen funcionamiento de la red y el desarrollo de la página web educativa. En la actualidad hay tres ingenieros encargados del mantenimiento y resolución de incidencias software y un psicopedagogo encargado del desarrollo de la web. Una empresa de mantenimiento hardware y el operador de cable que suministra la conexión entre los centros y el ayuntamiento se ocupan de los problemas de equipos y red. 2. La actualidad de la intranet educativa Por nuestra experiencia en software libre y conocimiento de la tecnología empleada en la intranet, Igalia es escogida en Junio de 2002 para tomar el relevo a la universidad en las tareas de mantenimiento de la red. Nuestra actividad abarca mucho más que la resolución de incidencias diaria. Hemos puesto en marcha nuevos servicios y aplicaciones: • Aplicaciones basadas en software libre, personalizadas para soportar la configuración de nuestra red: mozilla firebird (navegador), openoffice (ofimática), gimp (retoque fotográfico), logo, dev-c++ y gnu pascal (programación), filezilla (FTP), 7zip (compresor), dia (diagramas), VNC (pizarra virtual) y otras aplicaciones GNU (véase GNUWin)... • Servicios centralizados, tanto de uso público como para el apoyo a la gestión interna: squirrelmail (webmail), drupal (foro), claroline (teleformación), bugzilla (gestión de incidencias), irm (inventario de software)... • Desarrollo propio de aplicaciones de gestión administrativa: inscripción a actividades educativas "aprender en Coruña", reserva online de entradas de teatro, consulta del estado de incidencias, gestión de actas de consejos escolares, sugerencia de enlaces y páginas del filtro. La tecnología no es nada sin una formación adecuada. Por eso Igalia organiza visitas personalizadas a los centros y cursillos de formación específica para que los profesores aprendan a sacarle el máximo partido a los recursos que la intranet les ofrece. Estos cursos sirven, además, para obtener el feedback necesario y conocer de primera mano la opinión y necesidades de los docentes. 52 La Intranet Educativa Municipal del Ayuntamiento de La Coruña 3. El futuro de la intranet educativa 3.1. La evolución del cliente ligero En el mundo de las tecnologías de la información el ritmo de evolución de la tecnología es extremadamente acelerado. Generalmente dicha evolución no suele ser asfixiante en un entorno empresarial cerrado, donde las tareas a realizar se mantienen constantes. Sin embargo, en el entorno de la intranet educativa, donde una de las prioridades esenciales es el uso de internet como herramienta educativa, el problema de la obsolescencia se hace patente y es necesario incrementar las funcionalidades del sistema. La navegación de 15 usuarios simultáneos satura el servidor, pero no es posible navegar en los terminales porque el Netscape 4.7 de los clientes se ha quedado anticuado. Es necesario otro navegador en el cliente. ¿Qué hacer si no existen herramientas de desarrollo para estos clientes ligeros y el fabricante ha dejado de soportarlos? ¡Usar Linux como sistema operativo! Nunca antes se había conseguido ejecutar Linux en estos aparatos. No se conocían las especificaciones de la máquina y fue necesario coordinar un equipo de desarrollo internacional (véase NS1000) para hacer los cambios necesarios en el kernel. No obstante, siguen existiendo problemas debido a la necesidad de incorporar software de compañías que no han portado sus productos a plataforma Linux PowerPC, como es el caso del plugin de Flash. Finalmente, se configuró adecuadamente una distribución Debian (véase Deb) hasta conseguir un producto adecuado para implantar de modo experimental en las escuelas infantiles de la ciudad. Se ha bautizado a esta adaptación con el nombre de Corunix. Estas escuelas poseen un servidor Windows NT, 4 terminales y un servidor Linux. El servidor Linux elimina muchos de los problemas técnicos, pero por el momento esta configuración no es aplicable al resto de los centros de la intranet, ya que sólo disponen de servidores Windows NT. El no disponer de un servidor Linux plantea ciertos problemas técnicos para simular un sistema de ficheros NFS con usuarios, permisos, enlaces simbólicos y acceso concurrente. Por el momento estamos investigando la solución a esos problemas empleando CygWin. A la hora de decidir qué software se iba a incluir en Corunix, se hizo un estudio del software libre disponible en Debian y se hicieron pruebas de qué paquetes funcionaban correctamente en los terminales. 3.2. La evolución de los servicios centrales En estos momentos se está trabajando en un nuevo sistema mejorado de gestión centralizada de usuarios vía web. El nuevo sistema permitirá que un mismo usuario pueda pertenecer a más de un colegio, contempla la figura del profesor administrador, purga los usuarios cada año y permite mantener la cuenta de correo aún cuando el usuario ya no pertenezca a ningún centro. Otra tarea pendiente en la red educativa es la implantación de una clave única para todos los servicios web, ya que por el momento el usuario tiene que registrarse de forma independiente para la red educativa/correo electrónico, el foro y la plataforma de teleformación. 4. De la experiencia se aprende A lo largo de todo este tiempo ha cambiado el contexto que hacía válida la solución inicial basada en clientes ligeros. De todos estos cambios se pueden extraer algunas conclusiones: 53 La Intranet Educativa Municipal del Ayuntamiento de La Coruña El proceso centralizado en un servidor (de aula) con ventanas exportadas presenta problemas al ejecutar aplicaciones que exigen un rendimiento gráfico elevado. Es preferible realizar las tareas multimedia en los clientes, con lo cual el uso de thin clients debería descartarse en favor de equipos con mayor potencia. La obsolescencia de los equipos es difícilmente predecible cuando se destinan a un entorno abierto y de rápida evolución como Internet. A la hora de diseñar una red siempre hay que preguntarse ¿dónde estaremos dentro de 3 años?. Es un error confiar en una plataforma cerrada o poco común, en nuetro caso NCOS sobre PowerPC. Si el fabricante decide dejar de dar soporte se pone en peligro la mantenibilidad del proyecto. En nuestro caso no fue posible aumentar la funcionalidad del software original de los thin client para minimizar la dependencia del servidor. Apostando por una plataforma libre se evita este problema. Necesidad de formación y concienciación del profesorado en el uso de las TIC a su alcance. La única forma de hacer que los profesores valoren el software libre es enseñándoles a sacarle partido. Es interesante consensuar entre profesores y técnicos una lista de programas educativos libres que cubran las necesidades curriculares de 0 a 18 años. Si se utiliza software libre en la escuela, también se utilizará en casa y al final todos salimos ganando. Referencias [WePrj] Proyecto: Red educativa de La Coruña. http://www.edu.aytolacoruna.es/proyecto [Webedu] Web Educativa del Ayuntamiento de La Coruña. http://www.edu.aytolacoruna.es/ [GNUWin] GNUWin. http://gnuwin.epfl.ch/es/index.html [NS1000] Linux on the IBM NetworkStation 1000. http://sourceforge.net/projects/networkstation/ [Deb] Debian GNU/Linux - The Universal Operating System. http://www.debian.org 54 PROPIEDAD, S.L.: Propiedad y software libre Un enfoque educativo José J. Grimaldos Profesor de Matemáticas IES Cura Valera. (http://www.iescuravalera.org) Huércal-Overa (Almería) [email protected] Resulta ya tópico decir "los tiempos están cambiando", "cada día surgen nuevos retos",... pero, tal vez como ocurre con la mayoría de tópicos, algo tienen de verdad. En el caso del propósito de estas reflexiones, qué duda cabe, cualquier observador curioso debe sentirse intrigado ante el devenir del fenómeno asociado al software libre. No pretendemos, en absoluto, una tarea de divulgación de esta ¿filosofía?,tampoco es nuestra meta el proselitismo, ni tan siquiera la formulación de unas tesis de contenido político, económico, jurídico o social; sólo pretendemos acercarnos con cierta curiosidad a este movimiento y plantear algunas reflexiones acerca de sus implicaciones en el pensamiento actual, los valores educativos que encierra, en definitiva, más dudas que certezas. Para ello, huiremos de los profundos, y desconocidos para el autor, análisis académicos o técnicos donde el software libre está siendo objeto de análisis, estudios, ensayos y... hasta simulaciones iterativas usando modelos matemáticos inspirados en la "Teoría de Juegos" y trataremos de enfocar el tema en los valores educativos que encierra el software libre en sí mismo, desde las necesarias precisiones sobre el concepto de propiedad que situen con claridad el carácter de libre. 1. Clarificando el lenguaje En principio, hemos de aclarar ciertos vocablos, la mayoría heredados o adaptados del idioma inglés, dado el carácter tecnológico del tema, a fin de que la semántica no sea un problema añadido, y con objeto, además, que la persona no muy familiarizada con la informática y su particular jerga tenga la posibilidad de acceder sin dificultad a las ideas que se exponen. Tal vez, desde principios de siglo, la información ha alcanzado tal dimensión que el exceso de la misma requiere de herramientas auxiliares para ser procesada. En este sentido, las técnicas de computación han auxiliado al hombre en esta tarea hasta el punto de convertirse casi en imprescindibles hoy día. Bien es cierto que, en honor a la verdad, no son condición necesaria ni, por supuesto, suficiente para que un estudioso, investigador o un simple ciudadano, sin más pretensiones, acceda al conocimiento que desee, necesite o busque. En cambio, sí es habitual que la mayoría de personas, en mayor o menor medida, acudan a los ordenadores cotidianamente para aliviar parte de su actividad. ISBN 84-88783-66-3 ©2003 55 PROPIEDAD, S.L.: Propiedad y software libre Un ordenador es, simplemente, un conjunto de piezas ensambladas en torno a un procesador con una gran capacidad operativa, aritmética y lógica. Sin embargo, todos estos componentes, convenientemente concectados, son incapaces de realizar tarea alguna por sí mismos, necesitan un soporte lógico que les dote de cohesión y les haga funcionar coordinadamente con algún propósito específico. Es necesario además que el ser humano tenga la posibilidad de comunicarse con él, por una parte para demandarle el tipo de procesamiento deseado y por otra, para recibir el resultado del proceso. Básicamente necesitamos dos tipos de programas: Uno específico que sea capaz de realizar la tarea concreta que pueda demandar un usuario (procesar texto, gestionar una base de datos,...) y otro genérico que cohesione los diferentes elementos físicos del ordenador y, a su vez, se entienda con el programa específico utilizado por el usuario. Este último tipo de programa se conoce con el nombre de sistema operativo y a los primeros se les llama aplicaciones. Ambos se construyen generalmente sobre una secuencia de comandos en un determinado idioma 1 que constituyen el código fuente de cada programa. 1.1. El código fuente Sobre este código fuente gira toda la controversia. Las personas con los conocimientos necesarios para escribirlo son conocidas como hackers o programadores y, es conveniente distinguirlos de los crackers pues éstos últimos son también programadores de grandes conocimientos, pero con intenciones maliciosas o dañinas que a los primeros no se les suponen. El código fuente de un programa es, por tanto, un simple texto que contiene las instrucciones para que el procesador, junto a los periféricos, realicen una determinada tarea, sea ésta simple o de gran complejidad. Sin embargo, para que las órdenes que contiene sean comprendidas por la máquina es necesario traducirlo (compilarlo) a un lenguaje denominado genéricamente código máquina que es propio de la estructura interna que ésta posea; una vez realizado este paso, el texto que inicialmente contenía el código fuente deja de ser legible para el humano y pasa a ser accesible sólo para la máquina. Además, este código fuente permite ser cifrado y, por tanto, ocultado ante lectores no deseados. Es lo que ocurre con los programas comerciales, donde únicamente el propietario posee el código fuente de éste y sólo a él le está permitido hacer modificaciones en el comportamiento de su programa. 2. Un poco de historia Pese a que en la actualidad, el fenómeno del software libre está generando un eco y una repercusión considerables, lo cierto es que su génesis podría datarse casi en los inicios de la computación moderna. No es fácil señalar una fecha ni un lugar concretos, como es lógico, raras veces las ideas, las tendencias o los movimientos sociales vienen acompañadas de partidas de nacimiento en toda regla y este caso no es una excepción. El primer sistema operativo digno de recibir ese nombre, tal y como lo concebimos hoy, nace en los laboratorios Bell fruto de la curiosidad investigadora del ser humano. Nació libre y fue bautizado con el nombre de Unix, al poco tiempo pasó a ser comercial puesto que fue patentado, registrado y distribuido por una considerable cantidad de dinero, sólo al alcance las las grandes firmas comerciales. Aún quedaba muy lejos el PC doméstico. Por aquel entonces los computadores estaban recluidos en los centros de cálculo e investigación, en los departamentos contables de las grandes organizaciones comerciales y centros similares. La informática era, pues, una disciplina científica de aplicación, todavía, lejos del gran público, lejos de la sociedad y oficiada por una privilegiada élite de investigadores capaces de instruir al computador. 1. Lo que conocemos como "lenguaje de programación". 56 PROPIEDAD, S.L.: Propiedad y software libre 2.1. El movimiento GNU Un grupo de hackers, abanderados por Richard Stallman (RMS) (http://www.stallman.org) se rebelaron ante esta situación porque defendían que el software era conocimiento científico y como tal no debía ser patentado ni comercializado, sino todo lo contrario, difundido como motor del avance del progreso. Se consideraban, ante todo, investigadores, y como tales, frecuentaban el libre intercambio de información entre la comunidad científica. Con este objetivo crearon la Fundación para el Software Libre (FSF) (http://www.fsf.org) con el objeto de recaudar fondos que permitieran la creación y distribución de programas de código abierto. 2 Así nacieron distintas aplicaciones de software libre (como Emacs, gcc,...) que aún hoy día gozan de gran difusión. Para ajustarse al marco legal vigente e impedir que sus productos fueran patentados y comercializados por alguna empresa que se apropiase de su código libre, la FSF los protegió bajo la Licencia Pública General (GPL) (http://www.fsf.org/licenses/gpl.html), una ingeniosa fórmula de copyright expansivo, conocido como copyleft, en contraposición a las restricciones de las licencias de copia habituales. Las condiciones de esta licencia, calificada también como contagiosa, se aseguran que un producto amparado por ella no evolucionará a versiones propietarias o restrictivas, pues hereda las características de la licencia original. Esta astuta forma de proteger sus creaciones ha convertido a la FSF en el foco más significativo de la comunidad del software libre durante varios años, sobre todo, en la década de los 80 y principios de los 90, llegando a crear lo que muchos han calificado de ideología hacker. 2.2. Linux entra en escena Paralelamente, Linus Torvald, un estudiante de informática finlandés, escribía, a principios de los años 90, un sistema operativo compatible con Unix con el objeto de poder practicar en su ordenador doméstico. Este rudimentario sistema se llamó Linux y su creador difundió el código fuente en la red Internet para que fuese probado y mejorado. Este hecho causó una revolución sin precedentes en el ámbito informático, propiciando que muchísimos hackers se entusiasmaran con el proyecto hasta el punto que sobre el año 93, Linux era ya un sistema operativo casi tan potente y robusto como su inspirador Unix y superaba holgadamente en muchos aspectos a la mayoría de sistemas comerciales. No sería esa la única expansión que sufriría. A finales de los años 90, con la integración de los entornos gráficos de escritorio más avanzados (fundamentalmente GNOME y KDE) Linux abandonó los círculos propios de hackers para extenderse al usuario final, convirtiéndose así en una seria amenaza para los intereses comerciales de los fabricantes de programas de código cerrado, siendo en este momento cuando la polémica salta también a las tribunas de la sociedad. 3. Sobre la propiedad El fenómeno del software libre está poniendo en cuestión numerosos conceptos normalmente asumidos, unas veces de manera natural, otras, no tanto, en la sociedad occidental actual. El primero en tambalearse visiblemente es el de propiedad, en el sentido genuino del término y, como efectos colaterales, los derechos de copia, propiedad intelectual, libertad de información, así como otras cuestiones menores como libertad de mercado, monopolios, etc. Siempre que usamos el concepto de propiedad, en general, tendemos a la identificación de un bien material o inmaterial pero asociado a la exclusividad, es decir "poseemos algo", bien sea total o parcialmente; de modo que tenemos plena capacidad y absoluto dominio del bien poseido. 2. Los programas de código abierto son aquellos que se distribuyen junto al su código fuente para que cualquiera pueda mejorarlo y adaptarlo a sus necesidades 57 PROPIEDAD, S.L.: Propiedad y software libre 3.1. Propiedad posesiva Si adquirimos un refresco, podemos consumirlo, compartirlo o regalarlo, pero debemos fijar nuestra atención en unos rasgos fundamentales que acompañan a esta idea de propiedad. En primer lugar, el producto adquirido no ve alteradas sus características esenciales dependiendo del precio pagado, incluso si nos lo han regalado tenemos pleno dominio sobre nuestra posesión y nada condiciona nuestra decisión acerca del destino posterior del refresco. Cuando compramos software propietario este dominio no es absoluto y se nos cercena la posibilidad de adaptar, mejorar, copiar y/o compartir el producto. En segundo lugar, si ejercemos el derecho de decisión sobre el refresco, en cualquier sentido, perdemos todo o parte de nuestro dominio, tanto si lo consumimos, lo compartimos o lo regalamos. La idea de posesión lleva implícita, pues, la idea de renuncia. No ocurre así con el software. Si poseemos un programa informático, podemos cederlo y/o compartirlo sin que perdamos ni un ápice de nuestra primitiva capacidad de dominio sobre la posesión. Esta característica, por sí misma, justificaría al menos una profunda reflexión sobre el peligro de extender la noción de propiedad -y por tanto el derecho sobre ella- alegremente a este terreno. Una observación detallada y reflexiva de esta cuestión bajo el prima educativo puede llevarnos, sin mucha dificultad, a la idea que instruir en este ambiente y con estos planteamientos puede fomentar el egoismo innato en el ser humano, alentando el hecho de poseer en sí mismo, sin importar la legitimidad o el reconocimiento general y, sobre todo, sin margen para el intercambio tan necesario y enriquecedor en el ámbito del conocimiento. La propiedad en el contexto de la comunidad del software libre tiene, y así debe tenerlo, un significado totalmente distinto al sentido de propiedad convencional. El propietario de un proyecto es aquél que tiene la capacidad exclusiva de redistribuir versiones modificadas del mismo. También ésto se origina dada la estructura organizativa y de trabajo que posee la comunidad hacker productora de software libre. Cuando surge un proyecto de programa o se aborda uno existente el grupo de hackers participantes se coordinan trabajando cooperativamente, en primer lugar, para evitar redundancias innecesarias como que varios escriban la misma parte del código y, en segundo lugar, para repartirse las tareas y sumar los talentos individuales. Cuando el resto de la comunidad acepta a ese grupo como responsable del proyecto, son los únicos autorizados para modificar y certificar las variantes de código introducidas, no por una cuestión reglamentaria, sino para evitar la muerte del proyecto por dispersión. Mientras tanto, cualquier usuario, hacker o no, es libre de usar o modificar la aplicación. Consideramos que es un proceder consecuente. Esta forma de entender la propiedad consagra un principio de legitimidad, es decir, el propietario lo es no por una cuestión meramente legal, sino porque la comunidad reconoce en él unos rasgos que le acreditan y son moralmente aceptables para todos. 3.2. Propiedad abierta Por lo tanto, para la comunidad hacker de software libre no existe el concepto de propiedad convencional, de hecho toda su producción está amparada por la Open Source Definition (OSD (http://www.opensource.org/docs/definition.php)) que, al menos en teoría, permite a cualquiera tomar el código fuente de una aplicación, duplicarlo y evolucionarlo en cualquier sentido. No obstante, los usos y costumbres de los programadores de software libre hacen que su configuración y funcionamiento, tanto a nivel individual (Los proyectos también los puede mantener una sola persona) como a nivel de grupo "propietario" de un proyecto, les confieren unas características muy particulares. Según Eric S. Raymond (http://www.tuxedo.org/~esr/), en un ensayo sobre el comportamiento de estos hackers llamado "Cultivando la noosfera" (http://www.tuxedo.org/~esr/writings/homesteading/homesteading/) pone de manifiesto la contradicción entre la teoría de la propiedad asumida por la comunidad del software libre y la práctica tan diferente que resulta de sus formas de proceder, ateniéndose a unas costumbres, a menudo, con matices heredados del mundo del "software propietario". Concretamente defiende que el modelo generativo de 58 PROPIEDAD, S.L.: Propiedad y software libre software libre es homólogo a la teoría de Locke sobre posesión de tierras, para ello destaca tres formas en las que un hacker puede adquirir la propiedad de un proyecto para crear un programa libre. En primer lugar, fundando el proyecto. Lógicamente en este caso la "propiedad" no es discutida. En segundo lugar, heredándolo de su anterior propietario. Finalmente, proponerse como propietario de un cierto proyecto si éste necesita atención porque el propietario haya desaparecido o se encuentre abandonado. En este caso el protocolo requiere un anuncio previo a la comunidad, la espera prudencial antes de repetir su ofrecimiento y si no hay objeción a su propuesta, puede adueñarse del proyecto, aunque no será reconocido completamente mientras no aporte una innovación sustancial. En cualquier caso, en todos los supuestos está presente una idea legitimadora que evita el sentimiento únicamente egoísta y propicia el esfuerzo a la búsqueda del mérito. Sin duda, un valor formativo nada desdeñable. 3.3. Estructura de la propiedad libre Esta forma de proceder, según Raymond, es totalmente lockeana y recuerda la ley común anglo-americana sobre tenencia de tierras, sistematizada y racionalizada por el filósofo inglés John Locke a principios de la era moderna. Hay otras consideraciones acerca del proceder de la comunidad del software libre como Faré Rideau (http://fare.tunes.org/) quien sostiene que el hacker no ejerce su dominio en el territorio de las ideas puras, sino en los proyectos de programación, incluyendo por tanto, una labor material que lleva asociada elementos como la confianza, reputación, etc. para él sería pues, más preciso, situar sus dominios en el terreno de la ergosfera o esfera del trabajo, si bien esta matización no perturba demasiado el concepto de propiedad mismo que se manifiesta en este ambiente. Este modelo de propiedad es el que podríamos denominar, de un modo no exento de paradoja, "propiedad libre" porque en él no son fundamentales los conceptos de heredad o perpetuidad, sino que el control sobre lo poseído está, por la propia dinámica del sistema, siempre en cuestión. Un "propietario" que se negara a liberar nuevo código, que se mostrara reticente a la incorporación de mejoras, que su obstinación rebasara lo razonable o que la intransigencia pertinaz fuese una rémora para el progreso del proyecto, sería finalmente cuestionado por el resto de la comunidad y relegado de sus funciones, o bien, otro hacker asumiría el proyecto virando en la dirección adecuada y condenando, de paso, al ostracismo al líder dictatorial. Por tanto la propiedad se fundamenta en el respeto, en el prestigio, en la actitud y en la aptitud, siendo así fruto del consenso general. Cuestiones totalmente al margen del concepto de propiedad convencional. Como ocurre en la mayoría de casos, para avanzar, es necesario mirar atrás. El concepto de propiedad surge como un acuerdo para evitar las luchas fraticidas por el control de bienes escasos. La sociedad se dota de este instrumento regulador como escudo protector ante los desastres ocasionados por la disputa de elementos vitales, no suficientes para colmar las necesidades o aspiraciones de todos los miembros de la comunidad. En su génesis, la propiedad se ejercía sobre un, llamémosle así, "objeto" público, las tierras, el agua, los refugios donde cobijarse. Más tarde, fue extendiendo su ámbito para acoger las creaciones individuales o colectivas: las cosechas, las rudimentarias armas,... En definitiva, como todos los consensos humanos, es fruto de la necesidad, del "mal menor", del "beneficio"... del beneficio social. Toda sociedad acota sus libertades individuales con el único objetivo de protegerse o beneficiarse colectivamente. Llegado este extremo, cabe preguntarse, ¿estas consideraciones son de aplicación al software?, ¿qué debe proteger la sociedad, al creador de software o al comercializador?, ¿es el software un bien escaso susceptible de ser protegido?, si un programa se copia, se divulga, ¿se impide o se limita que el resto de personas puedan crear nuevas aplicaciones?, ¿qué es más beneficioso socialmente, el software comercial o el software libre? Desde luego, sería paradójico que la sociedad adoptase un marco regulador que le perjudicase a sí misma. No tendría mucho sentido y, por supuesto, estaría en contra de la finalidad primitiva de las estrategias normativas, incluso de las más evolucionadas, como afirma Jean-Jacques Rousseau en "El contrato social": Encontrar una forma de asociación que defienda y proteja de toda fuerza común a la persona y a los bienes de cada asociado, y gracias a la cual cada uno, en unión de todos los demás, solamente se obedezca a sí mismo y quede tan libre como antes. 59 PROPIEDAD, S.L.: Propiedad y software libre Es evidente que el software no presenta las características de un bien poseible en el sentido primigenio del término, más bien, nos debemos aproximar al concepto de "acción apropiativa" fruto del trabajo, 3tal y como convergen las tesis liberales y socialistas. Sin embargo hay muchas opiniones que sostienen la inapropiabilidad del software, abanderadas por Stallman y la FSF. 4. ¿Software? libre, por favor Pese a todo lo expuesto, hay determinados factores que intervienen, tal vez, para añadir mayor confusión y margen de controversia o, tal vez, para contextualizar el fenómeno del software y presentarlo junto a su genuino marco de gestación, desarrollo y distribución. Entre estos factores es indudable que destaca el fenómeno de la Internet, tanto su aparición,4 como, y sobre todo, su expansión hasta el nivel que conocemos. Aunque todavía carezcamos, quizás, de perspectiva o lejanía histórica suficiente para calibrar en su justa medida. Otro factor a tener en cuenta es la propia estructura de los programas, compuestos de algoritmos, subrutinas, bibliotecas,... no necesariamente genuinas, sino que es la combinación de una serie de elementos, en un cierto orden, lo que proporciona cohesión y funcionalidad a una aplicación informática, pero fundamentalmente, las tecnologías de distribución, edición y copia han evolucionado hasta unas cotas y con una velocidad, sin precedentes, ocasionando un fuerte desconcierto entre una sociedad organizada en unas estructuras jurídicas sorprendidas ante este voraz crecimiento. Todo este cambio tecnológico se ha ido produciendo en las últimas décadas bajo el paraguas normativo de las leyes de propiedadad intelectual, copyright y patentes, por supuesto generadas en una época diferente y con unos objetivos también diferentes. Tan sólo en algunos países se han producido cambios, modificaciones o nuevas normativas que recogían aspectos relacionados con el software, las nuevas tecnologías o el comercio electrónico, pero, bajo la referencia del actual contexto jurídico, es decir, sin afrontar un marco legislativo nuevo, acorde con las peculiaridades del tema y los intereses de la sociedad. Es ciertamente interesante conocer la posición del movimiento por el software libre en relación con la regulación normativa existente y su evolución. En primer lugar, como hemos avanzado, se defiende la idea que el software no es patentable. Para ello se fundamentan el los principios básicos que generaron la adopción del concepto de propiedad en que se sustenta la teoría del liberalismo, incluso, la propia antropología: ante unos bienes materiales escasos, constituye la única salida civilizada al control de los recursos disponibles esquivando las luchas permanentes entre los miembros del colectivo, en cambio, el software no comparte esta característica, no forma parte de los bienes físicos o materiales sino que se encuadra en el ámbito de las ideas, constituyendo un tipo particular de éstas, más cercanas al conocimiento intelectual o, si se prefiere, a la aplicación práctica de éste. En consecuencia, la escasez o no de ideas no está relacionada con que éstas sean propietarias o libres, puesto que es posible generar conocimiento simultáneamente, es decir, si dos personas tienen una idea, no impiden que la tenga también un tercero. 4.1. La sociedad contra sí misma Es el momento de plantearse, ¿por qué la sociedad ha llegado a ver con naturalidad el comercio de software?, ¿por qué se permiten las patentes sobre el conocimiento humano, e incluso se protegen jurídicamente?, ¿qué beneficio obtiene la sociedad con estas prácticas? Indudablemente, son muchos los factores que intervienen para explicar la situación actual. En primer lugar, la propia naturaleza práctica del software 5hace que vaya unido a la comercialización de servicios, a recursos físicos y a la realización de tareas que sí tienen mucho que ver con la economía de la sociedad. No es de 3. 4. 5. Incluso aquí hay margen para la disidencia: la creación de software, ¿es sólo un trabajo? El fenómeno de la Internet, por sí mismo, justificaría varias tesis y varios ensayos. No en vano, la mayoría de programas informáticos son conocidos como aplicaciones 60 PROPIEDAD, S.L.: Propiedad y software libre extrañar, entonces, que, interesadamente, las empresas hayan tratado, y conseguido, llegar a confundir producto con servicio y comercializar todo un conjunto incluyendo el software en el lote. En segundo lugar, se ha utilizado equívocamente la llamada propiedad intelectual y todo su marco legal relativo a derechos de copia y patentes, para colocar al software libre bajo su cobertura, cuando en realidad, ni por cuestiones históricas, prácticas, ni por interés social se justifica este hecho. Los derechos de copia surgen, y tienen su sentido, con la aparición de la imprenta que posibilitaba la producción en serie de libros, antes, ni existían, ni fueron necesarios, de hecho, era natural que los libros ser copiasen a mano sin despertar recelo social. Sin embargo, cuando la copia en serie se convirtió en realidad, la sociedad estimó la adopción de un instrumento que regulara esta nueva situación, naciendo así los derechos de copia. Es claro que la normativa restringía tan sólo a las imprentas, por lo tanto, a la sociedad en general 6no se le cercenaba ningún derecho fundamental que le fuese propio y, en un principio, constituyó una normativa fácil de vigilar en su cumplimiento pues bastaba con controlar a las industrias de impresión. Sin embargo, a partir de la aparición de la fotocopiadora, pero sobre todo, con el tremendo desarrollo de la tecnología de autoedición y copia, este marco normativo está gravemente obsoleto pues para su control se están proponiendo y ejecutando una serie de medidas que colisionan frontalmente con derechos fundamentales de la libertad individual,7 síntoma claro de la no adecuación del ámbito jurídico a la necesidad social. Otro tanto ocurre con la propiedad intelectual o "derechos de autor" que no constituyen un derecho fundamental, de hecho, en la Constitución de los Estados Unidos está claramente recogido que la protección al autor sobre sus derechos intelectuales debe ser por un tiempo limitado, en su origen diez años, pero con el único fin de favorecer el progreso, es decir, la sociedad protege al autor pero con el objetivo "egoísta" de beneficiarse a sí misma. No ocurre así en la situación actual, en que los derechos de autor se esgrimen por las grandes corporaciones, para justificar sus propios intereses, no los de los autores ni los de la sociedad en su conjunto. En la época en la que surge la legislación sobre los derechos de copia, ningún ciudadano miembro de la socidad renunciaba, de hecho, a ningún tipo de libertad "ejercible" pues no disponía de industria de reproducción, hoy día, esta renuncia sí es significativa. El desarrollo tecnológico ha hecho posible que una gran mayoría de ciudadanos tengan la posibilidad de acceder y copiar información de cualquier tipo, por lo tanto, parece necesario, un replanteamiento de la situación, a nivel político y jurídico. Richard Stallman, en una conferencia pronunciada en la Universidad de Burdeos, el 7 de julio de 2000, pone un ejemplo bastante ilustrativo. Viene a decir que, si en las circunstancias actuales, a un ciudadano le pagan por firmar un documento en el que renuncia a realizar viajes interestelares, sería un trato ventajoso para él ya que, de momento, no limitaría nada su libertad de actuación, sin embargo, puede que dentro de unos años, el mismo trato tenga unas connotaciones distintas y, entonces, sí suponga una merma sensible para sus derechos y libertades básicos, debiendo ser abordado desde otra posición. Por otra parte, desde los tiempos de la FSF el software libre ha tenido que justificarse continuamente y tratar de argumentar sus ventajas sociales, tanto desde el punto de vista ético, filosófico, moral, económico o de capacitación técnica. Es necesario también que nos detengamos a reflexionar sobre las mejoras que representan para la colectividad los programas comerciales y demandemos a las empresas de software propietario las explicaciones pertinentes. Hasta ahora, todas las manifestaciones e informes en este sentido han carecido de argumentación sólida y de rigor científico. Se han basado en verdades a medias e hipótesis usadas como argumentos irrefutables para establecer unas conclusiones totalmente interesadas y alejadas de toda objetividad. Sirva como ejemplo el informe elaborado por la empresa norteamericana NERA (National Economic Research Associates) (http://www.neramicrosoft.com), conocido como Informe NERA, analizado por Ricardo Galli Granada (http://mnm.uib.es/~gallir/), profesor de la Universidad de las Islas Baleares, en un artículo aparecido en Bulma (http://bulmalug.net/body.phtml?nIdNoticia=1889), donde se pone de manifiesto la parcialidad y ausencia de rigor de este tipo de documentos elaborados al dictado de los grandes intereses comerciales. 6. La mayoría de ciudadanos no poseía una imprenta, claro. 7. Software para espiar el uso de los programas de ordenadores, para rastrear las páginas visitadas en la Internet, el chip numerado y registrado con que la empresa Intel equipó a sus procesadores, se propone, el cánon de la Sociedad General de Autores para gravar la compra de CD’s vírgenes, por si fueran usados para realizar copias musicales, aunque se destinen en realidad para realizar copias de seguridad de tus datos,... 61 PROPIEDAD, S.L.: Propiedad y software libre 5. El software libre como herramienta educativa Pocos ponen en duda que, hoy día, el software tiene un protagonismo esencial en todos los ámbitos de la sociedad, especialmente en el educativo. Constituye un instrumento básico para todas las tareas relacionadas con la generación, transmisión, recuperación y almacenamiento de información. Este fenómeno que muchos califican de Tercera Revolución Industrial y que hemos dado en denominar como Tecnologías de la Información y la Comunicación (TIC), descansa, en buena medida sobre los dominios del software. El manejo de aplicaciones, ya básicas, como el correo electrónico o el procesador de textos son un requisito para la mayoría de la población contemporánea. Nuestos escolares no pueden abandonar el colegio sin conocer, más aún, sin dominar estas destrezas. Ahora bien, ¿qué se necesita para conseguir este objetivo? En general, muchas y muy variadas condiciones. Algunas pueden resultar polémicas y controvertidas, sin embargo otras parecen diáfanas y concitan bastantes acuerdos, sobre todo desde el sentido común. Cada persona, cada educador puede tener, y probablemente tendrá, una visión muy particular de esta cuestión. Puede discrepar en la edad de iniciación apropiada, puede cuestionar los métodos y los procesos de enseñanza-aprendizaje, puede acentuar en mayor o menor grado el aspecto tecnológico-científico del software o el aspecto instrumental del mismo, sin embargo, resulta evidente que algunas cuestiones están al margen de la discusión. En primer lugar, para poder adiestrar en las TIC y convertirlas en un vehículo eficaz de transmisión de conocimientos junto a una herramienta formativa y útil, es necesario acercarlas a los centros educativos, de modo que el alumno crezca y se desarrolle junto a ellas, con ellas y, por qué no, por ellas. El esfuerzo necesario para este acercamiento que debe acometer la entidad competente no es baladí. El software libre se perfila como un aliado idóneo para esta tarea, aunque sólo seamos capaces de apreciar, obtusamente, el ahorro económico en el coste de licencias. Por otra parte la educación debe tener un carácter igualitario y ser un factor esencial en la corrección de desequilibrios sociales. No parece, pues adecuado, formar en unos sistemas propietarios y comerciales alejados, en muchos casos, de las posibilidades económicas de una gran parte de la población, sino que debemos procurar la formación en entornos abiertos que garanticen el principio de igualdad de oportunidades. Básicamente y de una forma general podemos considerar como necesidades sociales primarias en relación con las TIC, la posibilidad de generar información en diferentes soportes y formatos, la capacidad de transmitirla y compartirlas con nuestros semejantes, la recuperación, consulta y almacenamiento de la misma, en resumen, herramientas de gestión total del conocimiento disponible y/o generado. Puede quedar un resquicio para la polémica si cuestionamos las capacidades reales del software libre para estas tareas, sin embargo, no resulta demasiado convincente esta objeción en los tiempos actuales, donde numerosas aplicaciones libres han demostrado con creces, no ya su idoneidad para el objetivo de su diseño sino, en muchas ocasiones, un nivel de prestaciones muy por encima de otras soluciones comerciales del mismo propósito. 6. El carácter educativo del software libre Si dejamos a un lado las obvias capacidades del software para ser usado como una herramienta eficaz en los entornos educativos y nos centramos en sus valores intrínsecos o, incluso en su estructura generativa, aproximándonos a sus formas de organización y de relación, podremos observar una serie de rasgos con un tremendo valor pedagógico y formativo. La educación, hoy día, no se concibe únicamente como un mero sistema transmisor de conocimientos preocupado por la alta cualificación y especialización de los individuos sino que también procura no desdeñar los aspectos formativos que rodean todo el proceso de enseñanza-aprendizaje acentuando los valores, actitudes y principios como ejes transversales de este proceso con la finalidad de conseguir individuos plenamente integrados, responsables, solidarios, en definitiva, una sociedad más rica y humana. 62 PROPIEDAD, S.L.: Propiedad y software libre Con carácter general, los entornos de generación de software libre aportan tipologías muy aprovechables en este campo. El esfuerzo cooperativo, el trabajo en equipo, donde cada miembro de un grupo siente la responsabilidad y, a la vez, la consideración de la importancia de su tarea para la consecución de un objetivo común es, en muchas ocasiones, un acicate y un elemento motivador amén de un magnífico instrumento de mejora de la autoestima. El planteamiento de metas comunes y la labor personal necesaria para llevarlas a cabo fomentan la generosidad y mantienen a raya el, a veces, excesivo individualismo propio del ser humano. El respeto surgido del consenso y no de la imposición supone un magnífico aliado para potenciar la cultura del esfuerzo y el afán de superación personal como medio para lograr el reconocimiento legítimo. La revisión y transparencia del trabajo personal invitan claramente a la adquisición de las dosis necesarias de humildad propicias para el progreso y la formación individual, lejos de posturas intransigentes y sectarias propias de otros ambientes más oscurantistas. La toma de decisiones basadas en la transparencia y en datos objetivos constatables constituyen un fuerte inhibidor de las tentaciones autoritarias y fomentan unos valores democráticos genuinos sustentados en la información y en la responsabilidad. La igualdad y, a la vez, la diversidad está naturalmente aceptada, potenciada, respetada y convenientemente valorada. Nadie debe sentirse inferior ni superior a nadie. Cada persona tiene sus propias destrezas que se le respetan y reconocen de modo que se canalizan adecuadamente para que el proyecto, en su conjunto, resulte beneficiado. El conocimiento circula libre. Es cuestionado, adquirido, mejorado y difundido en un esfuerzo conjunto imprescindible, para el progreso de la sociedad. Todos estos rasgos se encuentran presentes en el movimiento del software libre. Son inherentes a él y constituyen unos pilares básicos que pueden ayudarnos a entender su vertiginoso desarrollo. Tal vez ha llegado el momento de preguntarnos si la sociedad actual puede permitirse desdeñarlos. 63 Una arquitectura para el desarrollo de sistemas de gestión empresarial. La Arquitectura AF y ASPL Fact. Francis Brosnan Blázquez David Marín Carreño Marcos Olmos Domínguez En esta ponencia se hablará de la Arquitectura AF: una arquitectura que se propone para la implementación de sistemas de gestión empresarial, así como del proyecto a partir del cual esta arquitectura surgió: ASPL Fact. 1. Introducción A lo largo de los últimos años, se han iniciado varios proyectos de desarrollo de aplicaciones para gestión empresarial. Muchos de ellos fueron abandonados tras la etapa inicial del proyecto. Algunos otros continúan su desarrollo, pero el aprovechamiento del código existente en los mismos para su uso en otros proyectos es prácticamente nulo debido a su implementación “monolítica”. A finales de 2002, Advanced Software Production Line comenzó el desarrollo de ASPL Fact con el objetivo de crear una aplicación de facturación para Gnome, pero de modo que estuviera desarrollada bajo un modelo de componentes distribuidos altamente especializados. De este modo, a través de los primeros hitos de desarrollo de ASPL Fact, se ha ido definiendo una arquitectura de componentes distribuidos de fácil implantación e instalación, que da soporte a llamadas de procedimiento remotas y proporciona servicios de mantenimiento de sesiones, usuarios, y permisos: la Arquitectura AF. Advanced Software Production Line propone esta arquitectura como un estándar para el desarrollo de aplicaciones de gestión empresarial dentro del marco de desarrolladores de software libre. 2. La Arquitectura AF 2.1. ¿Qué es? La Arquitectura AF consiste en un conjunto de librerías de soporte para el desarrollo de aplicaciones de gestión empresarial. Lo que se pretende es establecer un entorno de desarrollo en el cual, no solo estén estandarizados el mayor número de mecanismos posibles, sino que el desarrollador se dedique a la programación de sus aplicaciones de una manera muy general, evitando detalles como la comunicación, la sincronización y el acceso a bases de datos por citar algunos. ISBN 84-88783-66-3 ©2003 64 Una arquitectura para el desarrollo de sistemas de gestión empresarial. La Arquitectura AF y ASPL Fact. El modelo de programación propuesto consiste es un sistema cliente-servidor TCP basado en el paso de mensajes en formato XML. Lo interesante de la arquitectura es que permite al programador usar los servicios de la arquitectura de una manera muy limpia, en concreto: • El desarrollador no tendrá que programar una sola línea de threads pues la comunicación con los servidores se realizar de manera abstracta a través de una api escrita en c que es completamente asíncrona. • El desarrollador no tendrá que escribir código para crear sockets de conexión, gestionar buffers, mensajes, etc. Todo es realizado de manera abstracta, como si tratásemos directamente con estructuras de datos. • La arquitectura está diseñada para que los componentes servidores sean independientes de la interfaz utilizada, además, éstos componentes también tienen mucho código de soporte dentro de la arquitectura para ser desarrollados rápidamente. • La arquitectura está diseñada para que los componentes servidores sean independientes de la interfaz utilizada, además, éstos componentes también tienen mucho código de soporte dentro de la arquitectura para ser desarrollados rápidamente. • Se ha estandarizado la api utilizada por las aplicaciones clientes (libafdal) para comunicarse con los servidores, así, la utilización de nuevos servidores a través de sus interfaces de aplicación es común y homogénea. • Al realizar la comunicación con los servidores de manera abstracta, a través de estructuras de datos, se evita que aparezca código SQL por toda la aplicación, consiguiendo esto último que la aplicación desarrollada no sea mantenible a través de los cambios. • La arquitectura, además, proporciona numerosos servicios que simplifican los clientes y los servidores. Algunos de estos: gestión de sesiones, permisos y mecanismos de seguridad (aun no están implementado, pero será implementado de manera transparente). • La gestión de sesiones permitirá a los clientes autenticarse una sola vez en el sistema, en concreto al servidor central, y tener acceso al resto de servidores, siguiendo un modelo de seguridad similar al de kerberos. Por otra parte, los servidores son programados de manera que la arquitectura se encarga de determinar la corrección de las sesiones sobre las que son establecidas las peticiones. • Finalmente, la gestión de usuario está centralizada, permitiendo que nuevos servidores no tengan que tener noción ninguna sobre los usuarios que existen, como gestionarlos y el nivel de acceso de que disponen. 2.2. Implementación actual Toda la arquitectura, en la actualidad, está implementada en el lenguaje C, utilizando la librería glib. Esto haría muy sencilla la construcción de bindings a otros lenguajes como C++ o Python. En la actualidad, la arquitectura AF está compuesta por varios componentes: Roadrunner Librería de comunicaciones desarrollada por la empresa sueca CodeFactory. Es una implementación asíncrona del protocolo de intercambio de mensajes sobre TCP BEEP. Esta librería abstrae completamente del interfaz de sockets de Berkeley, y proporciona todas las ventajas del protocolo BEEP, como la posibilidad de establecer varios canales de comunicación independientes por conexión, etc. 65 Una arquitectura para el desarrollo de sistemas de gestión empresarial. La Arquitectura AF y ASPL Fact. Coyote Esta librería, desarrollada ya dentro de la arquitectura por Advanced Software Production Line, está íntimamente relacionada con Roadrunner. Implementa los perfiles que la arquitectura AF empleará para las comunicaciones, así como todas las funciones auxiliares necesarias para el análisis léxico y sintáctico de los mensajes. AfDal Esta librería es el corazón de la arquitectura. Todos los componentes de la misma emplearán sus servicios, ya que incorpora, entre otras, los mecanismos de: • Gestión de sesión y de llaves. La arquitectura emplea mecanismos de sesión y de llaves para la transmisión de las capacidades de los usuarios desde el servidor central hasta cada uno de los servidores proveedores de servicios. • Gestión asíncrona de peticiones y procesado de respuestas. Librerías libafdal* Estas librerías, que en la actualidad se generan manualmente (aunque a medio plazo se generarán de manera automática) incluyen todas las interfaces de solicitudes de servicios para cada uno de los servidores de la arquitectura, así como los tipos que representan cada uno de los objetos de negocio con los que se trabajará. libafgs Esta librería implementa la parte común de todos los servidores de la arquitectura, de modo que la realización de un servidor se convierte en un mecanismo completamente trivial, debiéndose codificar sólo una variable que define los servicios que implementa el servidor, así como las funciones a las que se llamará cuando un cliente solicite estos servicios. af-kernel Este es el servidor central de la arquitectura. Se encarga de la gestión de usuarios y permisos, así como de la generación y mantenimiento de sesiones y llaves. Estos componentes son los que definen las capas que forman la arquitectura AF. Para implementar una aplicación que la utilice, sólo es necesario realizar un servidor que proporcione servicios que accede a la base de datos, genera sus registros log mediante la librería afgs. Tras esto, hay que implementar la capa libafdal* correspondiente al servidor, que será la librería llamada por el programa cliente para acceder a los servicios implementados. 2.3. Estado del proyecto y evolución futura. En la actualidad (septiembre de 2003), la primera versión de la arquitectura AF, tras la liberación del tercer hito, y poco antes de la liberación del cuarto hito de desarrollo de ASPL Fact, se encuentra definida en su mayor parte. La arquitectura congelará su API en el lanzamiento de la versión 0.1 de ASPL Fact, prevista para Diciembre del presente año. Esta congelación se realizará para construir la primera versión estable del sistema de facturación, aunque el desarrollo en la arquitectura no se detendrá. De hecho, existen dentro de Advanced Software Production Line varios proyectos que implicarán mejoras importantes dentro de la presente arquitectura: • AF-Gen: consiste en la construcción de un generador automático de código a partir de un lenguaje de definición de objetos de negocio. De este modo, desde una descripción de un objeto de negocio en un formato similar a IDL o a XDR, se tendrán, dependiendo de los casos, los esqueletos o el código completo de las funciones que 66 Una arquitectura para el desarrollo de sistemas de gestión empresarial. La Arquitectura AF y ASPL Fact. realicen los servicios relacionados con dichos objetos de negocio, tanto en la capa de servidor, como en la capa libafdal*, llegando incluso a la generación automática de formularios para interfaces de usuario. • AF-Sec: este proyecto está orientado al análisis de vulnerabilidades en el protocolo de intercambio de mensajes empleado, de modo que se consiga un aumento en la seguridad del mismo. Así mismo, también incorporará la implementación de varios niveles de seguridad para el acceso a los servicios (en la actualidad, existe un único nivel de seguridad al que se accede con un par usuario/contraseña). • En un futuro se ha previsto el soporte de scripting en el lado del servidor. De este modo, por ejemplo, la solicitud del servicio de "creación de factura" podría hacer, mediante un script creado por el administrador, que el servidor de facturación se comportara como cliente del servidor de contabilidad para insertar un apunte contable. 3. ASPL Fact 3.1. ¿Qué es? ASPL Fact era, inicialmente, un proyecto para hacer un programa de facturación bajo GNU/Linux sobre el entorno Gnome. A día de hoy, ASPL Fact es un paquete software formado por 4 servidores para la Arquitectura AF (a saber: servidor para gestión de clientes/contactos, servidor para gestión de artículos, servidor para gestión de impuestos y servidor para la gestión de facturación) y por un programa cliente (el propio programa \asplfact). Todos estos programas proporcionarán las características de un programa de facturación, pero... • En un futuro, cualquiera de estos servidores pueden emplearse para otra aplicación, ya sea de contabilidad, de control de almacenes, o de control de pedidos... • La aplicación cliente ASPL Fact es completamente independiente de la base de datos. la estructura de ésta puede cambiar, pero el código del cliente ASPL Fact se mantendrá igual: la aplicación está completamente abstraída de la base de datos. 4. ¿Por qué utilizar la Arquitectura AF? Hemos enumerado antes las ventajas de utilizar la Arquitectura AF a nivel técnico y haciendo referencia directa a problemas existentes en el desarrollo de aplicaciones de gestión comercial, pero no hemos hablado aún de las ventajas generales de esta propuesta. Tal y como está definida la arquitectura, obliga a los desarrolladores a programar en un modelo basado en capas, donde cada una se dedica a algo más específico que la anterior. Por lo tanto, cada una de las capas de comunica con la siguiente de manera abstracta hasta que la petición se resuelve finalmente. Esta idea es la misma que el estandar OSI para comunicaciones. El otro modelo posible de programación es el de una sola capa. Este tipo de aplicaciones tienen concentrada en un mismo nivel el acceso a datos (SQL), la lógica para manipular estos datos y la interfaz de usuario. Las ventajas del modelo basado en una sola capa es que es más facil de programar inicialmente y más rápido en el acceso a la base de datos frente al modelo basado en varias capas. 67 Una arquitectura para el desarrollo de sistemas de gestión empresarial. La Arquitectura AF y ASPL Fact. Pero, las desventajas que ofrece el modelo basado en una capa son: • Obliga a realizar la programación de manera muy dependiente al interfaz que se esté utilizando. Esto es un problema a la hora de compartir código con otros proyectos, pues todo el código está fuertemente acoplado a la interfaz. • En un modelo basado en varias capas, existe una parte, que es la que gestiona las peticiones a los datos, que es completamente independiente del interfaz. • Impide que se pueda construir un modelo real cliente servidor que permita una existencia independiente entre el servidor y el cliente. Esto ocasiona que no se pueda realizar proceso en los datos a no ser que el cliente esté arrancado, o se programen demonios add-hoc que realicen ese proceso. En un modelo basado en varias capas es posible la existencia de procesos de ejecución independiente a las interfaces haciendo posible el proceso en background. • Dificulta el mantenimiento del software. La característica esencial de las aplicaciones de gestión empresarial es que todas, de un modo u otro, están apoyadas sobre una base de datos. Pues bien, el acceso directo a los resultados de las sentencias SQL hace que cualquier cambio en el esquema de la base de datos signifique revisar las sentencias que ya existienses y que guardasen relación. En un modelo basado en varias capas, el acceso a los datos se realizar de una manera abstracta, es decir, la interfaz de usuario no tiene conocimiento alguno sobre cómo está implementada la base de datos, los campos que posee y las relaciones existentes. El código hecho así, no hay que revisarlo debido a cambios en el esquema de datos. 5. Referencias e información relacionada Toda la documentación actual acerca del proyecto puede obtenerse de su página web: http://fact.aspl.es Acerca de la librería Roadrunner puede encontrarse información en: http://roadrunner.codefactory.se (http://roadrunner.codefactory.se) 68 Gentoo Linux: filosofía e introducción José Alberto Suárez López Gentoo Linux [email protected] Gentoo Linux (http://www.gentoo.org) es una Meta-Distribución que ha destacado en el mundo del Software Libre gracias a seguir una filosofía o camino completamente distinto al del resto de distribuciones más conocidas y usadas como puedan ser RedHat, Debian, etc. Esta pretende ser una introducción esta distribución y a un uso básico de esta. 1. Introducción Gentoo (http://www.gentoo.org) Linux nació desde el principio con la idea de la flexibilidad y la optimización, por ello como el creador de Gentoo Linux (Daniel Robbins (mailto:[email protected])), deja muy claro en el documento de introducción (http://www.gentoo.org/main/en/about.xml) de Gentoo Linux, Gentoo Linux es una Meta-Distribución. Gentoo Linux fue concebida desde un principio para dar un gran rango de flexibilidad desde el mismo momento que se procede a instalarla. Gentoo Linux es un "sabor" especial de Linux que puede ser automáticamente optimizada y adaptada para el uso que necesitemos. El gran rendimiento y flexibilidad son marcas de la casa de esta distribución. Gracias a una tecnología llamada "Portage", Gentoo Linux puede ser un servidor seguro, una estación de desarrollo, un escritorio profesional, un sistema para juegos, una solución empotrada o cualquier otra cosa, esta adaptabilidad es lo que hace que Gentoo Linux sea una Meta-Distribución." 2. Diferencia con el resto La gran diferencia de Gentoo Linux con el resto de distribuciones actuales consiste en facilitar el trabajo, al igual que las otras, pero sin olvidar que hay usuarios más avanzados que requieren un mayor nivel de complejidad, flexibilidad, y por que no, de divertimento. Todo esto se consigue basando Gentoo Linux en LFS (Linux from scratch (http://www.linuxfromscratch.org)) añadiéndole herramientas y tecnologías que facilitan su administración, mantenimiento y uso. Esta diferencia hace que aquellos usuarios avanzados o con ganas de adentrarse aún más en el mundo de Linux (también llamados Geeks) prefieran está distribución, ya que permite hacerte tu propia distribución adaptándola a tus necesidades y de una manera más simple que empezando desde cero. Y siguiendo su estupenda documentación (http://www.gentoo.org/docs) se aprende realmente lo que se esta haciendo, no simplemente se hace (aunque también existe esta posibilidad). Gentoo Linux fue por este camino en lugar de seguir el camino de las interfaces gráficas, e instalaciones preconfiguradas que restan flexibilidad y en algunos casos entorpecen ciertas tareas. Esto no quiere decir que no pueda existir un instalador gráfico para Gentoo Linux, de hecho existe, así como otros proyectos de interfaces gráficas pero son de un uso minoritario y totalmente opcional. También existe un proyecto para la creación de un script (http://glis.sourceforge.net) que ayuda a dar todos los pasos necesarios en la instalación de Gentoo Linux. Así mismo también existen proyectos de creación ISBN 84-88783-66-3 ©2003 68 Gentoo Linux: filosofía e introducción de frontends para ciertas características del sistema, como por ejemplo el fantástico "etc-update" que permite una manejo simple y flexible de los archivos de configuración actualizados de Gentoo Linux. Además Gentoo Linux, tiene muy claro que sus características, tanto presentes como futuras, son las que los usuarios piden. La lista de desarrollo (mailto:[email protected]) esta abierta para que cualquier usuario pueda sugerir, o implementar nuevas características, que si son de buen agrado para la comunidad y no perjudican al funcionamiento de Gentoo Linux serán incorporadas a su debido tiempo. Cómo toda distribución Gentoo Linux tiene cientos de fallos o bugs de distintas categorías conocidos, y otros tantos no conocidos, pero siempre a disposición del usuario en el sistema bugzilla de Gentoo (http://bugs.gentoo.org). Desde este sistema se puede acceder a toda la información sobre fallos, no solo en el sistema, ni en paquetes concretos, sino también sobre la documentación o la agregación de nuevas características. Además todo el software desarrollado o modificado por Gentoo Linux se encuentra accesible a través del cvs de Gentoo (http://cvs.gentoo.org) para poder descargar o consultar sus códigos fuentes. La comunidad es uno de los puntos fuertes de Gentoo y el crecimiento de esta ha sido espectacular. Prueba de ello es el hecho de la tremenda base de datos que se ha originado en los foros (http://forums.gentoo.org) de Gentoo con casí medio millón de entradas con una media desde que se crearon de casi 1000 al día, y con casi 30.000 usuarios y más de 2 Gb de información. 3. ¿Qué es "Portage"? "Portage" (http://www.gentoo.org/doc/es/portage-user.xml) es el corazón de Gentoo Linux, y se encarga de muchas funciones claves. En primer lugar "Portage" es el sistema de distribución de Software de Gentoo Linux. Para obtener el último software para Gentoo Linux, solo es necesario ejecutar un comando: ’emerge sync’. Este comando le pide a "Portage" que actualize la copia local del "Árbol de Portage" desde internet. La copia local del árbol de Portage contiene una gran colección de "scripts" que pueden ser usados por Portage para crear e instalar los últimos paquetes de Gentoo. Actualmente Gentoo Linux tiene: • (comando ejecutado el 22 de Junio del 2003) minime Number Number Unique • root # gentool-package-count of categories : 76 of ebuilds : 9106 packages : 4540 (comando ejecutado el 6 de Septiembre del 2003) asuka root # gentool-package-count Number of categories : 85 Number of ebuilds : 10904 Unique packages : 5272 Es decir, casi 5300 paquetes únicos y cerca de 11000 si contamos los paquetes con varias versiones disponibles, en un total de 85 categorías. Y nuevos paquetes son añadidos continuamente al árbol de Portage para el deleite de los usuarios de Gentoo Linux. Portage es también un sistema de creación e instalación de paquetes. Cuando quieres instalar un paquete solo necesitar hacer : emerge nombre_paquete 69 Gentoo Linux: filosofía e introducción Y Portage automáticamente descargará y creará una versión adaptada del paquete para tus especificaciones exactas, optimizándolo para el hardware que sea necesario y asegurándote que las características extras del paquetes que necesites serán también instaladas y por supuesto las que no necesites no serán instaladas. ¿Por què instalar el soporte para arts en zinf si prefieres usas esd? Portage además es capaz de mantener tu sistema completamente actualizado. Escribiendo: emerge --update world Te asegura que todos los paquetes que se engloban en "world" serán automáticamente actualizados. Gracias a Portage mantener el sistema es mucho más amenos y sencillo. Además Portage usa una tecnología denominada "sandbox" que hace que un paquete no sea realmente instalado en el sistema si no puede ser instalado correctamente. Complementando a esto los archivos importantes de los paquetes (osea los archivos de configuración) no serán sobreescritos sino almacenados a la espera de una decisión del administrador por cada uno de ellos. Así como otra que permite tener varias versiones de un mismo software trabajando juntas sin conflictos y de una forma transparente al usuario. Esto es los llamados "slots". Con los "slots" podemos tener instalado simultáneamente y funcionando, por ejemplo las librerías qt-2.x y las librerías qt-3.x y a la vez distintas versiones de programas que utilizan estas librerías, usando una u otra según hallamos especificado en el USE (que se verá más adelante) o lo requiera el programa. Portage es capaz de usar otras tecnologías como "ccache" (http://www.gentoo.org/dyn/pkgs/dev-util/ccache.xml) que permite rebajar tremendamente el tiempo de compilación. Y "distcc" (http://www.gentoo.org/dyn/pkgs/sysdevel/distcc.xml) (ver documentación (http://www.gentoo.org/doc/es/distcc.xml)) que permite distribuir una compilación a través de una red para que el trabajo de compilación sea hecho por varios procesadores simultáneamente por lo que el tiempo de compilación puede llegar a ser realmente reducido. Portage también es capaz de gestionar dependencias intrínsecas y a distintos niveles, así como de diferenciar entre dependencias necesarias para la creación del paquete y dependencias necesarias para su ejecución. Y por supuesto es capaz de elegir que dependencia necesita un paquete en función del tipo de sistema y de las características de este. Portage ha bebido de muchos otros sistemas similares tomando lo mejor de ellos, y añadiéndoles nuevas características y capacidades. Así como posee la facilidad y la robustez del comando ’apt-get’ también toma algunas de sus características del sistema de paquetes de FreeBSD, y como no del sistema de paquetes de RedHat. Además cualquier usuario familiarizado con alguno de ellos se encontrará cómodo con el comando "emerge" de Portage o en su defecto con su símil del "rpm" el "epm" (http://www.gentoo.org/dyn/pkgs/app-portage/epm.xml). Con lo que la migración de estos sistemas a Portage es realmente cómoda e intuitiva. Para más información acerca de Portage se puede leer el manual (http://www.gentoo.org/doc/es/portagemanual.xml), además de la guía rápida (http://www.gentoo.org/doc/es/portage-user.xml). 4. Edge Bleding (al filo) Gracias a las peculiaridades de Gentoo Linux, los usuarios son capaces de mantener un sistema realmente muy actualizado. Gentoo Linux poseía paquetes para la versión 2 de GNOME a los 5 minutos de esta ser liberada. Así como de kde 3.1 u otras piezas de software. Pero Gentoo Linux no necesita tener varios repositorios con distintos paquetes de software para conseguir un sistema estable y flexible a al vez. En un mismo árbol de portage se encuentran TODAS las ramas necesarias desde la inestable hasta la estable para procesadores x86 (intel) hasta para Mac o sparc. Una simple configuración permite usar mezcla y separar estas ramas sin ningún tipo de problema. 70 Gentoo Linux: filosofía e introducción 5. Optimización Gracias a la flexibilidad de Gentoo y de la configuración centralizada del Portage (make.conf). Somos capaces de construir un paquete para las características exactas de nuestro sistema y de nuestras necesidades. Este es el llamado sistema de "FLAGS" y de "USE". 5.1. USE El sistema de "USE" (http://www.gentoo.org/doc/es/use-howto.xml) nos permite especificar cuales son nuestras necesidades, desde si preferimos usar gnome a kde hasta si no queremos tener soporte para gis en el sistema. Gracias a esto se puede construir el mozilla contra las librerías gtk2 y tan solo el navegador, por lo que esta aplicación en concreto estará adaptada a nuestras necesidades y optimizada para nuestro uso que será claramente perceptible. Gracias al sistema USE somos capaces de especificar una gran cantidad de características configurables por paquete, siempre adaptado al sistema que deseemos tener y tan solo con lo que necesitemos usar. Esto facilita en mucho la administración y mantenimiento del sistema y su flexibilidad a la hora de dedicar un sistema para una tarea en concreto. • Ejemplo de uso de varias características de Portage y del USE entre ellas USE="x gnome" emerge --pretend -v bitchx Calculating dependencies ...done! [ebuild N ] media-libs/audiofile-0.2.3-r1 [ebuild N ] media-sound/esound-0.2.29 +tcpd -alsa [ebuild N ] gnome-base/ORBit-0.5.17 +nls [ebuild N ] dev-util/intltool-0.25 [ebuild U ] media-libs/freetype-2.1.4 [1.3.1-r3] +doc +zlib -prebuilt [ebuild N ] x11-misc/ttmkfdir-3.0.9 [ebuild N ] x11-base/opengl-update-1.5 [ebuild N ] media-libs/fontconfig-2.2.0-r2 +doc [ebuild N ] app-arch/cabextract-0.6 [ebuild N ] x11-base/xfree-4.3.0-r2 -3dfx -sse +mmx -3dnow +xml +truetype +nls -cjk +doc [ebuild N ] x11-libs/gtk+-1.2.10-r10 +nls [ebuild N ] media-libs/giflib-4.1.0-r3 -X +gif [ebuild N ] media-libs/imlib-1.9.14-r1 [ebuild N ] app-text/docbook-sgml-1.0 [ebuild N ] gnome-base/gnome-libs-1.4.2 +doc +nls -kde [ebuild R ] net-irc/bitchx-1.0.19-r5 +ssl -esd +gnome -xmms +ncurses -ipv6 -gtk -cjk USE="-x" emerge --pretend -v bitchx [ebuild R ] net-irc/bitchx-1.0.19-r5 +ssl -esd +gnome -xmms +ncurses -ipv6 -gtk -cjk Como se observa en el ejemplo hay una gran diferencia que consiste en que uso le vayamos a dar al sistema. Esto no es una simple resolución de dependencias, sino que con un solo paquete (bitchx en este caso) podemos tener varias posibilidades. En el primer comando se usa el USE por defecto, por lo que al intentar instalar BitchX (cliente IRC de consola) intenta instalar librerías gráficas, ¿Por qué? muy simple, existe una versión de BitchX que usa las librerías gráficas "gtk" y esta depende de otras tantas. Simplemente especificando en el "USE" que no queremos usar las opciones gráficas (USE="-x") estamos delimitando que se compilará, y no solo esto, sino que también su comportamiento y relación entre si. Un ejemplo más caro puede ser el uso de la variable "java" en el "USE" al compilar mozilla. al incluir tal variable (USE="java"), se incluirá una nueva dependencia en mozilla, que es la máquina virtual java. Esto descargará e instalara la máquina virtual java, no solo eso, sino que hará lo que necesite para que mozilla tenga el soporte java. La variable "USE" (así como cualquier otra variable), puede definirse de una manera global en el archivo principal de configuración (/etc/make.conf) o en la propia línea de 71 Gentoo Linux: filosofía e introducción comandos. Se puede obtener un gran nivel de afinamiento gracias al USE y de configuración de características, no solo de ciertos paquetes sino también del propio sistema. Aquí otro ejemplo de cuan configurable puede llegar a ser un paquete tan "básico" como un editor: emerge vim -pv [ebuild R ] app-editors/vim-6.1-r21 -gnome +gpm -gtk -gtk2 +ncurses +nls +perl +python -ruby Existen varias utilidades de Gentoo que nos permiten un control más intuitivo de las variables USE. Como por ejemplo ufed (http://www.gentoo.org/dyn/pkgs/app-portage/ufed.xml) un buen gui que nos permite seleccionar los USE a introducir en el make.conf con una descripción de cada uno. Así mismo existen dos tipo de variables USE. Las que se pueden aplicar a todos los ebuilds, o las que son especificas de un ebuild. Por lo que el nivel de configuración puede ser tan profundo como se desee. 5.2. Flags (variables de compilación) Así como el USE, en Gentoo Linux es muy fácil especificar que variables debe usar nuestro compilador para crear un paquete, y esto esta integrado totalmente con el sistema Portage. Gracias al uso de compiladores y librerías de ultima generación como el gcc-3.x o las glibc-2.3.x el sistema es capaz de optimizarse para un tipo de hardware muy concreto y así sacar el mayor rendimiento de este. Esto se hace de una forma muy simple, tan solo hay que usar la variable CFLAGS="" la cual es pasada al gcc (o al compilador elegido como por ejemplo icc). Un ejemplo de esta configuración sería: CFLAGS="-mcpu=pentiumpro -O3 -pipe" Lo cual aprovecha todas las instrucciones y tecnologías de este procesador en concreto rompiendo la compatibilidad del binario generado con otros procesadores. Hay un gran número de opciones, pero no son específicas de Gentoo, dependen del compilador (en este caso gcc). Para más información acerca de esto visitar la web de opciones de gcc (http://gcc.gnu.org/onlinedocs/gcc-3.2.2/gcc/Optimize-Options.html#Optimize%20Options) o de una forma más clara está referencia (http://www.freehackers.org/gentoo/gccflags) en freehackers. Para facilitar esta tarea existe una pequeña utilidad en Gentoo llamada genflag (http://www.gentoo.org/dyn/pkgs/sys-apps/genflags.xml) la cual consta de una seria de comandos que nos ayudan a configurar el sistema: asuka root # info2flags CHOST="i686-unknown-gnu-linux" CFLAGS="-march=athlon -O3 -pipe" CXXFLAGS="-march=athlon -O3 -pipe" asuka root # info2host MAINARCH="x86" SUBARCH="duron" 5.3. Prelink Básicamente el prelink (http://www.gentoo.org/doc/en/prelink-howto.xml) modifica los ejecutables consiguiendo que se inicien hasta un 50% más rápido. ¿Magia? no. Para que prelink funcione debemos tener un sistema con una versión de glibc mayor o igual a la 2.3.1. Mandrake Linux usa esta tecnología de serie. Prelink funciona especialmente bien en aplicaciones hechas en c++ (léase KDE). Prelink modifica el ejecutable deseado añadiéndole el linkado de librerías que antes necesitaba hacer exteriormente. Aunque tiene cierto parecido, no es lo mismo que un ejecutable estático. Además Prelink es completamente reversible y seguro para el sistema. Tanto Mandrake como RedHat confían en el para acelerar sus sistemas de escritorio. 72 Gentoo Linux: filosofía e introducción 6. Conlcusión Con Gentoo Linux nos creamos un sistema completamente adaptado a nuestras necesidades y a las características de nuestro hardware. Consiguiendo una gran flexibilidad y optimización de paso. Gracias a Portage nuestro sistema es tremendamente sencillo de administrar y automatizar. Sin perder un ápice de flexibilidad. Pero aunque nuestro sistema este muy optimizado y compilado desde cero la mejora de velocidad no tiene porque notarse ni ser obvia, pero el rendimiento del sistema será tremendamente aumentado. No hace mucho fue publicado una comparativa de velocidad (usando el comando time) entre Debian, Gentoo y Mandrake. En esta comparativa se ejecutaron varas aplicaciones y se medio el tiempo en cada una por separado. En esta comparativa Mandrake conseguía las mejores marcas de velocidad (algo que no extraña teniendo en cuenta que en la comparativa fue la única que uso prelink), ademas la Gentoo que se uso no fue compilada desde cero. Entre Debian y Gentoo el resultado fue reñido, obteniendo resultados equivalentes, demostrando que no es factible hacer una instalación de Gentoo Linux ya que no se consigue una velocidad superior a una distribución ordinaria. Pues bien aprovechando el paso de un usuario de RedHat desde tiempos inmemoriales a Gentoo hicimos nuestra propia prueba. En un mismo ordenador con una Mandrake 9.1 muy bien configurada se ejecutaron una serie de aplicaciones y se midieron con el comando time. Más tarde se hizo una instalación de Gentoo Linux 1.4 GRP (una versión de Gentoo Linux totalmente binaria exceptuando el kernel) y se ejecutaron los mismo comandos. Y por último se aplico el prelink a esas aplicaciones (no a todo el sistema) y se volvió a medir. Cabe destacar que la persona que realizo estas prueba es un recién llegado a Gentoo por lo que el sistema seguramente se podría haber optimizado mucho más, Además el sistema Gentoo usado no fue compilado desde cero para obtener el máximo rendimiento. Aquí están los resultados: • Características de la máquina: Pentium III (Coppermine) 733 Mhz 256 Kb de Caché. 1461 bogomips 128 Mb de RAM • • • Mandrake 9.1 (prelink de serie): Mozilla 5,34 5,45 5,32 NetBeans 38,37 14,58 20,43 Kmail 0,42 0,42 0,46 Gentoo 1.4 GRP Pentium3 : Mozilla 2,88 2,82 2,88 NetBeans 18,98 18,35 18,51 Kmail 0,39 0,97 0,33 Gentoo 1,4 GRP Pentium3 (prelink selectivo) : Mozilla 2,8 2,78 NetBeans (no aplicable) 2,82 73 Gentoo Linux: filosofía e introducción Kmail 0,03 0,02 0,01 En definitiva, los resultados hablan por si solos. Si en la comparativa anteriormente mencionada, Mandrake se situaba por encima de Debian y una Gentoo un tanto malograda, al superar en esta comparativa una Gentoo básica a Mandrake, también supera a Debian ;) Nota: no, lo del 0,03 no es una errata. Gracias a Juán Jesús Prieto (mailto:jjprieto@eneotecnología.com) de Eneo tecnología por la comparativa objetiva. En palabras de Daniel Robbins: [22:15] <BaSS > ok i’ll send to u and seemant the talk and the this lil benchmark [22:16] [drobbins] ok cool [22:16] [drobbins] a good thing is to say "we don’t do any magic, we just get the latest impro 7. Bibliografía http://www.gentoo.org - Web principal http://www.gentoo.org/doc/es/gentoo-x86-install.xml - Guía de instalación de x86 http://www.gentoo.org/doc/en/gentoo-ppc-install.xml - Guía de instalación de PPC http://www.gentoo.org/doc - Documentación en varios idiomas http://forums.gentoo.org - Foros de Gentoo en varios idiomas http://www.gentoo.org/main/en/about.xml - Acerca de Gentoo http://www.linuxfromscratch.org - Linux from scratch http://glis.sourceforge.net - Script ayuda instalación http://www.gentoo.org/main/en/lists.xml - Listas de correo http://bugs.gentoo.org - bugzilla de Gentoo http://www.gentoo.org/doc/es/portage-user.xml - Guía de usuario de Portage http://www.gentoo.org/doc/es/portage-manual.xml - Manual de portage http://www.gentoo.org/doc/es/use-howto.xml - Guía de USE http://www.gentoo.org/doc/es/distcc.xml - Guía de Distcc http://www.gentoo.org/main/en/contract.xml - Contrato social de Gentoo http://www.gentoo.org/news/en/gwn/gwn.xml - Boletín semanal de Gentoo 74 Plone - Taller y experiencia docente Gregorio Robles Grupo de Sistemas y Comunicaciones - Universidad Rey Juan Carlos [email protected] Jesús M. González Barahona Grupo de Sistemas y Comunicaciones - Universidad Rey Juan Carlos [email protected] [email protected] Esta ponencia pretende ser a la vez taller y presentación de una experiencia docente de Plone, una herramienta libre de generación de portales web. Plone se fundamenta sobre la sólida base del servidor de aplicaciones Zope y se adecúa muy bien como portal comunitario, ya que tanto la gestión de los contenidos como de la apariencia se pueden realizar de manera sencilla a través de un interfaz web. Los autores de esta ponencia han utilizado estas herramientas para la consecución de objetivos docentes en una asignatura orientada a alumnos de carreras no técnicas. Los resultados de esta experiencia han sido muy satisfactorios. 1. Introducción Plone [PloneWeb] es un generador de portales web construido sobre la sólida base de Zope. Plone permite la creación, personalización y gestión de un sitio web de manera rápida y fácil. Todas las acciones que se han de realizar para la gestión de Plone se pueden realizar a través de un interfaz web una vez instalados Zope y Plone, lo que facilita el trabajo colaborativo y distribuido. Plone es un proyecto desarrollado por una amplia comunidad y su licencia es [GPL]. Se puede probar Plone sin necesidad de instalarlo en el sitio creado por el propio proyecto Plone para pruebas [PloneWeb]. ISBN 84-88783-66-3 ©2003 75 Plone - Taller y experiencia docente Figura 1. Página principal del GSyC realizada con Plone Zope [ZopeWeb] es un servidor de aplicaciones totalmente orientado a objetos escrito en Python. Es el proyecto estrella de la compañía Zope Corporation, que lo publica bajo los términos de la licencia Zope Public License [ZPL], una licencia de software libre. Zope ofrece una infraestructura general sobre la que se pueden construir aplicaciones web. De esta manera, muchos conceptos y funcionalidades pueden ser reutilizadas. Así, por ejemplo, la herramienta de generación de portales se basa en con módulos de gestión de usuarios, de seguridad o de sesiones ofrecidos por la arquitectura Zope. En realidad, sobre Zope se ha construido una capa intermedia llamada CMF (Content Management Framework, plataforma de gestión de contenidos) que ofrece funcionalidades de interés para gestores de contenidos como es el caso de Plone y de otras aplicaciones web. Si Zope es una plataforma genérica, CMF se basa en ella y es más concreta. Plone es un producto final que se basa en CMF (y, por tanto, en Zope). Desde octubre de 2003, el portal principal de Zope utiliza la terna Zope/CMF/Plone. La estructura de este documento es la siguiente: En primer lugar se van a presentar los diferentes contenidos (objetos) de los que consta Plone y que permitirán al lector hacerse una idea de lo que se puede incluir en su portal Plone. En segundo lugar, introduciremos los roles por defecto que existen en Plone y los permisos que tienen. A continuación, se verán dos conceptos muy importantes para un entorno corporativo en el que se haga uso de Plone: los estados de los objetos y el flujo de trabajo (workflow). En el siguiente apartado, se presentará la interfaz de gestión de contenidos que ofrece Plone y se hará un breve ejercicio práctico para que el lector pueda familiarizándose con los conceptos presentados con anterioridad y su uso en Plone. El siguiente punto incluye la interfaz de gestión de Zope que posibilita realizar acciones más allá de la gestión de contenidos como cambiar la apariencia, gestionar permisos, añadir nuevas funcionalides, etc. Finalmente se indicará la existencia de otros 76 Plone - Taller y experiencia docente productos integrables en Plone y se describirá la experiencia docente que los autores han tenido en un curso universitario en el que esta herramienta constituía uno de los pilares básicos del programa. 2. Objetos Todos los contenidos que pueden ser introducidos en el portal Plone son conceptualizados como objetos. De esta forma, cada objeto cuenta con unas características propias y unas acciones asociadas, mientras que otras son comunes a todos. Así, una imagen tiene características de tamaño en píxeles que no suele tener un texto, pero ambos -como objetos- tienen nombre (a partir del cual podrán ser referenciados por una URL única) y pueden ser copiados y/o borrados de idéntica manera. Plone cuenta con una serie de objetos, de los cuales los más importantes son las carpetas, los documentos y las imágenes. Sin embargo, no son los únicos. A continuación se ofrece una breve descripción de cada objeto: • Las carpetas son en sí contenedores o clasificadores de otros objetos. Por eso, como veremos más adelante no cuentan con vista de objeto (mostrará en su caso el documento por defecto, index_html) y en su vista de contenidos muestran precisamente lo que contienen. Por defecto, las carpetas publicadas y las visibles que haya creado el propio usuario aparecen en la caja de navegación lateral. • Los documentos son la parte esencial de un portal y están compuesto por texto. El texto que contienen puede ser texto estructurado (texto plano con unas pocas marcas para darle estructura), HTML o texto plano. Tanto en texto estructurado como en HTML existe la posibilidad de introducir imágenes, tablas, enlaces, etc. • Se pueden subir objetos imagen a Plone que posteriormente pueden ser referenciados desde los documentos HTML. Las imágenes para el logotipo, los iconos y los demás elementos de configuración no incluidos en la parte dedicada a los contenidos no se pueden subir mediante Plone, sino que han de hacerse a través de la interfaz de gestión de Zope (conocida por sus siglas en inglés, ZMI). • Los eventos permiten indicar, entre otras cosas, entradas en el calendario del portal. • Las noticias son documentos de texto con ciertas peculiaridades. En primer lugar, cuando se publican, aparecen en una página especial dedicada a las noticias. Asimismo, existe una caja lateral “de fábrica” que las indexa. • Los enlaces permiten almacenar un enlace URL. • Los temas son elementos interesantes para facilitar las búsquedas dentro del propio sitio web. 3. Roles dentro de Plone (y Zope) Plone cuenta con una serie de roles por defecto que suelen ser los comunes en un portal web. Los roles tienen asociados una serie de permisos que permiten realizar acciones. Tanto los roles como las acciones pueden ser modificadas por el usuario (a través del interfaz ZMI), aunque esto no suele ser necesario. Los roles son: • El rol de miembro es el equivalente al de usuario registrado en muchos sitios web. El miembro sólo tiene acceso a la interfaz de Plone y no a la ZMI, por lo que puede gestionar contenidos. Los contenidos que puede gestionar un miembro han de encontrarse dentro de su carpeta personal, que se encuentra bajo la carpeta Miembros (Members). Todos los objetos que cree un miembro le pertenecerán, por lo que podrá modificarlos como quisiere, así como cambiarlos de estado: publicarlos para que los vea todo el mundo, hacerlos privado para que no los vea nadie más, retirarlos si están publicados, etc. Para hacerse miembro, sólo hace falta rellenar un formulario de alta. • Los revisores son miembros de Plone con una serie de permisos adicionales, ya que tiene la potestad de validar o no las noticias que todo el mundo envía. Por defecto, existe una caja lateral que avisa a un revisor de noticias 77 Plone - Taller y experiencia docente pendientes de validar en caso de que éstas existieran. Al igual que los miembros, el revisor no tiene acceso al ZMI. • El gestor tiene permisos de acceso tanto para Plone como para la ZMI, por lo que es el encargado de la configuración de la apariencia de Plone. El gestor también tiene entre sus tareas la de gestionar los usuarios y los roles y, por tanto, será el que deba asignar los roles necesarios. Así, a través del ZMI en acl_users puede asignar o quitar permisos de revisor a un usuario ya miembro. 4. Estados y workflow Todos los objetos tienen asociada la característica de estado a partir de la cual se puede ver lo “publicable” que se consideran. La razón por la cual existen diferentes estados la podemos entender fácilmente si nos imaginamos un entorno profesional donde trabajan de manera simultánea muchas personas. En un entorno así, existirán personas que creen contenidos y otras que los revisarán y darán el visto bueno (o no) para su publicación definitiva. A continuación, se muestra un ejemplo muy simple de un posible flujo de trabajo (workflow en inglés), que puede complicarse notablemente dependiendo de los objetivos que se persigan. Los estados existentes por defecto en Plone son: • Visible (por defecto): los contenidos (objetos) que tienen este estado pueden ser vistos por cualquiera en Internet mediante la inserción de la URL en el navegador, pero no aparecerán indexados para búsquedas ni en la página de noticias en el caso de que fuera una noticia. Esto quiere decir -a efectos prácticos- que son accesibles, pero más bien difíciles de encontrar. • Publicado: además de accesible por URL, los contenidos en este estado son indexados, por lo que pueden aparecer en búsquedas dentro del sitio, en la caja lateral que sirve de barra de navegación o como noticia en la página de noticias. • Privado: solamente el autor (y el gestor del sitio) puede acceder a este contenido. Todo acceso por parte de terceros será rechazado. El flujo de trabajo normal suele ser el siguiente: primero se crea un nuevo documento (que aparecerá en estado visible). Para cuando el documento esté presentable, se cambiará su estado a publicado para que todo el mundo lo pueda ver y esté indexado. Si se quieren realizar modificaciones a un documento publicado, primero se ha de retirar. Entonces se podrá editar, se guardarán las modificaciones y se podrá volver a publicar. En el caso de que no se desee que se vea, siempre se podrá hacer privado . El siguiente diagrama de estados muestra el flujo de trabajo de manera gráfica. 78 Plone - Taller y experiencia docente Figura 2. Algunos objetos (como documentos, eventos o noticias) ofrecen la posibilidad de especificar las fechas de publicación, por lo que una vez que cumpla el plazo el objeto se retirará de manera automática. Un ejemplo muy simple de esto es una noticia con las ofertas de la semana. Este documento tiene sentido la semana de la oferta, incluso en las anteriores, pero una vez que la oferta caduca no tiene ningún sentido que siga publicado. 5. La interfaz de gestión de contenidos La gestión de los contenidos web en Plone se realiza a través de la propia interfaz que ofrece Plone. Esto supone que Plone sirve tanto para ver los contenidos (como portal web) como para gestionarlos (como gestor de contenidos). Para poder diferenciar entre una y otra actividad, se han ideado dos vistas: • La vista de contenidos muestra los contenidos de una carpeta. Esto permite ver el tipo de objetos que contiene, su estado, su tamaño, la fecha, así como gestionar su ubicación (seleccionarlo para copiarlo, cortarlo, pegarlo, borrarlo o cambiarle el estado). Figura 3. La vista de contenidos en Plone. En este caso, estamos viendo lo que contiene la carpeta 79 Plone - Taller y experiencia docente Campus • La vista de objetos por otro lado muestra el objeto en sí. En el caso de la mayoría de los objetos esta acción es evidente: si el objeto es una imagen, en la vista de objetos se verá la imagen. La única excepción a esta regla la proporcionan las carpetas, que en vista de objetos mostrarán el objeto por defecto (generalmente un documento) que siempre ha de tener el nombre “index_html”. Hay que tener cuidado con no llamar a otros objetos -carpetas, imágenes, etc.- “index_html”, ya que en ese caso mostrará sus contenidos y no el documento que nosotros deseamos. A modo de ejemplo, vamos a crear una carpeta nueva con un documento que a su vez ha de contener una imagen. Para realizar las acciones que se van a describir a continuación, el lector ha de ser miembro registrado en el portal. Todos los miembros cuentan con una carpeta personal que cuelga de la carpeta Miembros. Los pasos a seguir son los siguientes. 1. Nos situamos en la carpeta raíz - generalmente la carpeta raíz es la que contiene la página principal y es de donde nace el árbol de carpetas. Si no estamos en la carpeta raíz, podemos utilizar la caja lateral de navegación para llegar a ella. Apretando sobre la entrada superior, llegaremos a la carpeta raíz. Una vez en la carpeta raíz, cambiamos a vista de contenidos para ver los contenidos de la carpeta. Veremos que, por ahora, lo que hay es un documento de nombre “index_html”, que es -como sabemos ya- el documento por defecto que se muestra al dar la dirección de la carpeta (en otras palabras, la página que vemos cuando estamos en vista de objetos en la carpeta raíz). Figura 4. La caja de navegación lateral 80 Plone - Taller y experiencia docente 2. Lo siguiente que queremos hacer es crear una subcarpeta, que será donde incluyamos nuestro documento. Para eso, seleccionaremos “Carpeta” del menú desplegable (que por defecto muestra la entrada “Seleccione”) y pulsaremos sobre el botón “añadir un nuevo objeto”. Aparecerá un formulario donde podremos introducir una serie de parámetros: nombre (que será un nombre interno utilizado por Plone mediante el cual se generarán las URLs; aunque Plone dé uno por defecto, nuestro consejo es que se ponga en este campo lo mismo que en el título), título y descripción. Introduciremos los parámetros deseados y pulsaremos sobre “guardar” al final del formulario para que se cree. Una vez hecho esto, veremos la vista de contenidos de la nueva carpeta, que como es lógico se encuentra vacía. Recomendamos al lector que cambie a vista de objetos; lo que podrá ver es que al tratarse de una carpeta y ante la ausencia de un documento por defecto (el “index_html”), se muestre la descripción de la carpeta y se invite a crear un documento por defecto. Siguiendo el enlace de "Edit" podríamos editar ahora el documento por defecto, cosa que haremos un poco más adelante. Volvamos antes a la vista de contenidos, porque primero añadiremos la imagen. 3. Seleccionemos “imagen” del menú desplegable para crear una imagen. El formulario que nos aparecerá es idéntico al de la carpeta que ya conocemos de crear una nueva carpeta, con la salvedad de que hay un campo para seleccionar la imagen de nuestro disco duro. Rellenemos el formulario y seleccionemos “guardar”. Una vez hecho esto, nos aparecerá la vista de objeto de la imagen, o sea, la propia imagen. Si vamos a la vista de contenidos lo que veremos es que la carpeta que creamos con anterioridad tiene un objeto: la imagen. 4. El siguiente paso va a consistir en crear el documento, que además será el documento por defecto de la carpeta. Para ello procederemos de forma idéntica a la creación de la imagen con la salvedad de que ahora en vez de seleccionar “imagen”, seleccionaremos “documento”. Para que sea el documento por defecto de la subcarpeta, su nombre ha de ser "index_html", mientras que el título lo podremos elegir libremente. La descripción debe ser un breve resumen de lo que va a incluir el documento, mientras que el campo del formulario dedicado al texto es el que contendrá el contenido documento en sí. El texto del documento puede estar en varios formatos: texto estructurado (que es texto plano más unas pocas marcas que le dan cierta forma - similar a lo que se utiliza en los wiki), HTML o texto plano. Una vez que hayamos rellenado todos los campos, pulsamos sobre “guardar”. Figura 5. Formulario de edición de un documento 81 Plone - Taller y experiencia docente 5. Ahora que tenemos el documento, deseamos añadir la imagen. Para eso, le damos a la pestaña de “Editar” e introducimos en el campo de texto el siguiente código HTML: <img src="nombre_imagen"> . Guardamos las modificaciones y ¡voilà!, la imagen aparece en nuestro documento. 6. El último paso consiste en cambiar el estado de la subcarpeta. Para ello se accede a la vista de contenidos, se pulsa sobre la pestaña de estado y se publica la imagen seleccionando Publicar. 6. Interfaz de gestión de Zope Mientras que con la interfaz de Plone podemos gestionar todo lo relativo a los contenidos, la interfaz de Zope nos brinda la oportunidad de modificar la apariencia y las acciones. Esto se realiza mediante la interfaz de gestión de Zope (ZMI - “Zope Management Interface” en inglés). La interfaz ZMI ofrece muchas más posibilidades que la de Plone y también es mucho más compleja. Por eso se recomienda la utilización de recetas tal y como se pueden encontrar en [MalditosProfes] para la consecución de objetivos puntuales que en la gran mayoría de los casos serán suficientes. Figura 6. Aspecto de la interfaz de gestión de Zope Para el manejo de Zope, es importante tener en cuenta que debido a su implementación en Python, sigue el paradigma de orientación a objetos. Esto quiere decir que todos los elementos que gestiona Zope son objetos, con características y acciones asociadas. La interfaz de gestión de Zope está organizada en carpetas de manera que 82 Plone - Taller y experiencia docente ofrece un sistema de navegación a través de los objetos similar al del Explorador de Windows. A continuación se va a describir de manera breve las posibilidades que ofrece el ZMI para la gestión de la apariencia de Plone: • Existen apariencias (skins) de fábrica que permiten definir la apariencia visual del portal de manera rápida. Los skins suelen tener asociada una hoja de estilo donde vienen especificados los colores a utilizar. Se pueden inspeccionar los skins y los elementos que los componen en la subcarpeta portal_skins. Como se puede observar, las subcarpetas dentro de portal_skins tienen superpuesto un candado al símbolo de carpeta convencional. Eso quiere decir que los elementos contenidos en ella son de sólo lectura. Para personalizar la apariencia (por ejemplo la hoja de estilo), se tiene que apretar sobre el botón Customize, que lo que hace es llevar el objeto a la subcarpeta custom, que es la única subcarpeta dentro de portal_skins sin candado. Esta carpeta sí contiene elementos de lectura y escritura, por lo que el usuario podrá personalizar allí tanto hojas de estilo como los demás elementos. Plone busca primero en la subcarpeta custom y si no lo encuentra, mira en la del skin elegido, por lo que situar en custom una imagen llamada logo.jpg supone de hecho cambiar el logo del portal. Lo mismo ocurre con el resto de iconos y la cabecera y pie de página. El lector interesado puede mirar las recetas en [MalditosProfes] para mayor información. • Desde la ZMI también se pueden gestionar las cajas laterales y las pestañas. Para ello se ha de ir desde la carpeta raíz de la ZMI a la pestaña Properties, donde aparecerá un listado de pestañas y cajas laterales y sus parámetros de configuración. Se pueden añadir y quitar pestañas de manera muy sencilla. En la pestaña Properties situada en la parte superior del frame de la derecha es donde se ha de especificar en qué columna (slot) ha de aparecer la pestaña. Se puede encontrar más información en [MalditosProfes]. • La gestión de usuarios (y de los roles que tienen) se realiza en la subcarpeta acl_users. Si se entra en ella, se puede ver un listado de los usuarios registrados en el portal. Pulsando sobre un usuario se puede ver su rol y modificarlo de manera sencilla. Por causas que los autores de esta ponencia todavía no entienden, se recomienda que todos los usuarios utilicen el formulario de creación de cuenta en Plone que ofrece la propia interfaz Plone en vez de ser incluídos mediante el ZMI. Parece ser que lo primero incluye una serie de acciones añadidas que no se hacen en lo segundo y, por eso los usuarios que han sido creados directamente a través del ZMI suelen encontrar algunos problemas al hacer uso del portal. Figura 7. Vista de la carpeta de usuarios acl_users • La gestión de seguridad está basada en la división de las diferentes acciones que se pueden llevar a cabo y en el concpeto de adquisición. Lo primero viene a significar que cada acción tiene asociado un permiso. Para poder llevarla a cabo, se ha de tener ese permiso. Generalmente los permisos se dan a ciertos roles. Por otro 83 Plone - Taller y experiencia docente lado, la adquisición se puede tratar de manera similar a la herencia: carpetas de niveles inferiores tendrán la configuración de seguridad de la carpeta superior si no se ha especificado lo contrario. De esta forma, el superusuario de Plone, lo es de todas las subcarpetas dentro de Plone a menos de que se especifique lo contrario. Cabe mencionar que la gestión de seguridad es una tarea bastante compleja y que para el caso general la que viene por defecto es más que suficiente. Figura 8. Ejemplo de asignación de permisos en la ZMI 7. Integración de otros productos CMF-Zope Existen muchos productos que pueden ser integrados en Plone y que aportan funcionalidades y posibilidades añadidas a las que obtenemos al instalar un Plone desnudo. Es más, debido a la naturaleza orientada a objetos de Zope, muchos de los productos de Zope se pueden integrar sin más o con pocas modificaciones directamente en Plone. Estos productos ofrecen funcionalidades añadidas que pueden ser interesantes para el portal. Como la descripción pormenorizada y completa de los productos existentes en Plone excede lo que pretendemos abarcar en en esta ponencia, sólo se describirán los más comunes, dejando al lector que busque por su cuenta si necesita más información en [Collective], un proyecto que pretende aglutinar todos los productos Zope/Plone bajo un mismo paraguas. • Uno de los productos más interesantes es Localizer, que permite la localización del portal. Existe otro producto con idénticos objetivos llamado I18NLayer. Las capturas de pantalla que han sido mostradas en esta ponencia hacen uso de Localizer, de forma que los mensajes de interfaz de usuario están en español en lugar de en inglés. • Existen varios productos de edición. Los más conocidos son: CMFVisualEditor, CMFOODocument y ExternalEditor, aunque no son los únicos. • Para la sindicación existe un producto llamado CMFSin. • Se pueden integrar encuestas mediante el producto MPoll. • Se puede añadir un wiki al portal con el producto Zwiki para Plone. Por ejemplo, el sitio web de Plone utiliza este producto para ofrecer documentación tipo chuletas para los usuarios [PloneHowTo]. 84 Plone - Taller y experiencia docente 8. Experiencia docente Los autores de esta ponencia han tenido la suerte de poder utilizar Zope, ZWiki, Squishdot y Plone en una asignatura de libre elección ofertada a alumnos de la Facultad de Ciencias de la Comunicación. Esta experiencia docente es, por tanto, una experiencia con alumnos de carreras universitarias no técnicas y que han elegido la asignatura para completar su currículo. Los conocimientos mínimos exigidos para cursar la asignatura eran los que se habían adquirido en una asignatura troncal que se imparte en el primer curso y que introduce al alumno en los entornos ofimáticos y de navegación en Internet. La composición del alumnado era bastante heterogénea, ya que muchos contaban con experiencia y soltura superior a la de sus compañeros en cuanto al uso de sistemas informáticos. Aún así, de una encuesta que se hizo en la primera clase pudimos observar que, en general, no contaban con conocimientos de creación de páginas web y, salvo contadas excepciones, desconcocían el lenguaje HTML. 8.1. Programa de la asignatura La secuencia de contenidos elegida para la asignatura fue la siguiente: • Presentación de la asignatura (2 horas) • Introducción a Internet (4 horas) • Introducción al lenguaje HTML: uso de Mozilla Composer (8 horas) • Foros en Internet: uso de Squishdot (4 horas) • Elaboración de documentos colaborativos: uso de ZWiki (4 horas) • Introducción teórica a Zope y Plone (2 horas) • Gestión de contenidos en Plone (6 horas) • Práctica: creación de un entorno web por grupos de 4 a 6 personas utilizando las herramientas utilizadas durante el curso (20 horas) • Presentación pública del práctica (4 horas) En general, todas las clases -salvo las eminentemente teóricas- contaban con alrededor de 30 minutos de teoría al principio y una hora de trabajo práctico en el laboratorio docente con las herramientas que se habían presentado con anterioridad. La parte práctica cuenta con un guión que los alumnos han de seguir. Algunas prácticas se hacían a nivel individual, aunque también se programaron actividades por grupos para que los alumnos pudieran asimilar los conceptos de intercambio y generación de información de manera colaborativa de una forma más fácil. Por ejemplo, tras ver que los alumnos no conseguían asimilar los conceptos y la utilidad de un sistema wiki, se ideó una actividad para que comprendieran las posibilidades que ofrece esta herramienta para el trabajo colaborativo con resultados inmediatos. Para ello, durante una hora de prácticas se elaboró una historia colaborativa, que consistía en ofrecer una poco de trama de la historia (con unos párrafos bastaba) en una página wiki y a continuación una serie de posibilidades para seguir la historia, que consistían en enlaces a otras páginas wiki. Otra persona debía seguir la historia según las posibilidades ofrecidas en otra página wiki y ofrecer al final de la misma varias posibilidades para que a su vez otros compañeros suyos pudieran aportar. Así, a partir de un comienzo común, la historia se va ramificando con las colaboraciones de los alumnos. 8.2. Problemas encontrados El principal problema con el que nos hemos encontrado es que la documentación existente sobre Plone es bastante escasa. Este hecho se agudiza más aún al no existir prácticamente material en nuestra lengua. Sobre todo en las primeras semanas de uso de Plone, los alumnos se sentían “indefensos” ante la imposibilidad de acudir a un 85 Plone - Taller y experiencia docente manual de referencia completo y conciso que explicara la herramienta y su uso. Cabe decir que se está trabajando en este aspecto y que en un futuro no muy lejano esto dejará de ser un problema. La reciente creación del sitio [HispaZope] es una clara muestra de ello. De la encuesta final que se hizo a los alumnos se ha podido observar que los alumnos han salido satisfechos de la asignatura y con los conocimientos adquiridos. También han valorado positivamente la secuencia de las clases y algunas de las actividades realizadas. Son más críticos, sin embargo, con las herramientas elegidas y sospechan que conocer su uso no les va a servir en su futuro profesional. Por otro lado, hemos podido observar cómo una serie de conceptos han sido difíciles de asimilar por los alumnos. A continuación se citan los más importantes, por lo que se recomienda que en futuras experiencias docentes donde se utilicen estas herramientas se haga especial énfasis en que estos conceptos queden claros: • Diferenciación entre la interfaz de gestión de apariencia (en el ZMI) y la interfaz de gestión de contenidos. • Diferenciación entre la vista de contenidos y la vista de objetos. • Creación de las páginas por defecto (index_html). • Asimilación del concepto de “workflow” (flujo de trabajo). • Uso de los roles: ningún grupo utilizó en sus prácticas especiales ninguna política de asignación de roles más allá del que todos tuvieran todos los permisos. 9. Conclusiones En esta ponencia se ha presentado brevemente la plataforma Zope y más ampliamente su herramienta de generación de portales Plone. Se ha mostrado cómo Plone se basa en el uso de roles de usuario, varios estados para los contenidos, una amplia gama de objetos en los que se puede encuadrar los contenidos y un flujo de trabajo bien definido. Asimismo, hemos podido ver la interfaz de gestión de contenidos de Plone, con seguridad lo más utilizado, así como la interfaz que se utiliza para gestionar la visualización y las acciones. Esto se hace mediante la interfaz de gestión de Zope (ZMI) y su uso es mucho menos frecuente que la de gestión de contenidos en Plone. Para terminar, se ha ofrecido una experiencia docente que los autores de este artículo han tenido en la que las herramientas presentadas han sido utilizadas por alumnos universitarios de carreras no técnicas. La experiencia ha sido muy provechosa, tanto para los profesores como para los alumnos. Bibliografía [Collective] Projects in the Collective, http://plone.org/collective/Document.2003-07-24.1856 . [GPL] GNU General Public License (GPL) Version 2.0, http://www.gnu.org/copyleft/gpl.html . [HispaZope] HispaZope, http://www.hispazope.org . [MalditosProfes] MalditosProfes.com - Portal de apoyo de los Profesores de la Asignatura Servicios de Información en Internet. Curso 2002-2003., http://barba.dat.escet.urjc.es:9080/cccom-serv-infoinet/PracticasEspeciales/MalditosProfes.com/ . [PloneBook] Andy McKay, The Plone Book, http://plone.org/documentation/book/ . 86 Plone - Taller y experiencia docente [PloneBook-es] Andy McKay, Plone Book (en español), http://www.neuroomante.com/Members/pedro/libro_plone . [PloneDemo] Demo Plone Web Site, http://demo.plone.org . [PloneHowTo] Tutorial and How-to section of plone.org, http://plone.org/documentation/howto/ . [PloneWeb] Plone Project Web Site, http://www.plone.org . [ZopeBook] Amos Latteier y Michel Pelletier, The Zope Book, http://www.zope.org/Documentation/Books/ZopeBook/ . [ZopeWeb] Zope Project Web Site, http://www.zope.org . [ZPL] Zope Public License (ZPL) Version 2.0, http://www.zope.org/Resources/ZPL . 87