<story><title>The Unix Philosophy</title><url>http://www.catb.org/esr/writings/taoup/html/ch01s06.html</url></story><parent_chain><item><author>fauigerzigerk</author><text>I keep wondering about what seems to be the most important component of Unix philosophy: write many small programs that do one thing well and interface using text streams!&lt;p&gt;Yes, modularity is important. However, in some cases, this philosophy has resulted in the &amp;quot;tangled mess held together by duct tape&amp;quot; kind of systems architecture that no one dares to touch for fear of breaking things.&lt;p&gt;I think Unix philosophy is struggling with a fundamental dilemma:&lt;p&gt;On one hand, creating systems from programs written by different people requires stronger formal guarantees in order to make interfaces more reliable, stronger guarantees than interfaces within one large program written by one person or a small team would require.&lt;p&gt;On the other hand, creating systems from programms written by different people requires more flexibile interfaces that can deal with versioning, backward and forward compatibility, etc, something that is extremely difficult to do across programming languages without heaping on massive complexity (CORBA, WS-deathstar, ...)&lt;p&gt;I think HTTP has shown that it can be done. But HTTP is also quite heavy weight. It doesn&amp;#x27;t exactly favor very small programs. Handling HTTP error codes is not something you&amp;#x27;d want to do on every other function call.&lt;p&gt;In any event, I think Unix philosophy is a good place to start but needs a refresh in light of a couple of decades worth of experience.</text></item></parent_chain><comment><author>ajross</author><text>&amp;gt; in some cases, this philosophy has resulted in the &amp;quot;tangled mess held together by duct tape&amp;quot; kind of systems architecture that no one dares to touch for fear of breaking things.&lt;p&gt;Pretty much, just as Booch&amp;#x27;s philosophy has given us tangled messes of class hierarchies with cross references pointed every which way.  And just as The Gang of Four gave us AbstractedTangleMessFactorySingleton.&lt;p&gt;The distinction with the Unix-style pipe mess is that it exists and works an order of magnitude faster than other examples of bad code.</text></comment>
<story><title>The Unix Philosophy</title><url>http://www.catb.org/esr/writings/taoup/html/ch01s06.html</url></story><parent_chain><item><author>fauigerzigerk</author><text>I keep wondering about what seems to be the most important component of Unix philosophy: write many small programs that do one thing well and interface using text streams!&lt;p&gt;Yes, modularity is important. However, in some cases, this philosophy has resulted in the &amp;quot;tangled mess held together by duct tape&amp;quot; kind of systems architecture that no one dares to touch for fear of breaking things.&lt;p&gt;I think Unix philosophy is struggling with a fundamental dilemma:&lt;p&gt;On one hand, creating systems from programs written by different people requires stronger formal guarantees in order to make interfaces more reliable, stronger guarantees than interfaces within one large program written by one person or a small team would require.&lt;p&gt;On the other hand, creating systems from programms written by different people requires more flexibile interfaces that can deal with versioning, backward and forward compatibility, etc, something that is extremely difficult to do across programming languages without heaping on massive complexity (CORBA, WS-deathstar, ...)&lt;p&gt;I think HTTP has shown that it can be done. But HTTP is also quite heavy weight. It doesn&amp;#x27;t exactly favor very small programs. Handling HTTP error codes is not something you&amp;#x27;d want to do on every other function call.&lt;p&gt;In any event, I think Unix philosophy is a good place to start but needs a refresh in light of a couple of decades worth of experience.</text></item></parent_chain><comment><author>marcosdumay</author><text>For a while, Linux mostly had the philosophy that your software should come with a text interface, optionally a GUI, and a C library. That library part is for solving the messes created by tangled text interfaces.&lt;p&gt;But nowadays lots of things only come for the GUI.</text></comment>