This is largely system dependent, but because we write stdin before reading stdout/stderr in Git::Wrapper::RUN and read stdout before stderr, we can end up with deadlocks when pipe buffers fill up and we are blocked on another descriptor. Solving this with Open3 gets pretty icky with select() but there are several alternative modules to help with this.