Whether intended to service a single person or an entire enterprise, all of these systems share some fundamental requirements -- they must be reliable (when was the last time you rebooted your phone?), secure, accommodate future functional integration and service changes via software, thrive in a distributed network, support multiple tasks, increasingly have real-time response, and all while remain price-sensitive. And perhaps most importantly, applications created to run on these systems must be easily portable. Already, nearly half of such systems have more than one processor, and almost half employ more than one architecture.
Sun's Java™ language, as well as the applications its compilers create, answer many of the above requirements from the software side. First, it's simple. Java was designed as closely to C++ as possible in order to make the system more understandable, but omits many rarely used, poorly understood and otherwise confusing features of C++. Second, it produces small code. One of the goals of the Java language is to enable the construction of software that can run on a stand-alone basis in small machines. The size of the basic interpreter and class support is about 40 kbytes; adding the basic libraries and thread support (essentially a self-contained microkernel) adds an additional 175 kbytes.
Third, it's object oriented. This facilitates the clean definition of interfaces and makes it possible to provide reusable software components. Fourth, it's distributed. Java has an extensive library of routines for coping easily with TCP/IP protocols like HTTP and FTP. Further, Java applications can open and access objects across a network via URLs with the same ease programmers are used to when accessing a local file system.