Cualquier desarrollo basado en software libre para el web tiene como primera opción en la actualidad el servidor de web Apache. El disponer del 60% de cuota de mercado es una clara muestra de la gran aceptación que ha tenido, con una Fundación detrás apoyada por empresas como IBM, y con un contínuo desarrollo. En los próximos meses culminará con la versión 2.0 de Apache, que solventará algunos problemas de rendimiento debido a su arquitectura basada en procesos, y que seguro, marcará un antes y un después en el desarrollo de aplicaciones para Internet.
Junto con Apache tenemos a mod_perl y con éste, a Perl el cual a pesar de la fama de lenguaje para tareas sencillas y orientadas al procesamiento de cadenas, Perl es un lenguaje muy maduro que tiene más de una década a sus espaldas de evolución. Muestra de su madurez es la gran comunidad de desarrolladores que tiene a su alrededor y de sitios desde los que se apoya el lenguaje, asi como la apuesta de O'Reilly por este lenguaje. Es un lenguaje de desarrollo rápido que una vez se supera la primera curva de aprendizaje es un lenguaje muy productivo con características avanzadas en campos como la orientación a objetos.
Perl es, depués de C, el lenguaje que mejor se integra con Apache gracias a mod_perl, un gran trabajo de integración de Apache y Perl en el que se na cubierto dos frentes: mostrar la API de Apache a Perl a través de una interfaz orientada a objetos que permite el desarrollo de módulos de Apache desde Perl e incluir dentro de Apache el entorno de ejecución de Perl, con lo que no es necesario que con cada petición de programa Perl se cargue el entorno de ejecución, es decir, el interprete de Perl. La API de Perl a Apache permite acceder a todas las fases en las que una petición de una URI es atendida en el servidor Apache, lo que permite un control total sobre como el servidor Apache presta servicios.
El gran rendimiento de mod_perl se logra manteniendo en memoria compilado todo el código Perl de las librerías que se va cargando. De esta forma, llamadas repetidas a funciones ya cargadas provocan llamadas a código precompilado en memoria por lo que su ejecución es muy rápida. De esta forma es posible el servir páginas dinámicas con unos rendimientos muy altos.