NodeOS Needs Your Help
Posted: Sat May 07, 2011 11:41 am
Hello everyone. In the past I've made a few posts on this board regarding an OS I've been working on, on and off. However, as of now I have really only done design work, and have implemented nothing. I have prototyped a lot of my designs in Ruby to test their feasibility, but now I'm at the point where I actually need to code this damn thing, and I've come to realize the magnitude of this project is well beyond my capability as an individual. Even with dozens of people working on it, my OS could take years to finish. And considering the fact I've never actually implemented an OS in practice before, I'd estimate the practical completion date, if I started right now, to be somewhere around the year 2050. But then again, I usually severely underestimate the time it takes me to code things.
So I quite obviously need some help . I would have asked much sooner, but I was too busy debating with myself exactly what the best approach to getting help would be, and I only recently came to the conclusion that I'd be better off just making my OS open source from the start. That being said, I'm not ready to go public just yet. Before I do that, I need help with two things.
The first thing is, a reality check. Yes, I need someone who is much more experienced than me to help me go through my design and make sure that everything I'm planning to do is as feasible as I think it is. I'm a fairly experienced programmer, and I have a pretty good level of familiarity with low level computer architecture, but having never actually tried to implement anything for my project yet, I can easily imagine there may be unforeseen difficulties that may need to be resolved before my design is finalized.
The second thing is, a toolchain. My OS does not use a conventional binary format. There are almost no existing tools and compilers that I could use that would be suitable for my needs. I could use an assembler and a system of macros, but then my whole OS would be stuck in platform dependent assembly, which is not something I want. At the very least I need a complier, preferably written in a scripting language such as Ruby, to bootstrap this project.
If you can help with either of these things, please let me know.
But why should you help you ask, when I have told you virtually nothing of my project? Well okay, here is what I can say about what my OS is, and what I'm trying to accomplish.
There is a famous quote by Albert Einstein, "Make everything as simple as possible, but not simpler." In a nutshell, that is the goal of my operating system. Modern operating systems, and modern software design in general, suck. That's because nothing is ever as simple as it should be. When you give two people the task of solving the same problem by writing software, the solutions they end up with are invariably different. When you have an environment of programmers working independently, with differing ideas about correct design, and then at the end of the day you have to make their software work together, you get a mess.
NodeOS is the solution to this problem. NodeOS is designed so that all code is organized into a class based functional hierarchy, where there is no more than one class for any given type of object. For example, the class for a specific type of image (JPEG for example), must always be a subclass of the basic Image class, and must provide an interface that is compatible with that of the Image class. The goal would be to have no more than one JPEGImage class on the entire operating system, that all other code on the system would use. Additionally, in cases where it would not prove to be a significant detriment to performance, all code that wishes to use an image could preferably use the common Image class's interface, as opposed to dealing with the object as a JPEGImage directly. In this manner, at a certain cost in performance, you can guarantee that any code that you write for the operating system, can deal with any format of image data, without having to be specifically coded to handle it. And of course, the common interface is designed to be as simple as it can be made, and as consistent with interfaces for similar types of object (such as video data) as possible.
Now I'll admit, it's fairly easy to apply that kind of approach to something like an image class, and significantly less easy to apply it to most other types of classes. Yet so far, I have not been able to think of any situation where there isn't a way to do it. Maybe you can. If you think so, let me know. But in my experience, no matter how elusive it may seem at first, there is always an approach to designing a class in NodeOS, that is essentially definitive. In other words, if there is a concept that you can encapsulate in an object, you can code it in such a way that it needs to be written once, and only once.
I don't really think this is a horribly revolutionary idea. Why it hasn't been tried before, I'm not entirely sure. But I nevertheless think it would be a major step forward to have an OS that actually worked like this. And that's certainly not all there is too it. The class hierarchy is one of the big things in NodeOS, but there's so much more. I think that at least potentially, on the other side of NodeOS's development, there is an environment where getting computers to actually do the things you want is a privilege no longer restricted to programmers. Perhaps also an end to forced incompatibility by the use of closed standards. And dare I say it? There may even be an end to the drudgery of coding, by way of a very drastic decrease in the amount of time and effort it takes to go from concept to implementation for virtually anything you can imagine coding. All with a level of simplicity and consistency that will make it a joy to work with. Think Minecraft, only as an operating system.
So, are you interested now? I really hope you are, because without your help it's not going to happen. Please send me a PM if you can assist with the two things I mentioned, namely the "reality check" and the toolchain. If you have any general comments or questions regarding the project, or would like to accuse me of having unrealistic expectations or foolhardy optimism, please leave a comment below.
So I quite obviously need some help . I would have asked much sooner, but I was too busy debating with myself exactly what the best approach to getting help would be, and I only recently came to the conclusion that I'd be better off just making my OS open source from the start. That being said, I'm not ready to go public just yet. Before I do that, I need help with two things.
The first thing is, a reality check. Yes, I need someone who is much more experienced than me to help me go through my design and make sure that everything I'm planning to do is as feasible as I think it is. I'm a fairly experienced programmer, and I have a pretty good level of familiarity with low level computer architecture, but having never actually tried to implement anything for my project yet, I can easily imagine there may be unforeseen difficulties that may need to be resolved before my design is finalized.
The second thing is, a toolchain. My OS does not use a conventional binary format. There are almost no existing tools and compilers that I could use that would be suitable for my needs. I could use an assembler and a system of macros, but then my whole OS would be stuck in platform dependent assembly, which is not something I want. At the very least I need a complier, preferably written in a scripting language such as Ruby, to bootstrap this project.
If you can help with either of these things, please let me know.
But why should you help you ask, when I have told you virtually nothing of my project? Well okay, here is what I can say about what my OS is, and what I'm trying to accomplish.
There is a famous quote by Albert Einstein, "Make everything as simple as possible, but not simpler." In a nutshell, that is the goal of my operating system. Modern operating systems, and modern software design in general, suck. That's because nothing is ever as simple as it should be. When you give two people the task of solving the same problem by writing software, the solutions they end up with are invariably different. When you have an environment of programmers working independently, with differing ideas about correct design, and then at the end of the day you have to make their software work together, you get a mess.
NodeOS is the solution to this problem. NodeOS is designed so that all code is organized into a class based functional hierarchy, where there is no more than one class for any given type of object. For example, the class for a specific type of image (JPEG for example), must always be a subclass of the basic Image class, and must provide an interface that is compatible with that of the Image class. The goal would be to have no more than one JPEGImage class on the entire operating system, that all other code on the system would use. Additionally, in cases where it would not prove to be a significant detriment to performance, all code that wishes to use an image could preferably use the common Image class's interface, as opposed to dealing with the object as a JPEGImage directly. In this manner, at a certain cost in performance, you can guarantee that any code that you write for the operating system, can deal with any format of image data, without having to be specifically coded to handle it. And of course, the common interface is designed to be as simple as it can be made, and as consistent with interfaces for similar types of object (such as video data) as possible.
Now I'll admit, it's fairly easy to apply that kind of approach to something like an image class, and significantly less easy to apply it to most other types of classes. Yet so far, I have not been able to think of any situation where there isn't a way to do it. Maybe you can. If you think so, let me know. But in my experience, no matter how elusive it may seem at first, there is always an approach to designing a class in NodeOS, that is essentially definitive. In other words, if there is a concept that you can encapsulate in an object, you can code it in such a way that it needs to be written once, and only once.
I don't really think this is a horribly revolutionary idea. Why it hasn't been tried before, I'm not entirely sure. But I nevertheless think it would be a major step forward to have an OS that actually worked like this. And that's certainly not all there is too it. The class hierarchy is one of the big things in NodeOS, but there's so much more. I think that at least potentially, on the other side of NodeOS's development, there is an environment where getting computers to actually do the things you want is a privilege no longer restricted to programmers. Perhaps also an end to forced incompatibility by the use of closed standards. And dare I say it? There may even be an end to the drudgery of coding, by way of a very drastic decrease in the amount of time and effort it takes to go from concept to implementation for virtually anything you can imagine coding. All with a level of simplicity and consistency that will make it a joy to work with. Think Minecraft, only as an operating system.
So, are you interested now? I really hope you are, because without your help it's not going to happen. Please send me a PM if you can assist with the two things I mentioned, namely the "reality check" and the toolchain. If you have any general comments or questions regarding the project, or would like to accuse me of having unrealistic expectations or foolhardy optimism, please leave a comment below.