I got some feedback on my ecl sffi sdl2 png post and code. Foremost, I heard that it is not clear what my intent is; basically I am promoting ecl's sffi which is better than llvm c2ffi based cffi wrappers (which are more popular). Glad we cleared that up! This is why I squeezed libpng through SDL2/SDL2_image. There is a relatively popular "quicklisp" c2ffi SDL2 cffi wrapper that is much worse than just interleaving the C itself with the lovely common lisp in ECL's sffi. One criticism I tried to agree with - except, no one wanted to own it - is that using SDL2 which is big, and meant for making interactive rich media software in an X environment solely to use libSDL2_image solely to have some hidden default values for libpng (which is in libSDL2_image)... It's getting an elephant to take you and your bicycle to a garage to fix your bike. The elephant is lumbering and largely unnecessary for your needs. That's what I wanted to admit, but what I got was sort of an unknowing expression of this: Hey, did I know that you can ''' import png ''' in python? Everyone who is trying to sell out by loving python (now quite after the fact; Google etc are doubling down on js now instead) does not understand what the products they are pro-bono promoting are or do. Python is a bizarre and rambling clutter of C program. (The 'reference implementation' cython). But let's just talk about python's png module, pypng. It's a copy of libpng, but where libpng exposes the extensible png image container format, pypng silently uses simple-use-case defaults. This is what I was getting from SDL2_image, so I was guilty here too. Aside from silent defaults, pypng does what libpng does with zlib (the C compression workhorse dependency shared by pypng and libpng). Then, pypng adds some black magic to pack accesses into sequential/rows as a mitigation for how incredibly slow the python engine is compared to C (about 30 times slower for simple cases). This is in contrast to my random access in my sffi example, which really does random accesses (consed into lisp, churning through the Boehm garbage collector).