Oh, and regarding server side software, a web server is enough if you named the tiles in a logic way. You'll have to provide a callback to OpenLayers to return the name of the tile, similar to this pseudo-code:
GetTileFileName(zoom, x, y) {
return "/MonaLisa/tiles/z" + zoom + "lon" + x + "lat" + y + ".png";
}
GetTileFileName(zoom, x, y) {