I am not here to bash Microsoft though. Microsoft is making a bold move by trying to merge the two and I think somewhere down the line it needs to be done; I just think they're 'doing it wrong'. So I wanted to propose Amarant in this post. Amarant is a concept for an operating system for desktop and mobile computing platforms that I have been working on with a few friends for over a year now. When I say "working on" I don't mean that I've been coding the blasted thing; instead we've simply been brainstorming ideas for a modern computing platform that would allow users to someday worry much less about the differences between their phone and their home computer. Because of the time however my ideas my come out a bit odd, please try and bear with me.
The heart of the operating system would be the standard OS kernel. It controls normal OS tasks such as threading, IPC, memory management, etc. My personal preference would be to use a microkernel here, and keep the kernel separate from any and all device drivers, but in practice this is still a few years away from being optimal for overall performance. Above the kernel is a basic runtime layer. The runtime layer has many powerful apis for running tasks optimally across multiple cores, much like Apple's Grand Central Dispatch, and makes use of these apis in most applications where it is appropriate.
The runtime layer also provides a restrictive environment which developers would design software around. This restrictive environment encourages developers to define an application based on Data Sets and Operations rather than on functions. How does this differ from standard computing methods? Data Sets are a common set of structures and libraries that define how a user works with data. One example would be a phone number or an address. Both of these are Data Sets. These Data Sets can also be nested under another Data Set, in the case of a 'Contact' which may contain a 'Name', 'Phone Number(s)', 'Address', 'Email(s)', etc.
So I still haven't explained why this Data Set differs from a standard C structure or class. Honestly it isn't different internally, but what becomes different about it is that the developer is no longer spending so much time writing an interface that works on one device to work with this data. Instead, developers write an application consisting of Data Sets, Actions and Operations. Data Sets define what the user will interact with. The operating system then decides how to display this data to the user, based on the device and peripherals. If we're on a tablet with no keyboard or mouse, then the operating system knows to display a touch-based interface with the given data. It then relies on developer chosen Actions to define what happens when a user does something with the data. A developer may choose to allow Phone fields to be edited, deleted or added. Then what happens as a result of these Actions is defined in Operations. Operations can validate, query, or manipulate data. This can be a simple process such as checking to see that the phone number has 'x' amount of digits, or can be a complicated process of validating an address through google, pulling a map from google maps and displaying the map with directions for the user.
This really isn't anything revolutionary. The concept is more an extension of technologies already used in mobile and desktop platforms, but with a more restrictive environment. This isn't to say that the OS can't handle just about any application a modern computer can. What differs is the process in which the application and the OS interact. In Amarant, the Application cooperates with the OS by providing data to it, rather than directly to the user. The OS should know a more appropriate way to display data to the user than the application. The application also does not consume horrible amounts of resources to run. The core of the application is not a loop as in most other OSes. The core of the program is the Data Sets, the Actions and the Operations the application provides to the OS.
This does create a problem for video games though and seeing as how this site is tailored to game development primarily I wish to propose my ideas above with the hopes that someone is willing to come discuss their solution to running games in such a platform. In such a platform where most functionality is based on reaction, how should games be developed?
This will hopefully not be my last post about Amarant. I hope that maybe someone will find interest in discussing this project and will motivate me to continue writing about it on gamedev. Please leave any comments and/or criticisms below.
Thank you all for taking the time to read this,