Utilización de software libre como única tecnología para el desarrollo de portales web Daniel Gayo Avello, Benjamín López Pérez, Luis Vinuesa Martínez, José E. Labra Gayo, Juan M. Cueva Lovelle Universidad de Oviedo, Departamento de Informática, Oviedo, España, 33007 {dani,benja,vinuesa,labra,cueva}@lsi.uniovi.es ABSTRACT People use of web as an information resource is growing, specially to browse last minute news. This fact is pushing the web towards popularity levels similar to other mass media like TV or press. In spite of this, web is different since resources required to build a site are much simpler. This paper will show the most essential parts in any dynamic web information service and it will introduce different technological choices in order to develop such a site (operating system, web server, database engine and programming language) provided that all of them must be free software. At the end, we will show a case of use: EUITIO’s website, fully developed by using only free software; website’s requirements will be described, the way they were solved and some conclusions reached through this project. Keywords: free software, web site, web server, database, dynamic pages. RESUMEN Los ciudadanos utilizan cada vez más el web como fuente de información, especialmente para acceder a noticias de última hora; este hecho está situando al web a un nivel similar al de medios de masas tan poderosos como la televisión o la prensa escrita. A pesar de ello, una característica que diferencia al web de otros medios de comunicación es la sencillez de las infraestructuras necesarias para la construcción de un sitio. En el presente artículo se mostrarán los aspectos esenciales que debe cubrir un sistema de información dinámica en el web y se presentarán diferentes alternativas tecnológicas para la implantación de un sitio semejante (sistema operativo, servidor web, motor de base de datos y lenguaje de programación) pero con la restricción de que todas ellas serán software libre. Para terminar se expondrá brevemente un caso práctico desarrollado íntegramente con software de este tipo: el portal de la Escuela Universitaria de Ingeniería Técnica en Informática de Oviedo; se describirán las necesidades del sitio web, la forma en que fueron solucionadas mediante la integración de las distintas tecnologías y las conclusiones que se alcanzaron a través de dicho trabajo. Palabras claves: software libre, portal web, servidor web, base de datos, páginas dinámicas. 1 1 INTRODUCCIÓN Cuando nos planteamos el montar un portal web, uno de los factores fundamentales a tener en cuenta son los recursos financieros disponibles para hacer frente al proyecto. En el caso de que dichos recursos sean escasos (o nulos), la opción respecto al software está clara: hay que decantarse por utilizar software libre. Pero, en el caso de que se disponga de dinero para invertir en el software, cabe preguntarse si el software propietario es una opción mejor que el software libre. Tradicionalmente se ha asociado software libre con software de baja calidad, pensando que no ofrece ninguna garantía porque no ha pasado por controles de calidad, no ofrece soporte, etc. Sin embargo, hoy en día hay muchas razones que obligan a replantearse la certeza de tal afirmación. En la actualidad el software libre goza de mucha aceptación; por un lado, importantes empresas comerciales se han decidido a dar soporte a alguno de estos productos libres; por otro, los mejores proyectos de software libre cuentan con una amplia base de colaboradores, lo que lleva a que el software que finalmente ve la luz esté altamente probado e incluya las peticiones de una inmensa mayoría de usuarios. La gratuidad del software lleva a que una mayor cantidad de gente pueda probarlo, pudiendo ser detectados los posibles fallos de forma rápida. Al contar con una amplia base de usuarios y colaboradores / desarrolladores que pueden examinar el código fuente, nuevas versiones y parches ven la luz con mayor rapidez que en el caso de software propietario. Por todo ello es necesario plantearse la cuestión de si, aún en el caso de poder pagarse licencias de software propietario, sería ésta la mejor solución; los autores son de la opinión de que hoy en día es posible montar un portal web utilizando únicamente software libre, no sólo no mermando la calidad del portal sino resultando ésta mayor que en el caso de utilizar sólo software propietario. 2 SOFTWARE LIBRE Durante los últimos años se ha hablado mucho sobre el software libre, su razón de ser, sus ventajas e inconvenientes o la fiabilidad del mismo de cara a realizar grandes proyectos. En este punto se tratará de exponer brevemente las características del software libre así como las diferencias existentes entre software libre, código abierto y software gratuito; por último, se presentarán las características esenciales del software libre que lo hacen, a ojos de los autores, un elemento extraordinariamente interesante para el desarrollo de aplicaciones en Internet. Diferencias entre Software Libre, Código Abierto y freeware Con frecuencia los términos freeware, Software Libre y Código Abierto se utilizan de forma indistinta para referirse a un software que, en teoría: o Es gratuito, o no tiene propietario y o carece de soporte. En primer lugar, todas esas presuntas características del software libre son falsas o, cuando menos, inexactas; en segundo lugar, aún cuando algunos aspectos finales relativos a la distribución del software y sus fuentes pueden ser similares, iniciativas como la del Software Libre y el Código Abierto son muy diferentes en cuanto a sus puntos de partida. Software Libre (Free Software) Según la Free Software Foundation, el término Software Libre hace referencia a la libertad de acceso al software, no a su precio; la FSF establece cuatro libertades relativas al software [3]: 1. Libertad de ejecución del software. 2. Libertad de análisis del software (el código fuente debe estar, por tanto, disponible). 3. Libertad de redistribución del software. 4. Libertad de modificación del software (nuevamente, la disponibilidad del código fuente es un requisito). Una aplicación puede calificarse como Software Libre si cumple esos cuatro requisitos. 2 Código Abierto (Open Source) La iniciativa Open Source [16] nació a partir de la FSF y aunque gran parte de las características de los programas Open Source son virtualmente equivalentes a las del Software Libre ambos movimientos tienen puntos de vista totalmente diferentes. En primer lugar, la piedra angular de la FSF es la Libertad, libertad de ejecución, distribución, análisis y modificación; la iniciativa Open Source carece de esa connotación ética y utiliza como fundamento de la “libertad” del software la posibilidad de examinar (y, por añadidura, modificar y redistribuir) el código fuente, además de especificar una licencia de distribución del software que extiende esta ambigua definición. Es necesario destacar que una de las razones que llevaron a la constitución de la iniciativa Open Source fueron las connotaciones negativas del Software Libre, especialmente, en el mundo empresarial. Según los miembros de Open Source el término free (libre) era un handicap que podía frenar el desarrollo comercial del software libre; la FSF, por el contrario, considera que el hecho de que se pudiera tener como objetivo principal del software garantizar la libertad de los usuarios intranquilizaba a las empresas y una versión menos “combativa” podía resultar comercialmente más interesante. Al margen de estas diferencias de planteamiento y, a efectos prácticos, el Código Abierto puede ser considerado software libre, con minúsculas, por contraposición al Software Libre, con mayúsculas. Freeware y shareware Ambos términos hacen referencia a la forma en que una aplicación específica es distribuida y a las condiciones bajo las cuales el usuario deberá pagar por su utilización. Bajo el término freeware se suelen incluir aquellos programas que pueden redistribuirse sin pagar por ellos; sin embargo, aún cuando el freeware garantiza dos de las cuatro libertades exigidas por la definición de Software Libre de la FSF no existe la libertad de análisis ni la de modificación (puesto que el código fuente no se suele distribuir). Por esa razón, el freeware no es Software Libre (ni Código Abierto). El shareware es similar pues permite la redistribución gratuita del software, sin embargo, exige el pago del software por parte del usuario si éste desea hacer un uso continuado del mismo; como se puede comprobar, el shareware además de las limitaciones del freeware elimina la libertad de ejecución estando, por tanto, fuera de la categoría de Software Libre. Nuestra propia definición de software libre Como se puede ver dentro del mundo del software libre existen dos tendencias bien definidas, por un lado el Software Libre y, por otro, el Código Abierto; a efectos prácticos ambas son extremadamente similares aunque difieren en aspectos de base. Dejando a un lado esas diferencias ético-filosóficas, los desarrolladores están interesados en el software como herramienta de trabajo, así pues, en aras del pragmatismo se hace necesario dar una definición del software libre más abierta que las propuestas por FSF y la iniciativa Open Source pero lo suficientemente restrictiva como para dejar fuera soluciones propietarias y cerradas; así, una posible definición de software libre podría ser la siguiente: Es software libre aquel que puede utilizarse y distribuirse libremente, mediante el pago de unas tasas o de forma gratuita; cuyo código fuente es accesible o, en caso contrario, está construido de acuerdo con unas especificaciones públicas y cuyo desarrollo es llevado a cabo por la comunidad de usuarios o cuenta con las aportaciones de los mismos. Como se puede apreciar, en nuestra definición de software libre tiene cabida tanto el Software Libre o el Código Abierto como iniciativas comerciales como Java o PHP. A partir de este momento y durante el resto del documento el término software libre hará referencia a esta nueva definición. Software libre es software de calidad Una de las cuestiones que con mayor frecuencia se plantean al referirse al software libre es la referente a su calidad. A priori podría pensarse que un software que es desarrollado por una comunidad de usuarios sin ánimo de lucro estará pobremente desarrollado y será escasamente fiable; nada más lejos de la realidad, el software libre tiende a ser más fiable, robusto y eficiente que el software propietario. Algunas de las razones que permiten esa mayor calidad son las siguientes: • La razón de ser del software libre no es el lucro sino la resolución de problemas con lo cual el software es desarrollado para funcionar de manera adecuada. 3 • El software libre es sometido a prueba por los usuarios en condiciones muy distintas con lo cual los fallos son localizados más rápidamente. • La libre distribución del código fuente hace posible que un número enorme de desarrolladores pueda examinarlo, localizar los fallos y proporcionar parches para los mismos con mayor rapidez que un equipo de desarrollo reducido (siempre menor que una comunidad internacional de usuarios). • Al disponerse del código fuente es posible comprobar que un software hace lo que debe hacer, esto es, el software libre facilita la auditoría del código, algo imposible con software propietario. Por todo ello, el software libre es una posibilidad muy a tener en cuenta a la hora de desarrollar proyectos reales independientemente de los recursos económicos disponibles; de hecho las razones fundamentales por las que organizaciones y empresas de todo tipo están optando por utilizar software libre (principalmente para el desarrollo en Internet) son la mayor fiabilidad, mejor rendimiento, mayor seguridad y mejor escalabilidad del software libre frente a soluciones propietarias equivalentes (fundamentalmente sistemas operativos, servidores web y bases de datos). 3 ELEMENTOS SOFTWARE PARA LA CONSTRUCCIÓN DE UN WEBSITE Para la implantación de un sitio web deben considerarse los distintos elementos software que permitirán configurar el sitio con todas las funcionalidades requeridas (presentación estática de contenidos, transacciones, contenidos dinámicos, seguridad, etc). Estos artefactos software pueden formar parte del sistema operativo o del software de aplicaciones que debemos añadir al mismo para alcanzar las funcionalidades requeridas. Normalmente se piensa en un sitio web, desde el punto de vista arquitectónico, como un programa que se encarga de servir paginas HTML. De tal forma que nos basta con un simple editor para construir los contenidos en formato HTML y colocarlos en el lugar adecuado para que el servidor web pueda proporcionárselos al cliente (browser o navegador) que los solicite. Pero con esta simple funcionalidad (como ocurría en los inicios del web) no sería posible alcanzar los objetivos que requiere hoy en día un portal (adaptación de contenidos al usuario, intercambio de información con el cliente, computación en la parte del cliente o del servidor, etc). Para ello se debe disponer de una plataforma mas compleja (Fig.1), proporcionada bien por el propio sistema operativo, el servidor web o aplicaciones adicionales que interactúen con ambos proporcionando los servicios adicionales (acceso a datos, desarrollo de lógica de control, generación dinámica de contenidos, etc). Fig.1 - Elementos software necesarios para el desarrollo de un website. Las prestaciones del sistema operativo, del servidor web, o de módulos adicionales, la integración entre ellos, su rendimiento en conjunto, así como el coste de todos los elementos software necesarios serán criterios a considerar a la hora de seleccionar la plataforma. 4 4 SOFTWARE LIBRE PARA LA CONSTRUCCIÓN DE UN WEBSITE Sistema operativo En la actualidad existen sólo dos paradigmas fundamentales de sistemas operativos: el intérprete de línea de comandos (UNIX, DOS), y la interfaz gráfica (Macintosh OS, OS/2, Familia S.O. Windows). Mientras que la última es claramente más intuitiva y preferida por la mayoría de los usuarios, la industria debe ahora tomar otra medida hacia el sistema operativo ideal. La siguiente generación de sistemas operativos utilizará las nuevas herramientas desarrolladas como programación orientada a objetos (OOP), y nueva tecnología hardware, para crear un ambiente que beneficie a los programadores así como a los usuarios; sin embargo, para el desarrollo de aplicaciones en Internet se hace necesario apostar por sistemas operativos probados, ampliamente utilizados, que ofrezcan la mayor funcionalidad, estabilidad y fiabilidad posible, así como un optimo rendimiento, sencillez en la administración y, a ser posible, disponibles como software libre. Las alternativas más habituales a la hora de establecer un sitio web son Windows NT (software propietario) y alguna de las variantes de UNIX (disponibles tanto como software propietario como libre); aunque sea de forma muy breve, es necesario destacar algunos puntos que hacen más aconsejable la utilización de un sistema operativo UNIX frente al uso de un servidor NT: • Existen multitud de proveedores de sistemas operativos UNIX, muchos de ellos distribuidos como software libre. • UNIX es fácilmente escalable • UNIX hace uso de los recursos más eficientemente que Windows NT. • Los estándares de UNIX son independientes de los proveedores. • Windows NT sólo brinda restricciones; sólo corre en plataformas Intel o Alpha y la mayor parte del software es propietario mientras que UNIX está disponible para múltiples plataformas y existe gran cantidad de software libre. • Windows NT es estático, es decir no es posible construir un kernel apropiado mientras que UNIX es dinámico, se puede configurar un kernel apropiado a las necesidades del usuario. Como se puede apreciar, son muchos los aspectos que hacen más interesante un sistema operativo UNIX que un sistema NT para el servidor de una aplicación Internet. Ya se ha mencionado que existen muchas distribuciones de operativos UNIX disponibles como software libre; algunas de las más conocidas son Linux [4], NetBSD [15] y FreeBSD [14]. Linux Linux es un clon de UNIX inicialmente desarrollado por Linus Torvalds y mantenido por una comunidad internacional de desarrolladores que soporta el software de libre distribución de GNU. Dispone de todas las características que se encuentran en sus parientes comerciales y otras muchas. El sistema corre sobre ordenadores personales basados en Intel y en estaciones de trabajo basadas en Sparc; no obstante, hay adaptaciones de Linux para Power-PC, Motorola 68000, MIPS y Alpha. Soporta una gran cantidad de periféricos y software, incluyendo el sistema de ventanas X, Emacs, TCP/IP, etc. Linux satisface los estándares más importantes de la industria como POSIX y el estándar de C. NetBSD El proyecto NetBSD surgió como resultado del esfuerzo de un gran número de personas que tenían como meta producir un sistema operativo tipo UNIX accesible y libremente distribuible. NetBSD está basado en una gran variedad de software de libre distribución. NetBSD está disponible para gran variedad de plataformas (i386, Amiga, Atari, Alpha, Sparc, etc.) Soporta muchas e importantes mejoras y se tiene la intención de satisfacer los estándares más importantes de la industria como POSIX y el estándar de C. FreeBSD FreeBSD es un sistema operativo UNIX basado en la versión 4.4 BSD-lite de la Universidad de Berkeley desarrollado 5 para máquinas i386 (ordenadores personales con microprocesadores 386, 486 y Pentium). Originalmente, su desarrollo se basó en la versión Net/2, también conocida como 386BSD de William Jolitz, aunque en estos momentos no quede prácticamente nada del código original. Una de las grandes ventajas de FreeBSD sobre otros sistemas, como Linux, es que existe una sola distribución coordinada por un grupo de trabajo dedicado a ello, haciendo el sistema más homogéneo, controlado y estándar. Esto no quiere decir que sea un sistema cerrado, ya que los grupos son totalmente abiertos, aceptándose la colaboración de todo el mundo. Servidor web La piedra angular de cualquier portal es, con toda seguridad, el servidor web; el software encargado de atender las peticiones de los clientes y enviarles las páginas web solicitadas. Existen multitud de paquetes software para montar servidores web, muchos de ellos distribuidos como software libre y siendo, sin lugar a dudas, el más popular de todos Apache [1]. El servidor Apache es el producto de un equipo de desarrolladores que, de forma desinteresada, construyen un servidor HTTP robusto, de alta calidad y disponible de forma libre. Apache se basó inicialmente en el servidor desarrollado en la NCSA (National Center for Supercomputing Applications) al que se le fueron añadiendo parches y diversas ampliaciones. Menos de un año después del inicio del proyecto, Apache superó al servidor de la NCSA como servidor más utilizado en Internet, teniendo en la actualidad un porcentaje de utilización superior al 60%. Motor de base de datos Debido al requisito impuesto inicialmente (utilización de software libre), opciones como Oracle, Sybase o DB2 deben ser descartadas aún cuando son las que cuentan con una base de usuarios más extendida en la actualidad. Esta situación, sin embargo, comienza a cambiar, pues aunque hoy en día los SGBD propietarios tienen gran parte del mercado, en los últimos tiempos se está viendo cómo los SGBD libres están creciendo en prestaciones y presencia en el mercado, de tal manera que en poco tiempo podrán estar en condiciones de luchar de igual a igual con los grandes SGBD propietarios. Prueba de ello es la reciente aparición de un kit de migración de MySQL a Oracle, lo que viene a demostrar la importancia que esta empresa comienza a dar a estos “competidores”. Entre las alternativas disponibles dentro del software libre se decidió analizar las siguientes opciones: o MySQL [7]. o InterBase [2]. o PostgreSQL [12]. No se trató de un estudio exhaustivo sino que se procedió a realizar una búsqueda de análisis y comparativas de los tres productos en Internet, donde se puede encontrar sobrada documentación al respecto. MySQL MySQL es una base de datos cuyo principal objetivo es la velocidad. Por esa razón en un principio sus desarrolladores decidieron sacrificar ciertas prestaciones. Así, transacciones, foreign keys, subselects, etc. no existen en MySQL, a cambio de obtener un mayor rendimiento. Por otro lado, cuenta con una gran cantidad de herramientas que permiten administrar de manera cómoda la base de datos. En las últimas versiones de MySQL se han ido incorporando algunas de las carencias que se habían visto, como son las transacciones (incluidas parcialmente en la versión 3.23). En un futuro se prevé que sea 100% compatible ANSI SQL, pero sin olvidar el objetivo del rendimiento, por lo que se permitirá al usuario configurar el funcionamiento de tal manera que pueda elegir entre rendimiento y las nuevas características. MySQL, por otro lado, tiene un sistema de bloqueos por tabla en las operaciones de inserción, esto provoca que al realizar una inserción, toda la tabla quede bloqueada, lo que en entornos con muchos usuarios puede llevar al colapso de la base de datos. Este es un gran handicap de MySQL [9]. Cabe resaltar además que, aunque a veces la base de datos puede colgarse, normalmente no se produce ninguna corrupción de la información, lo que es realmente importante cuando se está en un sistema en explotación. InterBase InterBase nació como una base de datos de código propietario, pero recientemente, a partir de la versión 6, Inprise (la 6 empresa propietaria) proporcionó una versión de la base de datos con el código libre, intentando que nuevos desarrolladores se uniesen al proyecto. Ésta es una base de datos relacional consolidada, en las ultimas versiones se han añadido características de SQL avanzado y se han mejorado las herramientas de administración y de configuración. InterBase se comporta de un modo rápido con pocos usuarios, pero debido a su arquitectura no compartida, si el número de usuarios aumenta, el rendimiento cae de forma drástica [6]. Se espera poder solucionar este problema en próximas versiones de la base de datos, a medida que más desarrolladores se incorporen al proyecto (actualmente se encuentra disponible la versión 6.1). El tamaño máximo de una fila de una tabla es de 64 KB, lo que puede ser una limitación importante a la hora de almacenar cierto tipo de contenidos en la base de datos [2]. PostgreSQL PostgreSQL es una base de datos relacional basada en objetos. Esta base de datos comienza su andadura en 1986, como un sucesor de Ingres y en los últimos años se ha ido desarrollando gracias a un equipo de voluntarios a través de Internet. Actualmente es totalmente compatible con el ANSI SQL92, incluyendo subselects, foreign keys, etc. En la versión 7.0 de esta base datos existe una limitación en el tamaño de las filas de una tabla que puede variar entre los 8 y los 32KB (esta última opción penaliza el rendimiento) [9][12], siendo ésta una limitación importante dependiendo del tipo de datos que se deseen almacenar en la base de datos. Esta restricción ha sido eliminada en la versión 7.1, permitiendo un tamaño de filas prácticamente ilimitado. Hay que hacer notar que el consumo de recursos por parte de PostgreSQL es muy elevado y carga el sistema, si se compara con un sistema mucho más sencillo como es MySQL, pero en cambio y debido a su arquitectura de diseño, escala muy bien al aumentar el número de CPUs y la memoria RAM disponible. Quizá el principal problema que se le achacaba a PostgreSQL es que tradicionalmente ha sido lento, pero esto ha cambiado con la aparición de la versión 7.0 y, sobre todo, de la versión, 7.1, las cuales demuestran en los benchmarks realizados que actualmente PostgreSQL es, al menos, tan rápida como MySQL o InterBase, e incluso se puede comparar con las bases de datos de código propietario [10]. Conclusiones Aquí conviene resaltar que la elección de uno u otro SGBD vendrá dada por las necesidades específicas del web que se quiera implementar, y en muchos casos será una decisión “subjetiva”. A fecha de hoy, la versión libre de InterBase aún ofrece un rendimiento pobre en entornos con gran número de usuarios concurrentes por lo que las opciones principales son MySQL y PostgreSQL; la diferencia fundamental entre ambos SGBD’s es la implementación de SQL y la velocidad, si se necesita rapidez y características sencillas la elección es MySQL mientras que en el caso de sistemas complejos en los que el rendimiento es una cuestión secundaria debería optarse por PostgreSQL. Es interesante hacer notar que en las ultimas versiones de ambos SGBD, se está tendiendo hacia un punto común. MySQL está incorporando transacciones e intentando ser 100% ANSI 92 compatible, mientras que PostgreSQL, además de ciertas mejoras, como el aumento del tamaño máximo de una fila, está poniendo especial énfasis en mejorar el rendimiento, habiendo conseguido en su versión 7.1.x grandes mejoras en este terreno. Por otro lado InterBase, a pesar de su escaso rendimiento actual, se ha incorporado al software libre recientemente y cuenta con perspectivas de crecimiento rápidas, que le pueden hacer en un futuro muy cercano ser un firme candidato frente a las dos bases de datos libres más consolidadas. Como se puede ver, el software libre ofrece muchas posibilidades dentro de los SGBD’s, pudiendo encontrarse sistemas completos que cumplan todos los requisitos de cualquier proyecto. Además, las perspectivas de futuros desarrollos no hacen sino anunciar una mayor cantidad de prestaciones de todos los sistemas estudiados, así como mejores rendimientos. Por todo ello, se puede afirmar que es posible optar por un SGBD libre en lugar de uno propietario sin temor a ninguna merma de funcionalidad. Lenguaje de programación de las páginas dinámicas El último elemento imprescindible en el desarrollo de un portal es el lenguaje de programación utilizado para la generación dinámica de las páginas; fundamentalmente existen tres posibilidades: CGI, Servlets (Java) y lenguajes incrustados. A continuación se describirán de forma somera cada una de esas posibilidades. 7 CGI (Common Gateway Interface) CGI no es un lenguaje, se trata de una especificación para la transferencia de información entre un servidor web y un programa que puede estar escrito en cualquier lenguaje, siendo Perl [8] y Python [13] los más habituales. Un problema que se suele plantear es el de la lentitud de ejecución debido a la necesidad de iniciar un nuevo proceso cada vez que se invoca un script CGI; proceso que, en el caso de Perl o Python, es interpretado. Se suelen mencionar los servlets como una alternativa más eficiente que CGI, sin embargo, existe una extensión para este interfaz, conocida como FastCGI, que permite scripts persistentes, con lo cual el problema de crear un nuevo proceso por cada invocación desaparece; FastCGI es una opción más que recomendable para aquellos desarrolladores con gran cantidad de código CGI heredado. Servlets (Java) Los servlets son el planteamiento ofrecido por la plataforma Java para extender servidores web; los servlets son independientes de la plataforma y del servidor y pueden acceder a todos los APIs de Java, posibilitando el desarrollo de verdaderas aplicaciones en la web. La diferencia fundamental entre CGI y los servlets es la persistencia1; esto quiere decir que una vez un servlet ha sido lanzado permanece en memoria y puede atender múltiples peticiones de servicios, por esa razón esta alternativa es más rápida que el CGI tradicional al no necesitar lanzar un nuevo proceso cada vez que se realiza una petición. Lenguajes incrustados Un inconveniente del CGI y de los servlets es la necesidad de generar todo el código HTML de la página desde el programa, los lenguajes incrustados ofrecen una aproximación diferente. En primer lugar, el código ejecutable no está separado del código HTML sino que éste es incrustado en el código HTML mediante etiquetas específicas; en segundo lugar, la ejecución es llevada a cabo por el servidor web dentro de su propio hilo. Dentro de los lenguajes incrustados existen diferentes alternativas; entre las más conocidas están: o ASP (Active Server Pages) de Microsoft: en realidad, ASP no es un lenguaje sino una tecnología de código incrustado para el servidor web MS-Internet Information Server, los desarrolladores pueden utilizar diferentes lenguajes de programación para desarrollar ASP, por ejemplo VBScript o JScript (JavaScript). o JSP (Java Server Pages): JSP es una extensión de los servlets desarrollada por Sun como alternativa al ASP de Microsoft; básicamente, permite la introducción de código Java dentro del código HTML, dicho código Java puede llevar a cabo diversas tareas, como por ejemplo utilizar servicios proporcionados por servlets. o PHP (PHP Hypertext Preprocessor) [11]: PHP sí es un lenguaje específico desarrollado para la generación de páginas dinámicas; tiene una sintaxis similar a la de C y Tcl y es interpretado por un plug-in que se debe añadir al servidor web. ¿Conclusiones? A la vista de lo anterior, ¿cuál es la tecnología más adecuada? Lo cierto es que esa pregunta no tiene una respuesta sencilla puesto que, en esencia, todos los lenguajes pueden llevar a cabo las mismas tareas y con prestaciones muy similares: velocidad de ejecución, interfaces para bases de datos, incrustación de código en HTML, etc. En realidad, como en todas las “guerras de religión” el problema radica en una pregunta engañosa: no existe la tecnología más adecuada, sino la tecnología más adecuada para un problema concreto. De hecho, ni siquiera eso es totalmente cierto, puesto que todas las alternativas disponibles adolecen de un grave problema: la imposibilidad de separar de una forma adecuada la presentación de la lógica de control; por esa razón, no existe una tecnología adecuada sino una solución no tan mala para un problema en particular. 5 CASO PRÁCTICO: PROTOTIPO DE PORTAL PARA LA EUITIO Situación actual y necesidades El sitio web de la E.U. de Ingeniería Técnica Informática de Oviedo se inauguró a comienzos del curso 96/97 y durante los últimos tres años de funcionamiento se ha convertido en el referente fundamental en cuanto a temas académicos, 1 Aunque, como ya se mencionó, CGI permite la existencia de scripts persistentes mediante el uso de FastCGI. 8 formativos, profesionales e incluso lúdicos relacionados con el Centro y sus miembros. Sin embargo, este sitio padecía una dolencia que, por desgracia, es aún frecuente en muchas de las organizaciones con presencia en la web: la limitada mantenibilidad del mismo debido a una gestión totalmente manual de la información. Este problema suponía que los servicios ofrecidos por el Centro en la web eran muy limitados y, aún así, requerían un esfuerzo considerable por parte de los encargados de administrar y mantener el sitio. A principios del curso 1999/2000 se toma la decisión de reconstruir enteramente el sitio, debía abandonarse el enfoque seguido hasta ese momento que lo reducía a un mero repositorio de documentos y adoptar otro que implicaba el desarrollo de una serie de aplicaciones web que proporcionasen las herramientas necesarias para poder administrar un portal con publicación on-line [5] que, en definitiva, era en lo que se había convertido el sitio de la Escuela. Además, ese planteamiento del sitio web como aplicación Internet favorecería la futura prestación de nuevos servicios; por ejemplo: la diversificación de personas que pudieran “publicar” además de los administradores (dirección, profesores, etc.), la posibilidad de ofrecer un interfaz web más adecuado para los alumnos (personalizable según sus asignaturas y preferencias, posibilidad de realizar ciertos trámites on-line, ...), así como las ventajas para implementar ciertas aplicaciones “ubicuas”. Software seleccionado Para desarrollar este sitio se decidió utilizar únicamente software libre, todos los elementos constitutivos del portal debían cumplir dicho requisito; en los apartados anteriores se han mostrado distintas posibilidades disponibles (Fig.2), a continuación se explicarán las razones que llevaron a los autores a decidirse por una solución o por otra en función de los requisitos y características del proyecto a desarrollar. Servidores HTTP ASP JDBC/ODBC CGI (Perl/Python) HTML IIS Apache PHP Servlets Cliente SGBD JSP Servidor Fig.2 - Distintas posibilidades tecnológicas para el desarrollo de un portal web. Sistema operativo y servidor web La selección de sistema operativo y servidor HTTP fue muy sencilla, como se mencionó anteriormente existen dos alternativas respecto al operativo: Windows NT y UNIX, el primero debía descartarse por ser propietario, en cuanto a UNIX existían diversas posibilidades libres (Linux, NetBSD y FreeBSD), se optó por Linux puesto que los autores tenían mayor experiencia con dicha variante y sabían que satisfacía los requisitos del proyecto. Por lo que respecta al servidor web Apache era una decisión obvia, no por ser el servidor más utilizado sino porque ese porcentaje de utilización es un indicador de su estabilidad y calidad. Base de datos En principio y tras ver tres sistemas (MySQL, PostgreSQL e InterBase) que eran capaces de soportar, en mayor o menor grado, todos los requerimientos de funcionamiento, se descartó InterBase, por su pobre rendimiento en ambientes con muchos usuarios concurrentes, como lo es una aplicación web, y por la limitación encontrada en el tamaño máximo que puede tener una fila de una tabla, que en este caso era un tema importante; por lo tanto la elección se centraba entre MySQL y PostgreSQL. Ambos SGBD cuentan con una base de usuarios bastante extendida, con multitud de interfaces, APIs y documentación. Ambos son portables a una gran cantidad de plataformas. MySQL ofrece en principio una mayor velocidad, pero por otro lado, su sistema de bloqueo de la tabla entera en 9 operaciones de inserción puede provocar un bloqueo en la base de datos si muchos usuarios proceden a realizar este tipo de operaciones simultáneamente, y una aplicación web es un claro ejemplo de aplicación en la que muchos usuarios concurrentes deben poder trabajar con los mismos datos. Otro punto a tener en cuenta son las carencias de MySQL respecto a transacciones (incorporadas en la versión 3.23), subselects, triggers, foreign keys, etc. En el otro lado estaba PostgreSQL, que es compatible con ANSI SQL92, la cual pese a ser más lenta en general, cuenta con ventajas como soportar una mayor carga de trabajo, contar con triggers, subselects, transacciones, etc. así como con un sistema de bloqueo de tablas a nivel de fila, lo que permite realizar multitud de operaciones concurrentes sobre la misma tabla sin producir un retardo. En MySQL la responsabilidad de controlar toda la consistencia e integridad de la información recae sobre la aplicación, lo que penaliza el tiempo de desarrollo, en cambio en PostgreSQL al poder hacer uso de foreign keys, transacciones, etc. es el SGBD el que se ocupa de estos temas quedando el programador liberado de ellos, lo que lleva a un mayor aumento de la productividad. Por lo tanto para elegir entre uno u otro SGBD, lo primero que se debe saber son las necesidades del sistema a desarrollar (transacciones, foreign keys, etc.). Si se necesita un sistema rápido, con pocos usuarios concurrentes y sin necesidad de transacciones, triggers, etc. se puede optar por MySQL, pero PostgreSQL proporciona un entorno más robusto, las cuestiones de rendimiento están siendo mejoradas rápidamente y en las últimas versiones los resultados son muy satisfactorios. En nuestro caso en particular nos decantamos por PostgreSQL, debido a la posibilidad de hacer uso de las transacciones (en ese momento la versión 3.23 de MySQL no era estable), implementar triggers, subselects, foreign keys, etc. Y a que la velocidad de proceso, pese a ser un factor a tener en cuenta, no era determinante para la elección. Lenguaje de programación Por lo que respecta al lenguaje de programación se optó entre tres posibilidades, Perl, Java y PHP, todos ellos podían servir perfectamente para las necesidades del proyecto a desarrollar, sin embargo, existía una peculiaridad respecto a dicho proyecto que es necesario mencionar. La peculiaridad en cuestión se refiere al personal encargado del futuro mantenimiento de este nuevo sitio web; dicho personal está constituido por becarios (alumnos de último curso con pocas asignaturas pendientes) que, además de otras muchas tareas, deberán dedicar algo de tiempo al servidor web. Un becario podría, teóricamente, prestar sus servicios durante dos años académicos pero, en general, dichos servicios se prolongan durante unos nueve meses. Cada lenguaje pasó entonces a considerarse a la luz de dicho punto: o Perl: los scripts escritos en Perl son crípticos y difíciles de mantener incluso por el autor de los mismos, pretender que un proyecto como un sitio web académico fuera desarrollado en Perl por un becario distinto cada año y se mantuviera comprensible y mantenible parecía difícil de creer, así que se decidió desechar este lenguaje. o Java: un lenguaje muy potente y una de las elecciones más adecuadas para un desarrollo como el descrito. Sin embargo, tampoco fue el lenguaje elegido; la razón fue coyuntural: los becarios encargados del mantenimiento y futuro desarrollo del sitio web de la EUITIO son alumnos de los últimos cursos que no tienen por qué conocer nada de tecnologías Internet; un proyecto como éste desarrollado íntegramente en Java podía resultar demasiado ambicioso para un solo alumno trabajando de forma discontinua. No obstante, en el futuro próximo los alumnos adquirirán de forma cada vez más temprana conocimientos sobre Java y desarrollo en Internet, momento en el cual habrá que plantearse la posibilidad de migrar el sistema a un entorno basado en servlets. o PHP: la última esperanza, para ser de utilidad con los requisitos planteados dicho lenguaje tendría que tener una curva de aprendizaje poco pronunciada y un período de entrenamiento corto; además, tendría que tener una sintaxis fácilmente comprensible y facilitar en cierta medida el mantenimiento. ¿Era esto así? Por suerte sí, la sintaxis de PHP se asemeja a la del lenguaje C y a los típicos lenguajes de script como Tcl, resulta sencillo de comprender y de mantener; por otra parte, la gran calidad de la documentación disponible y el enorme número de funciones que proporciona hacen realmente sencillo su empleo. Para comprobar la validez de esta hipótesis se planteó un período de aprendizaje de un par de semanas al término del cual se decidiría si el sistema se implementaría en dicho lenguaje, al finalizar este período la respuesta fue afirmativa y comenzó todo el proceso de desarrollo. 10 Integración final Por último, la integración final de todos los elementos es relativamente sencilla. Tanto Apache como PostgreSQL proporcionan dos servidores que serán los encargados de atender las peticiones recibidas de los clientes web y las consultas SQL recibidas a través de la red, respectivamente. Por su parte, el código PHP será interpretado por un módulo que se integra en Apache de tal forma que, una vez configurado el servidor web, los documentos con una extensión determinada serán preprocesados por dicho módulo, que interpretará el código PHP que haya en los mismos, para generar un documento HTML que será enviado por el servidor hacia el cliente. Por lo que respecta a las consultas SQL que ejecutará el módulo de PHP contra la base de datos, estas serán llevadas a cabo mediante una comunicación TCP/IP que establecerá el propio módulo con el servidor del SGBD. 6 CONCLUSIONES En la actualidad existen gran cantidad de tecnologías disponibles para el desarrollo de sitios proveedores de información dinámica; tecnologías que varían enormemente en términos de coste, calidad y dificultad de desarrollo. Este artículo ha tratado de mostrar las posibilidades existentes utilizando únicamente software libre, no por razones de coste sino fundamentalmente por aspectos como la fiabilidad y el rendimiento. Creemos que es posible desarrollar portales web utilizando únicamente software libre y que, en particular, el conjunto Linux-Apache-postgreSQL-PHP puede resultar perfectamente satisfactorio para el desarrollo de portales o la prestación de servicios a través del web por parte de organizaciones pequeñas y medianas. 7 REFERENCIAS 1. Apache Software Foundation. Apache. http://www.apache.org 2. Borland Software Corporation. Interbase. http://www.borland.com/interbase 3. Free Software Foundation. The Free Software Definition. http://www.fsf.org/philosophy/free-sw.html. 4. Free Software Foundation. Linux and the GNU Project. http://www.fsf.org/gnu/linux-and-gnu.html. 5. Gayo Avello, D., López Pérez, B., Labra Gayo, J.E. Desarrollo del portal web de la E.U. de Ingeniería Técnica en Informática de Oviedo. VII Jornadas sobre la Enseñanza Universitaria en Informática. JENUI 2001. Palma de Mallorca, España. Julio, 16-18, 2001. 6. Lilly, N. PostgreSQL: Taking E-Business Up a Notch. http://www.webtechniques.com/archives/2001/01/lilly/, 2001. 7. MySQL AB. MySQL. http://www.mysql.com 8. O'Reilly & Associates, Inc. Perl. http://www.perl.org 9. Perdue, T. MySQL and PostgreSQL Compared. http://www.phpbuilder.com/columns/tim20000705.php3?page=1&print_mode=1, 2000. 10. Perdue, T. Open Source Databases: As The Tables Turn. http://www.phpbuilder.com/columns/tim20001112.php3?print_mode=1, 2000. 11. PHP Development Team. PHP: Hypertext Preprocessor. http://www.php.net 12. PostgreSQL Global Development Group. PostgreSQL. http://www.postgresql.org 13. Python Software Foundation. Python. http://www.python.org. 14. The FreeBSD Project. The FreeBSD Project. http://www.freebsd.org. 15. The NetBSD Foundation, Inc. The NetBSD Project. http://www.netbsd.org. 16. The Open Source Initiative. The Open Source Initiative. http://www.opensource.org. 11