When UNIX was built it was supposed to run on big machines with a number of users connected to it. You may think of it as one centralized system catering to many stateless “terminals” from which users could log in and work. This model was good because terminals could be made very cheap and all data, programs and processing power could be consolidated on the central computer. Moreover, this centralization forced people to share resources and costs.
Too bad the PC industry changed every thing. UNIX was a bit arcane for people to use. It might have been easy to slap a GUI on top of it to make it less arcane for office folks… however, that didn’t happen when UNIX vendors had the window of time to do it. The result, the PC industry took over the office market with a easy to use GUI on much less powerful computers selling at lower costs per piece. The last nail in the coffin for UNIX in the office was the software distribution rights for the Microsoft Windows operating systems which Microsoft kept exclusively for the PCs. It seems that the UNIX vendors failed to realize the importance of office automation or any such low end (but with a large market) compute needs.
The emerging PC industry (which grew by leaps and bounds) fragmented the compute resources. Now, a business firm would order many machines the net resource value of which would be huge. However, the resource available to an individual user was limited. This made PC manufacturers happy, but increased the costs for business firms (it seems that the UNIX guys didn’t take their chance to lower their prices… and were taken by a surprise by this whole GUIed office automation revolution. They are still here but their market is very small; usually huge data centers and backup back-ends.).
The coming age is seeing a new era of fragmentation. This time this is not the office but the computing needs of individuals which is up for taking. This makes a huge market consisting of personal digital storage, games, multimedia and communication. Often, the personal computer is seen as a digital hub for the integration of all of these. Lately, Microsoft, which has the hold on personal computing software platform is loosing its hold on this integration. In some sense, because of the openness of the platform (or the flexibility and the power present in today’s PCs one might say) multiple vendors are trying to take their share with this fragmentation. A good example is Apple with its iPod taking the music revolution with itself. I have seen my friends offloading their entire music collection from their PCs into iPods… a device which doesn’t come under the control of Microsoft or its conglomerate of PC makers. Another good example is the Internet and so called “web applications”. The backbone of the Internet doesn’t run under Microsoft’s control… nor do the majority of platforms on which web applications are developed. The server side is a huge market but probably not so huge as the client side and we have open HTTP suite of protocol specs for any web application. A large corporation such as Microsoft did have a chance to control all that… let’s say fortunately or unfortunately it managed to slip Microsoft’s attention. Some other areas of fragmentation include movies/video (courtesy google/youtube/TiVo) and gaming (playstation/nintendo taking some market share though Microsoft’s Xbox did and continues to take some share back).
What we should note is that this time the fragmentation is not induced by artificially induced market forces (yup… still living in the dream of free capitalism?). This time it is more because of the proliferation of mobile devices and the failure of the “everything will be connected by TCP/IP network” idea. It is impossible to think of scalability of millions of devices connected to a single centralized server for all its services. Let’s say that wireless bandwidth is not a technological hurdle but more of an economic/political hurdle. Its impossible to create high bandwidth wireless networks without substantial capital investment and its impossible for millions of devices from so many vendors to collaborate together for low latency high throughput wireless connectivity. Economy favors creation of small devices each with its own storage, compute power and network connectivity. The thin client model still holds for quite some stuff… notably email, e-banking and web applications. However, the network kind of already lost its battle for thin client for multimedia which is the major force in personal computing.
The point of the above is to convince you that we are already in a fragmented, disconnected and disintegrated personal computing world (which is only getting more fragmented). The point from this sentence onwards is to convince you that we don’t yet have the right tools platform-softwarewise to deal with it.
All our major computing platforms depend a lot on storage. The storage in an integral, inflexible part of the platform. Storage encapsulates “state” and fragmentation of state is not good. Given that our mobile devices also have storage and hence “state” with them we have to deal with the problem of synchronization of this state. The “state” of the devices are definitely not as (un)pluggable as the devices themselves. Let me illustrate using an example. Consider iPod and iTunes. iTunes needs to be installed on the PC so that iPod works with it. The device could have been more usable if it was not so. iTunes keeps its configuration synced with the iPod at all times. This often takes a lot of effort both on the software development side (think backwards compatibility) and the user side (think time taken to sync; potential errors) and is an inconvenience to both parties. It would have been way better if the iTunes software was present on iPod itself and would have worked from there… more precisely, the program resident on the same device and executing on the state present on the same device. Note that I didn’t put a restriction on where the program actually runs. Let’s take a rather unconventional example of a PC game. PC games are delivered on CD/DVD ROM discs. During game installation you typically install several GBs of data on your PC’s storage. When you play the game, your game state resides on the PC and it is generally inconvenient to carry this state around. (Note that game consoles generally use a small flash drive for all game settings which is a good first step. Game and console companies could also keep all this state on the network). I actually find this humorous, there is a market for gaming laptops which are like these heavy beasts which carry the game, its state and settings along with big screens and graphics cards primarily for the reason that the game and its state is not portable. Consider the following situation. The game is distributed on a flash device which also keeps the game’s state. When the PC discovers such a device it runs the game on the PC but reads program/data/state from the device and writes new state back to the device. You could then have a market of game parlors where the game parlor supplies all the (updated and most cutting edge) hardware and gamers bring in their game flash drives for LAN play etc.
So it seems that keeping programs and related data on separate storage devices does make sense. This makes even more sense for mobile devices which already have storage (with limited compute) resources on them. Some examples are addressbook on cellphones, photos on digital cameras, software packages on flash drives and we already saw examples of iTunes on iPod and games on flash drives/DVD combo.
Let’s see how we can move towards building such a disconnected system. Wireless is our friend here and something like wireless USB could be used for connectivity between devices. The essential idea is a “console” which serves as a compute and primary user interface. Lets imagine a powerful CPU (say Core 2 Duo) and a good GPU hooked up together with enough of chipset to support wireless USB. The rest of our devices will be hooked up using wireless USB. In fashionable style, imagine that the CPU, GPU, chipset and power are embedded in our display (since this will always remain the largest part of our system) [Well the iMac comes pretty close except that it includes hard drives and CDrom drives with it]. Our console boots off a regular CD ROM in the console (the idea being that this piece of systems software is not touched or modified at all but is easily replaceable). Additions to the system whether hardware or software is done through the wireless USB bus. Each “addition” to the system keeps its state (if need be) on itself. The power problem still persists but lets hope that we are not too annoyed by batteries 🙂
One very important thing that we get for free here is isolation of various software packages from each other. More precisely, a piece of software can touch only files in its own package drive (and the user’s personal storage devices).
One of the most important ways in which this system differs from the systems of today is the filesystem layer. If disconnected operation is to be encouraged then we cannot make the user wait for filesystem syncing and “safe device removal”. A device should almost always be in removable state, irrespective of whether programs are running off the device or operating on data on a device. This means that most of this interaction has to be transactional in nature than the regular “open file (which locks device), load data, assume that the data is not changed before writing and write it back after modification”. We now have “open file (which doesn’t lock device but helps the user know if the file is being operated on), run one or more transactions (during a transaction the device is locked), close file”. Adding (application level) transactions also allows us to share an application+data device between two consoles simultaneously.
Application level transactions may have many ramifications. The application knows the last consistent state of the app + data. So when the device is connected back to the console the application automatically opens in its previous state. Suppose you are working on a document at your home console and you now want to move to work you just need to snatch the flash device which contains the app and data and put it in your pocket and walk away. Those applications will disappear from your home console. At your office when you connect your device back the application runs again, detects its last consistent state and opens up your document.
Of course one might think of a slightly more “heavy weight” flash drive for your app + data (say your smartphone) on which you might be able to do some stuff even if you don’t have the console. Perhaps the biggest gift of this kind of a system will be lesser weight to carry as a laptop 🙂