The Linux Conundrum

A large company, was taking over our smaller company and they were on a trend to replace Linux and Java with MS Windows  ®  and ASP.NET.

When the CIO was asked why not go the other way since arguably our smaller company was more advanced put plainly his answer “Linux and Java guys are so hard to find! (and expensive). MS Windows ® guys are all over the place … ”

I liked the proposition that Linux guys are not easy to find, is this really so ..? (feel free to comment) GOOD !!  🙂

So now I know Linux/ Unix is niche, and better paid, but I cannot but ask myself the question why is this so. Is MS Windows ® so much easier or is Linux still growing into a user OS ? and why in the server business is ease of use given importance over customize-ability and tweak-ability.

Also is Linux in any deep way better that MS Windows ®. In my opinion the differences are more in the approach and the attitude of trust towards a single focal point i.e. MS in this case or on a community led by the benevolent dictator  Linus Torvalds . (By the way this is how he pronounces Linux.  [Linux])

I think there is a whole discussion behind this but money affairs aside how did we end up where we are with Linux being so popular and still perceived as difficult.

In the school days the term Operating System was clear and easily understood.  There was a small set of functions the OS needed to perform:

  • POST (power on self test)  and Boot the machine.
  • Enumerate the devices on the system.
  • Expose the system via a set of instructions (usually as a user interface or what is now referred to as an API).
  • Monitor the performance of the system and keep tabs on the system.
  • Manage the devices and resources via drivers and kernel code.
  • Provide a platform for applications to run on usually supplying an HAL (hardware abstraction layer).

Even the anatomy of the OS was relatively simple:

Unix has the following basic structure :

 

Things have changed though massively in the last ten years.

The scope and anatomy of Operating Systems has shifted and became massively more complicated when compared to what they used to be.

Nowadays as anyone “knows” an Operating System is meant and assumed to have the capabilities of not only displaying text and the occasional graphic but to have fully fledged 3D graphic station, very fast and stable networking  capabilities.  It must have an intuitive and customize-able GUI ( graphic user interface) must run on literally millions of combinations of hardware. Just take a look at the debian pci compatibility list ( and that’s just PCI devices there are other type of interfaces out there ).

Origins of Linux place it in Helsinki where a student of  Andrew S. Tanenbaum author of the MINIX operating system, namely Linus Torvalds took up the task of writing what was later to be known as the  Linux kernel reasons for this were political in a way. Apparently young Mr. Torvalds in a visionary outlook thought that MINIX’ license being for educational use only was way too restrictive.

 

 

The History of Linux is only related to Minix.
The Linux Project was not as other OSes a spin off of a commercial work but of a research / educational one.

 

A Unix kernel — the core or key components of the operating system — consists of many kernel subsystems like process management, memory management, file management, device management and network management.

Each of the subsystems has some features:

  • Concurrency: As Unix is a multiprocessing OS, many processes run concurrently to improve the performance of the system.
  • Virtual memory (VM): Memory management subsystem implements the virtual memory concept and a user need not worry about the executable program size and the RAM size.
  • Paging: It is a technique to minimize the internal as well as the external fragmentation in the physical memory.
  • Virtual file system (VFS): A VFS is a file system used to help the user to hide the different file systems complexities. A user can use the same standard file system related calls to access different file systems.

The kernel provides these and other basic services: interrupt and trap handling, separation between user and system space, system calls, scheduling, timer and clock handling,file descriptor management.