I kind of feel bad for not posting anything for so long, and so I decided to make a post about some ideas and random thoughts about my imaginary operating system.
First the problems that I identify for a new operating system:
It creates users and developers division that are forced to choose between where they will run their favorite applications.
In the end people just want to run applications with the least amount of effort.
Applications: the number of applications on a operating system depends on the number of developers that are creating new applications, and this
is normally related with the number of users, therefor its a cycle/loop, we need developers to get users, we need users to get developers.
- Developing: Operating systems are complex, hardware support is not easy sometimes closed and non-existing and they take a long time to develop.
- Cant remember anything else…
My imaginary operating system should have this:
- It should run everywhere: even on top of other operating systems as an application, on the browser, on the cloud, doesn’t matter.
This should combat the fragmentation problem:
- first we get users on the browser, where they can easily try the OS and switch to their host OS.
- If users like the browser version they will get it as an application, that has more features (like file system access).
- If users like the application version they will start trying the standalone OS.
- It should build its own cloud: every instance of the operating system should be a node on the cloud, so if you are running on your android, desktop computer, tv, browser all resources are shared on the OS private cloud, such as CPU, files, … Same operating system everywhere.
Developing: to run everywhere the best option I think would be html5/js. The operating system should separate all services with a [REST] API, the client UI could be implemented as html5 or any other technology (but html5 would be better).
The rest service should be stateless and use tokens. Client applications can be separated using different tokens and living on a complete isolated environment using frames.
- First I would try to define a Operating System API that should be kind of a standard. The API should work locally and remotely, implementation doesn’t matter (this can be achieved by a rest service coupled with some client server library’s).
- Its a good idea to separate Server (API) and Client (UI) as independent projects,
this will allow server developers to concentrate efforts on doing a very stable server without concerning how data will be handled and displayed to the user,
it will also give many options to client developers that would have the freedom to choose any technology and library’s that they like.
- The server could be implemented as:
- Headless Server: using nodejs with modules like express, fs …
- Desktop Application: using nodewebkit that can use nodejs server and allow to call directly the API from the UI.
- Mobile Application: similar to desktop app but implemented on cordova.
- Standalone:The easy solution would be running linux booting to the “headless server” or “desktop application”. But what would be really
great would be something like runtimejs
After a little of research I found the most promising, open-source, projects:
I didn’t test it yet, but reading the page there is very interesting features and ideas: isolates, rpc’s, …