I’m baffled. gzip does its thing by calling the zlib deflate() function, though it wraps the compressed stream differently than deflate() normally does. I have an application where I don’t need gzip’s extra metadata, so I wrote a small program called deflate. They should perform the same apart from a small constant overhead for gzip, but they don’t. As far as I can tell the only differences are minor details of buffer handling.
$ jot 40000 | gzip -9c | wc -c 87733 $ jot 40000 | ./deflate | wc -c 86224 $ jot 20000 | sed 's/.*/print "hello, world &"/' | ./lua-5.1.2/src/luac -s -o - - | gzip -9c | wc -c 81470 $ jot 20000 | sed 's/.*/print "hello, world &"/' | ./lua-5.1.2/src/luac -s -o - - | ./deflate | wc -c 82687