I wanted to talk about this for a long time, however, the key points were not clear until recently I ran into the pipeline concept in PowerShell.
When you do pipeline in PowerShell, you’re passing not a text stream from the left command to the right command, but rather, you’re passing a .net object.
When I read this from TechNet, I smiled to myself, yes, this is typical Microsoft!
Windows PowerShell provides a new architecture that is based on objects, rather than text. The cmdlet that receives an object can act directly on its properties and methods without any conversion or manipulation. Users can refer to properties and methods of the object by name, rather than calculating the position of the data in the output.
And I said to myself, now I know what I wanted to say.
One key difference between Windows and Linux is, Windows always tries to be smarter, where GNU Linux tries to stay plain and humble. Pipeline in scripting is just one recent example.
Linux has been using text configuration files. Windows came along and said, we need something better. That’s how Windows Registry came about.
Linux has been using pipeline for IPC. Windows came along and said, we need something better. That’s how COM came about.
Linux has been using lock files to prevent processes to start another instance. Windows came along and said, we need something better. So they use Kernel Object instead.
Linux has been using permissions as a basic security measure. Windows came along and said, we need something better. So they do everything using ACLs.
Linux has been using symbolic links. Windows came along and said, we need something better and introduced short cuts.
To be fair, not all of them are bad ideas.
Despite its complexity and awkward configuration, COM gained such popularity that it became the basic foundation of modern Windows. Open registry in any Windows that has been used for a while and chances are the biggest tree is HKLM\Classes\CLSIDS. (One of the key reasons why you Windows becomes slower as you install more and more software).
Kernel Object is much more reliable than lock files. ACLs indeed provide much flexibility in terms of access control. Linux is also doing it now.
However, we all know that Windows have record of being smart in cheap ways and then fail pathetically. (SilverLight is the one that came into my mind as I write this) To me, this idea of passing objects through pipeline looks like just another one that will fail.
Having said that, I have to admit that, this difference between Windows and Linux is also not surprising. Linux is developed by community led by technical experts. Introducing new features always involves extensive discussions between these experts.That’s why Linux has a bad reputation of not listening to its users.
Where as for Windows, most likely, new features are proposed by requirement collection team and developer team, then the list of new features have to go through rounds of prioritization processes. If there are disputes, then there will be escalations and some manager will decide. Once decided, then features still in the list will be implemented. Period.
Now, it is actually surprising that Microsoft actually made some key decisions right, right? 🙂