What is the difference between Linux, AIX, Solaris, MAC. Aren't these all some kind of Unix flavors ? Why do we need so many types. Why can't there be just one type ?
closed as primarily opinion-based by Anthon, Bernhard, jasonwryan, slm♦ Jul 28 '14 at 20:37
Many good questions generate some degree of opinion based on expert experience, but answers to this question will tend to be almost entirely based on opinions, rather than facts, references, or specific expertise. If this question can be reworded to fit the rules in the help center, please edit the question.
It's historical, sort of like the question, "Why is there more than one nation state?". Presumably, at some point a few hundred thousand years ago, there was only one, singular population of homo sapiens, and yet now there are many.
The original UNIX was a singular entity that was written in non-portable assembly for the PDP-11 as a AT&T Bell Labs project paralleling (or spun off from) the MULTICS OS, to which Bell had previously contributed. Since this took a lot of work -- perhaps, an amount comparable to designing the PDP-11 itself, which wasn't a Bell product -- people at Bell Labs decided it would be nice to do this kind of thing in a higher level language than architecture specific assembly; i.e., a language that could be implemented using whatever assembly instructions were appropriate to a specific machine, but which itself worked the same everywhere.
This is now a very fundamental principle of software design: you engineer things in layers, where each layer deals with the ones bordering it as an abstraction. "Abstraction" in this context means something that describes just the relevant details of something else; what is "relevant" is defined by the context. Going back to our Unix example, the languages B and then C were developed; they abstracted away assembly level details into higher level commands. This meant you could use such a language to read a file the same way on machine A as on machine B, even though there are lower level details involved that are completely different. If you wrote an entire OS in such a language, you could then compile and run that OS on any machine for which the language is implemented. If this sounds like more work rather than less, it's not; the language is less work than the OS, and the OS plus the language is likely still less work than the OS would have been by itself. It certainly won't be more, because it's using the interchangeable bits of the language and those are bits that would have had to be implemented for the OS anyway, and when you get to architecture B, all you have to redo is the language implementation. Plus, you now have two distinct things that can be layered and could be combined with other things.
Keep in mind that at the assembly level, there isn't even such thing as a file -- so there's an example of a higher level abstract entity. B, C, and Unix came into being when concepts like this had taken a firm hold, and it was successful perhaps because it made good use of them. The exact same people developed both the language, C, and the OS, Unix, and they fit together nicely.
Although there wasn't a formal C specification for some years, Bell did licence the source code for Unix to universities in the 1970's (methinks: a much more open era than now, technology wise) and this is how the first "unix-like" OS, namely, BSD, came about. In addition, over the next decade Bell made some commercial agreements with (e.g.) HP and Sun Microsystems, resulting in even more variations.
While Bell did have control over their source code, they did not exert any ownership rights regarding OS concepts, perhaps because they had already licenced Unix out and allowed it to evolve independent of them. Giving the world C meant C was more much more successful than it would have been if they had kept it to themselves -- this is the predominant pattern for language specifications -- and that benefited Unix. This is why things like OSX were eventually possible; OSX is the successor to NeXTstep, which was a Mach (architecture) based platform using a BSD kernel.
That just leaves linux and GNU, which implemented a unix-like OS using all original open source code1 -- the concept of free, open source software having been previously championed by GNU and its founder Richard Stallman. At this point, the various commercial aspirants had realized
that the standards rivalries often termed as the Unix wars were causing all participants more harm than good, leaving the UNIX industry open to emerging competition from Microsoft. http://en.wikipedia.org/wiki/Open_Group
And these specifications were unified, making it easier to write software that works on any complaint commercial variant. It also meant anyone was free to comply; perhaps the major players did not see what was coming next, because it was a bit "outside the box", and perhaps they would not have cared anyway, but in any case, making the source code for such an implementation (GNU + Linux) itself open attracted a lot of positive attention, and so here we are: there was no grand scheme, just a lot of independent plans revolving around the same sun.
1. BSD was still in a bit of a legal limbo, original code base wise, at that time.
Could also ask, why can't there just be one type of car? Wouldn't we all be happy driving a Gremlin? Or maybe an El Camino?
There are some historical reasons for some of the deviations between the proprietary flavors in Unix and Linux that would make for some interesting reading (finding all those resources would be out of scope for such an open-ended question, I recommend you do some searches on flavors you like or have read about to find their origins). Likewise newer Linux flavors have benefited from the open source world we now live in and can be very specialized and contain configurations/apps/tweaks meant for specific usages (why run extra services that will never be needed by that specific system).
So you can run a firewall (BTW it is linux), you can run a full gui desktop workstation (BTW it is linux), you could run a NAS (BTW it is linux).
So coming round full circle... Linux = misnomer, there are too many versions of Linux to define in this manner. AIX - IBM proprietary version of Unix. Solaris - Sun proprietary version of Unix. Mac - Apple proprietary version of Linux/Unix (Honestly have not looked to see where it was derived from).
I recommend you embrace the diversity :)