fakecanvas
fakecanvas aims to expose the awesome capabilities of canvases to those whose hardware/software are not able to use them. it is meant to be a drop-in library, only needing a require 'fakecanvas' call in order to be used.
fakecanvas automatically detects canvas capabilities and will use real canvases if supported, but it can be configured to always use fake canvases (useful for testing!).
canvas emulation is not bulletproof, and may have a fair bit of overhead, but it's a nice fallback for many cases.