For rendering openstreetmap tiles, there are basically two approaches: bitmaps
or vector data.

Bitmaps are the classic. Normally you start with something like OSM PBF or
geotiff. Then you render it with, for instance, mapnik. Mapnik is configured
with xml, which you don’t really want to do. So you now have CartoCSS or
MapCSS: much friendlier formats. Those can then be converted to mapnik’s xml
with tools like tilemill, kosmtik, manakarto or komap.

So... with data sources and styles, a renderer (mapnik) can create the bitmap
tiles. Then you need to host it. TileStache+nginx, apache+mod_tile, etc.

A problem: if you render the same source with multiple styles, you have to do
the same work multiple times and that takes lots of calculation time. A
solution is “fat vector tiles”: you use mapnik to create a vector tile
with lots of feature information out of postgis. Afterwards, you can use
mapnik again to combine the fat factor tile with styling to (much more
cheaply) render the actual bitmap tile.

You can go further. Vector tiles. The rendering of the pixels is moved to
the client (the browser). You could generate fat vector tiles beforehand and
store them in mbtiles. The server then combines those fat vector tiles with
styling to send vector tiles to the browser.

The future?

Shorter iteration cycles.

More flexible and rich pipelines. Perhaps you can finally do things with
translations?