There are a number of things that aren’t quite right with computer systems today that can’t be fixed by throwing more processing power into the machine or creating a new language built upon the current foundations.
These are problems to do with the maintenance of the system, updating it and keeping it virus free. These problems can be seen starkly when looking at autonomous systems, that don’t have programmers/engineers dedicated to improving the system. I consider fixing these problems as a precursor project to getting flexible, adaptable AIs.
The problems stem from the fact that computers were invented by mathematicians, and them considering computers as abstract computational machines guided by the benevolent programmer. Which is not a good abstraction for todays world with fairly widespread malware, with the computers looked after by people fairly ignorant of its inner workings (or just time constrained).
So something needs to change, and I think at a fairly fundamental level. But revolution is hard, so it should be done right to minimize the number of times revolution has to occur.
These problems boil down to one major point: A programs ability to acquire resources should be aligned with its usefulness. A virus is negatively useful and should get no resources (no memory/processing time), a scheduler is useful so should be get some resources, if a better scheduler comes into a computer system it should also be able to acquire resources.
By resources I mean things like the following:
Memory Usage – Both Heap and Stack. A good program should be able to ask for and get what it needs. Also memory bandwidth shouldn’t be able to be monopolized for free.
Harddisk Usage/Memory bandwidth.
System Resources – E.g Things like threads IDs if they are a limited resource.
Interrupts – Which programs should get activated when a timer or input interrupt goes off.
Controlling Network/video/sound.
This all sounds like a welter of variety. So to try and make things uniform in the way in posix that everything is a file, every resource in my system is a sort of capability. A capability in my system can be thought of as an unforgeable/unalterable/revocable pointer.
So for example if a process got control of an interrupt it would be given a special executable capability, that when called would take a capability in a register as a the capability to call when the interrupt fired. Programs are given capabilities for memory chunks as well, which they can assign to be used as stack or used as heap.
Now I haven’t explained how the system get the capabilities. Just assume for a moment it is a form of agoric bidding.
The answer to the question why I am building anything at all, is that I want to understand what a human brain is (so computational systems that are self-maintaining are important to build and understand), and I want to make the cost of living cheaper.