  We present KumQuat, a system for automatically synthesizing parallel and
distributed versions of Unix shell commands. KumQuat follows a
divide-and-conquer approach, decomposing commands into (i) a parallel mapper
applying the original command to produce partial results, and (ii) an ordered
combiner that combines the partial results into the final output. KumQuat
synthesizes the combiner by applying repeated rounds of exploration; at each
round, it compares the results of the synthesized program with those from the
sequential program to discard invalid candidates. A series of refinements
improve the performance of both the synthesis component and the resulting
synthesized programs. For 98.2% of Unix commands from real pipelines, KumQuat
either synthesizes a combiner (92.2%) or reports that a combiner is not
synthesizable (7.8%), offering an average speedup of 7.8$\times$ for the
parallel version and 3.8$\times$ for the distributed version.
