Are you ready for the post-PC era of computing?
FIRST THINGS FIRST. This is a new column addressing the ever-broadening constituency of Java Report Magazine.
I'm also a new columnist, so a little background is in order.
I came to computing back in 1966, and I have seen a lot of technology flow in and out of interest and usefulness. Five times in my IBM career I've had the opportunity to participate in projects that literally changed how IBM does its business worldwide. It's with this perspective that I'm approaching the biggest change to computing that I have ever worked with.
What is this big change? Pervasive computing. The term refers to a generation of technology that will integrate "smart things" that link with the computing infrastructure. From personal assistants to connected cars and intelligent appliances, these things and the services they participate in will change the way our world works. Smart things will be responsive, omnipresent, and easy to deal with.
It sounds like everything we want but don't currently have with the complex, general-purpose computers we work with. Today, it takes conscious effort (often after extensive training) to use a PC. I confirmed this again recently when I gave my mom her first PC. She's 80, and still afraid of its complex user interface.
The post-PC era will bring devices that don't bother us unless we're needed or asked to be involved in their operation. When we do have to interact with these devices, it will be by voice or touch-screen, with the option of rendering graphical interfaces on personal digital assistants or other computing devices (including the PC).
So how will we bring about this revolution? Moore's law continues to bring us faster, more compact, high-capacity components at a fraction of yesterday's costs. New developments are bringing about wireless "piconets," wide-area wireless connectivity, high-capacity continuous Internet links, wearable computers, speech interpretation that works in noisy environments, and massive mainframe-based server farms with plenty of data to go around. At the same time, modern society rolls along with its power outages, traffic jams, cancelled flights, unstable financial markets, the daily e-mail storm, and a thousand other reasons to stay connected.
To date, embedded devices have been principally designed and paid for by the makers of "things"—smart appliances, kiosks, handheld terminals, automobiles, cellphones, and PDAs. These things have often been custom engineered for a single solution, without the flexibility to be connected to or re-used in other applications.
But connectivity changes everything. Wireless or wired, it changes the complexity of devices. It alters the way "things" interact with other "things" in our environment. It brings them closer to our daily lives and our daily routines. More importantly, it changes the investment model for computing technology.
In the world of pervasive computing, the investment and revenue will principally be associated with the providers of data, connectivity, and omnipresent services. "Things" will need to be compatible with the other devices they connect to and interact with. They will need to be able to carry out their unique task, or provide a useful platform through which to access other smart things. In due time, smart "things" could well become a commodity, experiencing the pricing and distribution model that goes with that marketplace.
Java's Role in the Pervasive Computing Revolution
But enough talk of my view of the future. What does this have to do with Java? The Java language, its associated class libraries, and virtual machine technology are the keystones to making the pervasive world possible.
If you're an enterprise Java developer, you've been working with advanced programming tools and technology right where the services will originate. You're where the data is, and where the Internet has driven e-commerce. You control the messages and transactions that get things done, and know how to scale technology. You know about network management, security, and coping with the wily hacker. You know about write once and run (almost) everywhere.
If you're an embedded device developer or engineer, you've been dealing with constrained resources like memory, battery power, and processor speed. You know about integrating hardware devices, drivers, operating systems, and compact applications. You know how to harden a platform so that it won't fail, and you know about real-time determinism. Embedded devices don't have uniformly standard hardware or software interfaces. There are hundreds of combinations of processor architectures, operating systems, board implementations, packages, and device attachment buses. These all require analysis and integration. Often, each embedded device is unique, requiring up-front engineering before the first line of application code is written.
The providers of pervasive computing solutions will turn to both groups to contract and construct their offerings. By deploying these offerings with Java technology, I believe you'll be able to offer better solutions faster, and effectively be able to reuse the intellectual property developed. Today, it's possible to construct end-to-end pervasive solutions that will scale to support large numbers of client devices on a large number of target platform architectures by employing the Java language and virtual machine technology. Carl Sagan saw billions and billions of stars; I see billions of network-connected "things."
There are already a large number of different embedded processor architectures (considering only 32-bit machines, this includes X86, PowerPC, ARM, StrongARM, XScale, SuperH3, SuperH4, MIPS, DragonBall, and many more). These are characterized by small, efficient packages, low heat dissipation, low power consumption, and many feature variants within individual families. Some are now being integrated into chip carriers with basic devices that are needed for making Internet Appliances. They are often priced in the low dollar to $20 range, and interface nicely with Ethernet, wireless radios, and touch-screen LCD displays. There are dozens of popular embedded operating systems (RTOS) from a number of companies. Some are based in Linux and Posix technology. Others are home grown. Some devices are even constructed with their own custom-written operating systems. The most reliable have years of use without ever requiring a re-boot. Unlike the PC, embedded RTOS components are designed to blend quietly into the finished device instead of presenting themselves to you as the computing experience.
The specialized work of integrating devices, circuit board designs, bus interfaces, memory (both RAM and FLASH-ROM), processors, and communications interfaces is the realm of the embedded computing engineer. If you want to deploy a pervasive solution, you'll need the services of specialists with experience working in small, often resource-constrained spaces like these.
I identify two fundamental classes of embedded devices. One is a general-purpose platform. The other is the custom-engineered device. In both cases, the devices can behave as peer-to-peer resources implementing client and service components.
General-purpose platforms need to be able to run applications that are not necessarily defined at the time the device is created. A pervasive solution may specify an existing design for the platform, purchased off-the-shelf. It may need to work through several devices that are already established in the marketplace. In any case, a key quality for the platform device will be its ability to properly run the connected embedded application. Fast, rugged, compact, low power consumption ... none of these qualities matters if the platform can't run applications properly. Platform designers pay a cost for this flexibility. It means that extra memory capacity must be paid for, extra software (in the form of class library components) installed, and general-purpose user interfaces (browsers and windowed screen managers) deployed.
Custom-engineered devices are those that conform to a single, closed design. Often these devices will interface to internal product buses, controls, and sensors. The product engineer has complete control over the device's development, testing, and deployment. In this environment, it isn't necessary to burden the product with the cost of extra resources and unnecessary facilities. This translates directly into memory capacity, execution speed, determinism, and predictable behavior.
Dozens of processors, operating systems, deployment environments ... client and service components joined at the hip ... If you're an enterprise Java developer, you have a valuable background and the potential for a whole new marketplace for your experience and ideas. You know object-oriented development, and have benefited from the power of IDE-based development tools and team collaboration through repositories. You know how to make Java and virtual machine technology work for business.
Real-time interactive information, network management, remote automated control for maintaining apps and installing new features ... If you're an embedded developer, you've got a challenge to rise to because the enterprise project developers want to work with you, and they'll bring with them new requirements and unheard of complexity. You know exactly how to make it fit, and how to select the right hardware and RTOS features to get the job done.
The times, they are a changing. Java technology is the keystone around which we'll construct pervasive solutions and deploy them efficiently.
Marc R. Erickson is a project manager at Object Technology Inc., a subsidiary of IBM Corp., in Raleigh, NC. He can be contacted at firstname.lastname@example.org.