The trick with computer science, and particularly my area of computer science which is systems computer science, is to try and target problems that will be relevant based on how hardware technology advances. And since this is supposed to be relatively pure research, it should be focused on how what new problems will need to be solved based on where things will be in ten years or so.
To that end, I tried to put down a set of thoughts on what computers will be like in 2018 and then see if that inspires any particularly interesting systems problems.
First, my assumptions for the hardware itself:
- No rotating media, all solid state storage (except perhaps for mass backup)
- Many processor cores with various purposes
- Hundreds of megabits of wireless bandwidth (and much more wired bandwidth)
- Integrated biometric authentication that will pervasively authenticate the computer's operator to applications local and remote
Next, how people will use computers:
- Everyone uses many computers -- cellphone/PDA, home server/STB, home computer, navigation unit in cars, game console etc. People expect these computers to all work well with each other, share content, etc.
- Applications are mixed between cloud and local device without a clean delineation. Bandwidth won't be so plentiful that everything can just run remotely. We'll still have at least UIs running locally, and more than just UIs for many applications such as games.
- People use a variety of interfaces -- keyboards, speech recognition, touch, accelerometers etc
- There will not be a single standard, a single type of computer etc. There will be many diverse choices with varying levels of integration and compatibility.
- The storage hierarchy will not be as extreme as it is today (today there is a factor of a million -- nanoseconds to access L1 cache and tens of milliseconds to access disk blocks). Many issues in filesystems will go away (layout, seek minimization, random access will be nearly as fast as sequential access, etc).
- Resources will be plentiful and infrequently shared between applications or users on the same computer. One of the traditional jobs of operating systems will have disappeared. Instead the challenge will be how to put all of these resources to productive use.
- Firewalls, NATs etc will loose their relevance as people realize that inside the network is just as dangerous as outside, that with IPv6 there are plenty of addresses, etc. However, any given network device is likely to have many different IP addresses over the course of a day as users move between networks. Some way besides IP addresses and DNS needs to exist so that all of a users computers can name each other regardless of which network they're currently on.
- People will not find it that hard to put many cores to use. This is a relatively solved problem from an academic point of view.
- There will be a greater and greater distinction between client computers and server computers and their system software needs will be very different. While bandwidth to servers will be much higher (especially for wireless devices), latency will not be that much better. It'll be back to the 1950s mainframe days. Time to dust off those IBM redbooks.
- Given how many devices people will use, replication / syncing / authorization will be important. People will want a consistent view of their world regardless of which device they're using. Third parties / content owners will also want to control how content is replicated.
- Single sign on, password/authentication systems etc will loose their relevance in the face of devices with integrated biometric authentication. If I can use my thumbprint to authenticate myself to my phone/laptop when I first use it each day, then it can securely and transparently authenticate me to remote computers as I need to access them during the day. Anonymizing services can act as intermediaries if I want to authenticate to a third party using a unique identity without revealing my actual identity.
- Most sharing will not be within a computer but between users on different computers. This will not be particularly complicated since it will be mediated by mutually trusted central computers. Think how easy it is to share pictures on Flickr with someone today -- you just send them an email invite with a capability in it.
- Given the importance of the cloud and the value of the data stored on it, better systems will have to be put into place to prevent exploits, worms etc from accessing private data.