Should we break this up by function? It's not very unwieldy right now, but I can easily imagine library code wanting the `system_command` part but not needing the IO stuff. Long term as we accumulate more of this stuff, it'll be nice if it's separated by common function.