I am in a bit of an unusual situation where “I use” a combination of three different laptops, which each run different platforms. Namely;
MacOS primarily at work with a combination of Linux servers and then
Windows as well as
Ubuntu on two separate home laptops that I switch between on my desk all the time between tasks.
A bit on Windows
Windows is good as a general consumer OS and there are many applications that are created to run on it. The problems come in with the way applications are installed, the registry as well as the way the file system works.
To elaborate a little: When a Windows application is installed it dumps a lot of shared OS files in the main “System32” directory which can often already have a previous version of that exact shared file loaded. Often this previous version is required by already installed software and the newer version is not tested to work correctly with said software. This can pose problems when you have many different software loaded on a system. Windows uses a local database called the Windows Registry (regedit) which it stores information about everything from serial numbers and license blobs to locations of dynamically linked libraries (DLLs) and OLE control extensions (OCX) files which it often doesn’t clean up correctly when particular uninstallers run. This can lead to a lot of invalid entry points that need to be read in at system startup as well as various other times such as building contextual menus.
A massive negative for Windows is that a lot of viruses have been written to target the OS because of it’s popularity as well as the ability to execute files with many scattered and shared dependencies. This has led to people having to install antivirus software and have it running and scanning the system frequently which in turn slows down the overall computer yet more.
A bit on Linux
Linux (Ubuntu in my case) is excellent in both Desktop and Server installs but there is most definitely a steeper learning curve due to most people being more familiar with Windows and it also tends to be more “configuration” driven. This means that many obvious things don’t always work out of the box and many hardware/device drivers are often not installed or ready to be used without additional tweaking or manual intervention. The server releases do not have a visual feel, with no Graphical Interface (GUI). Everything is done by interacting directly with the Command Line Interface (CLI). This is the main reason that such a high proportion of the web servers online today run one of the many Linux Server flavours. There are hundreds of different flavours of Linux with the most popular being Ubuntu, Centos, Redhat, Fedora, Debian amongst many.
A Linux pitfall
One of the biggest shortfalls for Linux is that a lot of software is not able to run on Linux (by comparison to Windows) without a lot of tampering and emulation. Most software vendors tend to create software for Windows as well as OSX (due to financial market penetration), but often leave Linux out of the mix unless it is compiled to a server flavour for use with infrastructure architecture. For example, the Apache range of open source software or equivalent.
It is possible to run Windows compiled software on Linux (and now even OSX) by using n tool called “Wine” which essentially implements the Windows Application Programming Interface (API) calls. On StackOverflow a user called “Jthill” describes it quite well, saying that “Consider Java Virtual Machines. No JVM emulates any other, they’re all implementations of a specification. Wine isn’t emulating the win32 api, it’s an implementation of it. Specs and reality not necessarily matching, both Microsoft’s implementation and Wine’s implementation have workarounds to make buggy code work, and it’s not necessarily obvious which implementation is a better target for any given project.”
I have found OSX to be the overall best and most well rounded Operating System (OS) when comparing my existing use cases. This is because it seems to have the best of both worlds from both Windows and Linux.
“Mac OS X is based on BSD UNIX, which is open source. Apple releases its open source fork of BSD as the Darwin operating system. The XNU kernel that Apple uses is its variant of the Mach kernel, which is an implementation of UNIX.”
OSX provides both the simplicity as well as the vast amount of applications of Windows with the added benefit of a rich CLI like Linux because of it’s Unix origins.
The stability and access to the file system is also very apparent because everything is a package instead of distributed and shared application files; which often litters Windows’ System32 directory (eg. OCX/DLL files) as talked about above.
On *nix (all variants of Unix as well as Linux and often BSD as well) systems, the file system partition often uses Ext4 (often recommended) instead of Windows’ NTFS or FAT file system. They both have their benefits but I have found Ext4 to be better for moving files around as they are referred via pointers instead of actually physically moving the files on the hard-disks. This means that on *nix systems you can move a large directory to another location on the file system in an instant. The file table just points to the new location. This is good from a usability perspective as tasks complete instantly as well as when extending the lifetime of the hardware itself by performing less writes to the drives.
If I had to create an OS to do away with all previous OS’s and run everywhere as discussed above I would probably go for a Unix base platform and build a tool such as Wine directly into the architecture to be able to run all different executable formats but make sure to containerise them into their own resource pooled micro environments to that they don’t have access to each other in order to not override shared files or change pointer spaces.