The basic flaw in the Unix philosophy is that the rules 1. and 2. are incorrect. The rules should be as follows:
1. Write libraries that do one thing and do it well. 2. Write libraries to work together.
The third rule is correct, because that is what programs essentially are: black boxes to modify input streams to output streams. I think this correction should be followed in the future.