According to Engadget, Intel and Microsoft are funding a clean slate project to reinvent personal computing. Honestly, I think there is plenty to like about where we are currently and where the near- and medium-term evolutionary steps will likely take us. Then again, I have grown up with computers "as we know them" and am unwillingly biased.
If I were to start over with computing, I would make a number of fundamental changes:
1) ALL hardware should be hot-pluggable. I don't mean just USB and the like. All memory, expansion cards, storage, and other parts of the computing architecture should be able to be swapped out without powering off the system. In my thinking, this would require a small core system to be at the center of everything. It would manage all hardware and provide whatever OS with a basic functionality at incredible speeds. The base system should be nearly unusable as a full computer, but divert processing power, I/O, and memory storage appropriately to whatever modules are installed.
2) The architecture should allow for multiple processors of different types. Today, the x86 processor is nearly ubiquitous and is pretty much the most generic or general-purpose processors. However, in the average PC today there exists a number of speciality processors that help accelerate other tasks. The most notable of these is the GPU, which is effectively a processor many times more efficient than the main CPU, but useful only for a handful of commands. In future computers, I would like to see all processors treated equally through a processor abstraction layer, which allows for an arbitrary number of different types of processors, with a scheduler dividing work appropriately among the processors most suited for the work at hand. I would like to see this include FPGAs, which would be dynamically reprogrammed based on what work is being done. An average system would consist of the core components and processor (which would act as the manager/scheduler), a faster general-purpose CPU (possibly multi-core), and one or more FPGA or other specialty processors.
3) The whole platform should never need to be turned off or rebooted. The core system should be able to manage changes to hardware seamlessly and drivers should work at an abstracted layer which doesn't require the whole system to start over whenever a change is detected. Even in the case where processors are swapped out, everything should fall back to the core system whenever modules are removed. This doesn't mean that you shouldn't properly prepare the system for a change. It is unreasonable for the system to catch a physical disconnect and handle it for some components. For example, in the case where RAM is being swapped out, the contents of that memory need to be pulled and placed elsewhere before the system could handle such a change.
4) Everything should be abstracted. Absolutely every piece of everything should run through an abstraction layer. This layer should be running mostly in the aforementioned core system. This allows the OS developers to concentrate on developing a secure, extendable, and usable OS. APIs should be provided for hooking at all different levels so that third party providers can enhance most everything. Ultimately, tasks that, today, require a complete rebuild, should require almost no effort. For example, if I were to desire to move from a single HD to multiple HDs in RAID 5, I would have almost no choice but to start over from scratch. Similarly, upgrading a motherboard is usually catastrophe without reinstalling the OS. This should all be as simple as swapping out a keyboard or mouse is today.
5) Security. TPM, despite many cries to the contrary, is a pretty good idea in terms of keeping unwanted code from running on your system. Unfortunately, the execution this far has been poor, and not much has been done to fix it. Code signing and strict policy (followed up with enforcement) can help significantly cut down on malware. The issue is, they system needs to do several things to keep up. Firstly, it needs to be flexible enough to adapt quickly to emerging threats. Secondly, system needs to be set up with the right tools (like TPM) which enable it to effectively secure itself. Lastly, the system needs sane defaults. Most systems historically ship with defaults which leave them incredibly exposed. This is usually done with the excuse of "we want it to work with everything out of the box". That line of reasoning is not necessarily at odds with security, and vendors need to embrace security as a feature that users expect to work out of the box just as much as any other.
6) Automatic updating of everything. While this has been around for years in the BSD and Debian worlds, it's not something that many other platforms have picked up. The reality is that all software these days is constantly being updated for security and functionality issues. Updating software outside of the main OS in Windows, most unicies and OS X is hit and miss, with many vendors doing their own thing, or nothing at all. This kind of inconsistency leads to either a lot of effort going towards keeping things current, or to a lack of updates. Some OSs (like Debian-based Ubuntu) do a relatively good job, keeping everything installed through the package system (which is usually almost everything) updated automatically. For any new platform, I'd say this is a must. As a side note, all software should be in package form. Installing and uninstalling should be as simple and consistent as possible. Uninstalling should actually result in a clean system, and should be friendly to configurations.
7) A mouse-and-window-based GUI is pretty much standard these days, and there's not much on the horizon to be supplanting that for foreseeable future systems. But, as with developments in the last several years, there have been enhancements in usability. Probably the most widely usable OS out there is Mac OS X. Sure, argue with me if you will, but of the major OSs, I think OS X is the most friendly. There are certainly things that could be done better, and future systems should really be built around them. Firstly, I should never, ever, ever be able to outrun any UI I'm using. There's just no excuse for that. Secondly, windowing needs to work in a predictable way, and that model should never be broken. All too often, focus is stolen or ordering refuses to operate the way it should. Consistency here is of the utmost importance, and should be enforced.
8) Backups. Apple wins again at making backups easy with Time Machine in OS X 10.5, but more needs to be done. I need to be able to take an entire system and move it through time as a whole or in pieces, all the way back to its first boot. Backups should be able to be placed on any storage, whether directly connected, or on a network or the Internet. Backups should be able to be reloaded on different hardware in case of emergency. The backup images should be encrypted so that they may reside anywhere without concern for compromise.
9) Mobility. Systems of the future should allow you to move anywhere and do anything. Ultimately, I'd like to be able to feel as if I'm using the same computer anywhere I go. This can be accomplished using Terminal Services or a similar type of screen-sharing architecture, but that has serious limitations when it comes to certain applications. What I'd really like is for the OS and the hardware to become user centric.
10) Ubiquitous, high-speed, wireless internet access. Whatever system I'm using, it should always be connected, and always at a high speed. This seems like it might be coming to fruition with the recent developments in the 700mhz and TV white space bands which Google and the like are trying to leverage for wide area data use. Such a network, with speeds approaching those of wired broadband, would enable future systems to be constantly connected, which directly supports my previous item.
After all of my above ranting, what would my dream system look like? Well, let's start with my iPhone. This resembles what I would call a core system. It carries with it enough storage and processing power to be useful, but is quite weak compared to that of a desktop. When I go through my day, I transition from one to the other, to another. I'm spread across several machines, and have to put a decent amount of effort in to keeping them in sync. My perfect system would be a single device, which I would carry with me. Wherever I desire to do some work, I would simply plug it in to a dock. Through the dock, the core system would access more storage, faster network connectivity, enhanced processing power, and better displays. All in all, it would be the same as using a desktop, but I would be able to pick it up and walk away with it, without having to worry about anything. When I get home, I would take the core system, and plug it in to a laptop-shaped dock, which would provide additional power, memory, processing power, and display.
Perhaps I'll see my fantasy come true as a whole some day, but for now, I'm thrilled to see many of these developments on the horizon.


